قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية haidar ayad
haidar ayad
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2011
الدولة: العراق
المشاركات: 178
نشاط [ haidar ayad ]
قوة السمعة:0
قديم 18-10-2013, 04:25 PM المشاركة 1   
x2 البرنامج يعمل على الكمبيوتر ولا يعمل على الواقع ؟! Twitter FaceBook Google+



السلام عليكم
اخوتي عملت برنامج صغير وظيفته العد فقط من ال0-9 عند كل ضغطة زر ...بواسطة البيك 16f628a
ولكن المشكلة ان البيك يظهر لي على الشاشة اول رقم وضعته او حددته للعد منه وهو الصفر ...وعندما انقر الزر لا يعد ويبقى على الصفر .... فما السبب ؟

وهذا الكود مع الدائرة :
http://www.gulfup.com/?V8ZdSI

>>>>>>>>>>>>>>>>
وعندي سؤال اخر وهو : كيف اجعل الدائرة تعد فقط اذا ضغط الزر لمدة دقيقة او لاي وقت محدد ؟ يعني اذا شخص نقر الزر بسرعة فلا يعد الا اذا بقى ضاغط لمدة طويلة بمقدار دقيقة تقريبا....كيف ؟

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 18-10-2013, 05:09 PM المشاركة 2   
افتراضي


السلام عليكم
اخوتي عملت برنامج صغير وظيفته العد فقط من ال0-9 عند كل ضغطة زر ...بواسطة البيك 16f628a
ولكن المشكلة ان البيك يظهر لي على الشاشة اول رقم وضعته او حددته للعد منه وهو الصفر ...وعندما انقر الزر لا يعد ويبقى على الصفر .... فما السبب ؟

وهذا الكود مع الدائرة :
http://www.gulfup.com/?V8ZdSI

>>>>>>>>>>>>>>>>
وعندي سؤال اخر وهو : كيف اجعل الدائرة تعد فقط اذا ضغط الزر لمدة دقيقة او لاي وقت محدد ؟ يعني اذا شخص نقر الزر بسرعة فلا يعد الا اذا بقى ضاغط لمدة طويلة بمقدار دقيقة تقريبا....كيف ؟
سلام عليكم
عندي بعض ملاحظات
1- اذا كنت تتعامل مع سويج فلابد ان تجعله اما 0 او 1 بمعنى انت وصلت طرف سويج الى مصدر لابد من تربط نهاية سويج الى الارضي عبر مقاومة 10 كيلو بحيث يوصل الى مايكرو 0 فولت في وضع عادي وعندما تضغط يصل الية 5 فولت

2- لابد ان تضيف الامر CMCON=7; في بداية البرنامج لان بورت A ليس في وضع ديجتل اي انه يتعامل comparators لذا عليك كتابة الامر CMCON=7 لغرض جعل
بورت A ديجتل

3- انت تعرف في سفن سكمنت ان اقصى رقم هو 9 ولكن لما تزيد x بواحد راح يصبح 10 وهو لايظهر على سفن سكمنت
وحلها بسيط تضع شرط اذا x اكبر من او تساوي 9 خلي بورت b نفسها عند قيمة 9

كود:
void main()
{
int x; x=0;
CMCON=7;
trisb=0;
trisa=1; porta=0;

loop:

 //dp- c=1 -D- e=3 -g- f=5 -a-b=7
 if (x==0)
   { portb=0xEE;}
 if (x==1)
    { portb=0b10000010;}
 else if (x==2)
    { portb=0b11011100;}
 else if (x==3)
    { portb=0b11010110;}
 else if (x==4)
   { portb=0b10110010;}
else  if (x==5)
   {  portb=0b01110110;}
else if (x==6)
   { portb=0b01111110;}
else if (x==7)
   { portb=0b11000010;}
else  if (x==8)
  {  portb=0b11111110;}
 if (x>=9)
 { portb=0b11110110;}


//while(porta.f0==1)
if( porta.f0==1)
{
delay_ms(600);
//if( porta.f0==1)
x++;

}
goto loop;

}
******************************************
بالنسبة لسؤالك الثاني تم أستخدام تايمر 0 اي بتفعيل الانتربت
وهنا عند ضغط على سويج تضع هذا الامر
كود:
if( porta.f0==1)
{
 delay_ms(20);
 tmr0=0;
 while( porta.f0==1);
  if( time > 1000)x++;

}
طبعا هنا ماذا فعلت اخبرته اذا تم ضغط على سويج انتظر فتره زمنية للتخلص من الاضظرابات في سويج bounce وبعدها يدخل في لوب مستمر ومعناها هنا طلما انت ضاغط على سويج لاتفعل شي وفي هذا لحظة تايمر 0 يحسب زمن بعدها عند رفع ضغطة من سويج نختبر هل زمن وصل الى قيمة مطلوبه او لا اذا كان نعم زيد x
واذا لا تفعل شي

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية haidar ayad
haidar ayad
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2011
الدولة: العراق
المشاركات: 178
نشاط [ haidar ayad ]
قوة السمعة:0
قديم 18-10-2013, 05:30 PM المشاركة 3   
افتراضي


