أهلا وسهلا بك أخي الكريم ... دائما التجارب الأولى هي التجارب الأصعب , وإذا تم اجتيازها تفتح لك أبواب هذا العالم ( عالم المايكروكنترولر) فتمنياتي لك بكل التوفيق .
كنت اشتريت ميكرو pic 16f84a و نزلت عليه برنامج يضئ و يطفئ ليدات و لكن بكل اسف لم يعمل بالشكل الصحيح حيث انه يضئ الليدات و لا يطفئها
|
في أي مشروع يحتمل أن يكون هناك عدة مشاكل يمكن تقسيمهم لعدة أقسام:
1- أن تكون المشكلة بسبب الكود الذي تم كتابته .
2- أن تكون المشكلة في أن الميكروكنترولر لم تتم عليه الكتابة(الحرق) بشكل سليم لعيب في جهاز البرمجة(المبرمجة) أو في البرنامج المستخدم لذلك .
3- أن تكون المشكلة بسبب التوصيلات .
وكل مشكلة من المشاكل السابقة قد تكون لعدة أسباب . لذلك نحن بحاجة إلى تحديد المشكلة بالضبط . لذلك عليك أولا أن تتأكد من الكود هل سيؤدي الوظيفة المطلوبة أم لا ؟؟
ولكي تتأكد قم بتجربة الكود عن طريق برنامج المحاكاة proteus . فإذا عمل بالشكل المطلوب كما تريد ( إضاءة الليد وإطفاءه) فهنا تأكدنا أن الكود جيد . والمشكلة غالبا ستكون إما من النوع الثاني ( لم تتم الكتابة جيدا على البك) أو من النوع الثالث(مشكلة في التوصيلات) .
ولكن ماذا لو جربنا الكود على برنامج المحاكاة ولم يعمل جيدا ؟؟ فماذا نفعل .
بالتأكيد لابد من مراجعة الكود جيدا . ويجب الانتباه لأخطاء شائعة يقع فيها الكثيرون:
هناك من يكتب الكود بهذه الطريقة :
كود:
void main()
{
trisb=0;
loop:
portb=ob11111111;
delay_ms(500);
portb=0;
goto loop;
}
هل تعلم ماذا سيحدث إذا تم كتابة الكود السابق .. ؟؟ سنلاحظ أن الليد يضيء فقط ولا ينطفئ . نعم هذا ماسيحدث . لماذا ؟؟ لأننا جعلنا أمر انتظار واحد فقط بعد عملية الإضاءة ولم نجعل أمر انتظار بعد الإطفاء . لذلك سنلاحظ أن الليدات مضيئة ولا تنطفئ .
وهذا الخطأ يقع فيه الكثيرون سهواً .
هناك خطأ أيضا شائع :
أن يكتب الكود كما يلي :
كود:
void main()
{
loop:
trisb=0;
portb=0;
delay_ms(500);
portb=0b11111111;
goto loop;
}
هنا الخطأ أنه وضع أمر الانتظار بعد إطفاء الليدات ولم يتم وضع أمر الانتظار بعد الإضاءة لذلك عند تشغيل الدائرة في الواقع أو في برنامج المحاكاة فسنلاحظ أن الليدات غير مضيئة .
إليك خطأ آخر خطير يقع فيه البعض :
كود:
void main()
{
loop:
portb=0;
delay_ms(500);
portb=0b11111111;
delay_ms(500);
goto loop;
}
الخطأ هنا أن المبرمج نسي الأمر trisb=0; . وبالتالي لن تعمل الدائرة كما يريد .
===============================
النوع الثاني من المشاكل : وهو أن يكون بسبب جهاز البرمجة , أو بسبب البرنامج المستخدم في عملية الكتابة على البك ( الحرق كما يسميها البعض ) .
لابد من التأكد أن جهاز البرمجة لديك يعمل جيداً . وأن يكون السوفت وير (البرنامج) المستخدم للكتابة برنامج جيد ونسخة جيدة وليس بها مشاكل .
بالنسبة لي أنا لا أستخدم برنامج winpic الذي تستخدمه أنت وأستخدم برنامج آخر
يمكنك تحميله من هنا
http://members.aon.at/electronics/pi...cpgm_v1015.zip
================================
النوع الثالث من المشاكل : أن تكون التوصيلات خاطئة . فلابد من التأكد الجيد من التوصيلات خاصة تغذية البك وتوصيلة المذبذب سواءا كان مكثف ومقاومة أو كان كريستال ومكثفان . فهذه التوصيلات تجعل البك لا يعمل .
وهنا في مشكلتك أنت يحتمل احتمال كبير جداً أن تكون المشكلة في أنك لم تقم بتوصيل مقاومة 10 كيلو للطرف MCLR (الطرف رقم 4 في البك ) . فيجب توصيل مقاومة طرف منها يوصل بـ MCLR والطرف الآخر لها يوصل بجهد موجب 5 فولت .
هذه التوصيلة أؤكد أنها مهمة جداً وكثيرا ما تسبب نفس مشكلتك التي تواجهها .
أيضا يحتمل أن تكون البورده (أو Tested Board ) التي تستخدمها سيئة وبها مشاكل .
=======================
أظن الآن انك عرفت ماذا ستفعل ؟؟ ... فلتحاول اكتشاف المشكلة بناءا على المعلومات السابقة ... والله الموفق
=======================
تمنياتي لك بالتوفيق في رحلتك . وأخبرنا بالنتائج ونوع المشكلة عند اكتشافها .