رحم الله والديك والله يرزقك الجنة .... فقط وضعت ال CMCON=7; واشتغل معي على الواقع جيدا .... وانا كنت واضع اذا يصل اكثر من تسعة يظهر الحرف H

.............
اما بالنسبة لجواب حضرتك على السؤال الثاني فعندي سؤال :
ما الفرق بين كودك واذا وضعت هكذا :
if( porta.f0==1)
{
delay_ms(1000);

x++;

}

؟؟؟؟؟؟؟؟؟؟


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 18-10-2013, 06:03 PM المشاركة 4   
افتراضي


رحم الله والديك والله يرزقك الجنة .... فقط وضعت ال CMCON=7; واشتغل معي على الواقع جيدا .... وانا كنت واضع اذا يصل اكثر من تسعة يظهر الحرف H

.............
اما بالنسبة لجواب حضرتك على السؤال الثاني فعندي سؤال :
ما الفرق بين كودك واذا وضعت هكذا :
if( porta.f0==1)
{
delay_ms(1000);

x++;

}

؟؟؟؟؟؟؟؟؟؟
حسب كودك اذا تم ضغط على سويج راح ينتظر لمدة ثانية ومن ثم يزيد X بواحد تذكر هذه نقطة اذا كان لديك تطبيق كبير وفيه عدة وظائف اختيار زمن تاخير كبير يخلي مايكرو خلال هذا زمن لايفعل اي شي

ولكن في استخدام الانتربت تايمر0 يعمل مستقل عن عمل مايكرو وبتالي اذا تم رفع ضغط عن سويج مايكرو يكمل عملة

عموما حسب تطبيق لديك فهناك حلول برمجية كثيرة لاتقتصر فقط على الانتربت فمن هذه حلول اذا ضغط على سويج وبعد وضعت زمن تاخيري قدره ثانيتين وانا اريد اقرا درجه حرارة بستمرار وهذا زمن يعتبر كبير ماذا افعل ؟
جواب بسيط عند ضغط على سويج انتظر ثانتين ولكن راح قسم هذا زمن الى زمن صغير مثلا 10 ملي ثانية وخلي داله for تكرر هذا زمن وكم مرة لازم اكررها قسم زمن على 10 =200 وفي داله for اضع قرا قيمة حساس حراره وهنا تلاحظ اني قرات قيمه حرارة كل 10 ملي ثانية بينما الامر سويج لايزال ينتظر ثانيتين

وهكذا اخي توجد حلول برمجية كثيرة
واتمنى لك التوفيق


الصورة الرمزية haidar ayad
haidar ayad
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2011
الدولة: العراق
المشاركات: 178
نشاط [ haidar ayad ]
قوة السمعة:0
قديم 18-10-2013, 06:21 PM المشاركة 5   
افتراضي


استاذي الجليل ولو ممكن اتعبك معي .... ولكن الكود الذي اضفته (التايمر) لم يعمل معي اي لا يعد لماذا؟


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 18-10-2013, 07:17 PM المشاركة 6   
افتراضي


استاذي الجليل ولو ممكن اتعبك معي .... ولكن الكود الذي اضفته (التايمر) لم يعمل معي اي لا يعد لماذا؟
سلام عليكم
اعطني مشروع مرة اخرى لتاكد من المشكلة


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 19-10-2013, 09:28 AM المشاركة 7   
افتراضي


استاذي الجليل ولو ممكن اتعبك معي .... ولكن الكود الذي اضفته (التايمر) لم يعمل معي اي لا يعد لماذا؟
سلام عليكم
كود:
void main()
{
int x; x=0;
cmcon=7;
trisb=0;
trisa=1; porta=0;

loop:

 //dp- c=1 -D- e=3 -g- f=5 -a-b=7
 if (x==0)
{ portb=0xEE;}
 if (x==1)
{ portb=0b10000010;}
 if (x==2)
{ portb=0b11011100;}
 if (x==3)
{ portb=0b11010110;}
 if (x==4)
{ portb=0b10110010;}
 if (x==5)
{  portb=0b01110110;}
 if (x==6)
{ portb=0b01111110;}
 if (x==7)
{ portb=0b11000010;}
  if (x==8)
{  portb=0b11111110;}
 if (x==9)
{ portb=0b11110110;}
 if (x>9)
{ portb=0b10111010;}

//while(porta.f0==1)
if( porta.f0==1)
{
delay_ms(10000);
//if( porta.f0==1)
x++;

}
goto loop;

}
اخي كريم عند ضغط على سويج فانه بعد عشرة ثواني سوف يزداد X بواحد لذا اعتقد ان كنت وضعت فترة زمنية كبيره عليك انتظار حتى ينتهي زمن بعدها يزداد رقم


k99
:: مهندس ::
تاريخ التسجيل: Oct 2013
المشاركات: 14
نشاط [ k99 ]
قوة السمعة:0
قديم 22-10-2013, 05:57 AM المشاركة 8   
افتراضي


السلام عليكم ورحمة الله
اخي لقد حصل معبي هذا قبل كده
ووجدت المشكلة من ضبط الذبذبة للميكروكونترولر .. قمت بموافقة الذبذبة الداخلية للميكروكونترولر كما لدى الكود واشتغل معي تماما والوقت صار مظبوط ميه الميه .. اخي يمكنك النأكد من هذا النحو

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 03:46 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025