باختصار وحدات (موديولات) المؤقت Timer Modules والمقاطعات مع الميكروكونترولر PIC18F2550 :

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

باختصار وحدات (موديولات) المؤقت Timer Modules والمقاطعات مع الميكروكونترولر PIC18F2550 :

مُساهمة من طرف Admin في السبت مارس 08, 2014 10:22 pm


باختصار وحدات (موديولات) المؤقت Timer Modules والمقاطعات مع الميكروكونترولر PIC18F2550 :

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

يتضمن الميكروكونترولر PIC18F2550 أربع وحدات (موديولات) مؤقت :
TIMER 0, TIMER 1, TIMER 2 and TIMER 3 . سوف نتناول بناء وعمل كل مؤقت باختصار.

المؤقت TIMER 0 :
• يعمل المؤقت TIMER 0 فى كل من الوضع 8-bit والوضع 16-bit .
• يمكن توقيت المؤقت من مصادر ساعة خارجية أو داخلية .
• يتم توفير قاسم تردد سابق prescaler بحجم 8-bit لتقسيم تردد الساعة .
• يمكن إعلان المقاطعة عند حدوث تجاوز (طفحان – ملء)  overflow المؤقت بحيث يتم توليد مقاطعة كلما حدث تجاوز .  

وضع العمل  8-bit :
الشكل التالى يبين المخطط الصندوقى عند العمل فى وضع 8-bit :




• مدخل الساعة الخارجية هو الطرف T0CKI . يتم اشتقاق الساعة الداخلية عن طريق قسمة تردد المذبذب على (4) .
• يتم التحكم فى تشغيل المؤقت TIMER 0 عن طريق سجل الوظائف الخاصة T0CON . الشكل التالى يبين تعريف بتات السجل T0CON :




• يمكن اختيار قيمة قاسم التردد السابق prescaler بين (2) و (256) ، باستخدام البتات T0PS2:T0PS0 بالسجل T0CON .
• السجل TMR0L هو سجل المؤقت عندما يعمل فى الوضع 8-bit .
• السجل TMR0L يعد تصاعديا عند كل نبضة ساعة ويتجاوز overflow عندما يتغير العدد من (255) إلى (0) . يتم توليد مقاطعة بعد حدوث التجاوز ، إذا كان قد تم تمكين المقاطعة بالمؤقت .
• يمكن حساب الزمن لحدوث تجاوز باستخدام المعادلة التالية :



الكود:

Time to overflow = 4 * Clock period * Prescaler *(256 - TMR0L)


حيث :
• الزمن لحدوث التجاوز Time to overflow بالملى ثانية ms .
• الفترة الزمنية للساعة Clock period بالملى ثانية ms .
• القيمة TMR0L هى القيمة الابتدائية المحملة ( من 0 إلى 255) على السجل TMR0L .

على سبيل المثال :
إذا افترضنا أن تردد الساعة 8MHz ، وأن قيمة قاسم التردد prescaler أختيرت لتكون (16) عن طريق تحديد البتات PS2:PS0 بالقيمة الثنائية (011) ، وأيضا على فرض أن سجل المؤقت يتم تحميله بالقيمة العشرية (100) ، عندئذ فإن الزمن لحدوث تجاوز يمكن حسابه كما يلى :
• أولا يتم حساب الفترة الزمنية (الزمن الدورى) للساعة :



الكود:

Clock period is T = 1/f = 1/8 = 0.125 μs


• ثم حساب الزمن لحدوث تجاوز :


الكود:

Time to overflow = 4 * 0.125 * 16 * (256 - 100) = 1248 μs


لذلك ، فإن المؤقت سوف يتجاوز بعد 1.248 ms .
• فى معظم التطبيقات نريد معرفة ما هى القيمة التى تحمل إلى السجل TMR0L من أجل زمن تجاوز مطلوب . بإعادة ترتيب المعادلة أعلاه ، نحصل على :



الكود:

TMR0L = 256 –(Time to overflow) / (4 * Clock period * Prescaler)


مثال :
مطلوب توليد تجاوز بالمؤقت بعد 500 ملى ثانية باستخدام المؤقت TIMER 0 . على فرض أن تردد الساعة 8 MHz ، وأن قاسم التردد السابق prescaler بالقيمة (16) ، احسب القيمة التى يتم تحميلها إلى سجل المؤقت .
الحل :
باستخدام الصيغة أعلاه نحصل على :


الكود:


TMR0L = 256 – (Time to overflow) / (4 * Clock period * Prescaler)
TMR0L = 256 – (500) / (4 * 0.125 * 16) = 193.5





أقرب عدد صحيح هو (193) . لذلك سوف يتم تحميل سجلات المؤقت كما يلى :


الكود:


TMR0L = 193 // Timer value
T0CS = 0; // Select internal clock
T0PS2 = 0; // Set prescaler to 16
T0PS1 = 1; // ..
T0PS0 = 1; // ..
PSA = 0; // Select prescaler




المقاطعات Interrupts :

Admin
Admin

عدد المساهمات : 985
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: باختصار وحدات (موديولات) المؤقت Timer Modules والمقاطعات مع الميكروكونترولر PIC18F2550 :

مُساهمة من طرف Admin في السبت مارس 08, 2014 10:36 pm

المقاطعات Interrupts :




• المقاطعة هى "حدث خارجى أو داخلى" والذى يتطلب من وحدة المعالجة المركزية CPU وقف التنفيذ العادى وتشغيل برنامج متعلق بحدث المقاطعة .
• عادة ما يتم توليد "مقاطعات داخلية" عند تجازات المؤقت overflows ، وعند اكتمال التحويل من تناظرى لرقمى A/D ، وعند استقبال حرف عن طريق الاتصال التسلسلى USART ، وهلم جرا .
• وعادة ما يتم توليد "المقاطعات الخارجية" عندما يحدث تغير لحالة أطراف الميكروكونترولر .
• يمكن أن تكون المقاطعات مفيدة فى العديد من التطبيقات مثل :
1- التطبيقات التى تعتمد على الزمن بشكل دقيق . فتطبيقات "الزمن الحقيقى" Real-time تحتاج إلى اهتمام فورى من وحدة المعالجة المركزية . على سبيل المثال ، فى تطبيقات معالجة الإشارة ، فإن وحدة المعالجة المركزية عليها أن تستقبل الإشارات من مصادر خارجية كلما تكون الإشارة متاحة . أيضا ، وللأسباب المتعلقة بالسلامة ، قد يكون هناك حاجة لإيقاف shut down نظام كلما كان هناك انقطاع فى القدرة الكهربائية أو حريق . فى مثل هذه التطبيقات ، مطلوب من وحدة المعالجة المركزية أن توقف كل ما تقوم به وتخدم الجهاز المسبب للمقاطعة .
2- أداء المهام المجدولة . هناك العديد من التطبيقات التى تتطلب قيام وحدة المعالجة المركزية بأداء مهام مجدولة ، مثل تحديث ساعة الزمن الحقيقى . هذه المهام مهمة ويجب أن يتم خدمتها فى الأوقات الدقيقة .
3- تحويل (تبديل) المهمة . فى العديد من التطبيقات "متعددة المهام" ، يكون مطلوب خدمة كل مهمة لفترة معينة من الزمن . عادة ما يتم تحقيق ذلك باستخدام مقاطعات المؤقت حيث فى كل مرة تحدث مقاطعة يتم حفظ المهمة الجارية وبدء مهمة جديدة .
4- منع وحدة المعالجة المركزية CPU من أن تكغون مقيدة (مكتوفة) tied up . فى بعض التطبيقات ، يكون مطلوب من وحدة المعالجة المركزية إجراء الاختبارات المستمرة لأجهزة الدخل / الخرج . أثناء أداء هذه الاختبارات ، لا يمكن لوحدة المعالجة المركزية إجراء واجبات أخرى . عن طريق نقل الاختبارات إلى روتينات المقاطعة ، يمكن أن تتم الاختبارات فى الخلفية وتكون وحدة المعالجة المركزية حرة للقيام بمهام أخرى . على سبيل المثال شاشة سفن سيجمنت متعددة الأرقام تحتاج إلى تحديث مستمر . إذا تم القيام بهذه المهمة فى البرنامج الرئيسى ، عندئذ فإن وحدة المعالجة المركزية لا تستطيع القيام بغيرها من المهام . عن طريق نقل عملية التحديث إلى روتين مقاطعة المؤقت ، تكون وحدة المعالجة المركزية حرة فى أن تقوم بعمل المهام الأخرى .

الميكروكونترولر PIC18F2550 لديه مصادر مقاطعة متعددة ، مثل المقاطعات الخارجية عبر الأطراف
RB0 (INT0), RB1 (INT1), and RB2 (INT2) ، ومقاطعة المنفذ PORT B عند تغير حالة أى طرف من الأطراف من RB4 إلى RB7 ، ومقاطعات المؤقت ، ومقاطعات المحول من تناظرى لرقمى ، ومقاطعات الاتصال USART وهلم جرا .
تنقسم مصادر المقاطعة إلى مصادر "مقاطعة الجوهر أو الأساس" core ، ومصادر "مقاطعة الأجهزة الطرفية" . مصادر مقاطعة الأساس هى المقاطعات الخارجية ومقاطعات المؤقت TMR0 . مصادر مقاطعة الأجهزة الطرفية هى مصادر المقاطعة الخارجية والداخلية الأخرى .
يوجد 10 سجلات تتحكم فى عمليات المقاطعة :

الكود:

• RCON
• INTCON , INTCON2 , INTCON3
• PIR1, PIR2
• PIE1, PIE2
• IPR1, IPR2



• يمكن تقسيم المقاطعات إلى فئتين : الفئة ذات الأولوية العالية والفئة ذات الأولوية المنخفضة . إذا تطلب جهاز معين اهتمام أكبر ، يجب تحديده كجهاز ذات أولوية عالية . أما إذا كانت الأولوية غير مهمة ، فمن المستحسن أن يتم تحديد كافة المقاطعات كأولوية منخفضة .
• يتم تمكين خاصية أولوية المقاطعة عن طريق تحديد (تعيين) البت IPEN بالسجل RCON . إذا كان IPEN=0 ، عندئذ تكون خاصية أولوية المقاطعة غير ممكنة ويتصرف المعالج كما لو أن كل المقاطعات فى نفس الأولوية ( وهذا هو الحال مع عائلة الميكروكونترولر PIC16 ) .
• عندما يتم تمكين أولوية المقاطعة ، تستخدم اثنين من البتات من السجل INTCON لتمكين عموم المقاطعات . البت GIEH تمكن جميع المقاطعات التى تم تحديد بتات الأولوية لها . تحديد البت GIEL تمكن جميع المقاطعات التة تم مسح بتات الأولوية لها .
• المقاطعات ذات الأولوية العالية تتجه vector إلى العنوان (0x0008) ، فى حين أن المقاطعات ذات الأولوية المنخفضة تتجه إلى العنوان (0x0018) .
• مصادر المقاطعة لها ثلاثة بتات للتحكم فى عملها :
1- بت العلم flag bit ، لبيان ما إذا كان قد حدث مقاطعة . هذه البت لها اسم ينتهى بالحروف (…IF) ، على سبيل المثال TMR0IF .
2- بت التمكين Enable bit ، لتمكين أو تعطيل تمكين مصدر المقاطعة . هذه البت لها اسم ينتهى بالحروف (…IE) ، على سبيل المثال TMR0IE .
3- بت الأولوية priority bit ، لاختيار (تحيد) أولوية المقاطعة . هذه البت لها اسم ينتهى بالحروف (…IP) ، على سبيل المثال TMR0IP .
الشكل التالى يبين تعريفات بتات السجل INTCON ، وهو السجل الرئيسى للتحكم فى المقاطعة .




يتم التحكم فى مصادر مقاطعة الأساس core عن طريق السجلات
INTCON, INTCON2 , INTCON3 . الأشكال التالية تبين تعريفات السجلات
INTCON2 , INTCON3 :









المقاطعات مع تعطيل الأولوية :
عندما يتم تعطيل خاصية أولوية المقاطعة ، يجب تحقق الشروط التالية من أجل أن تكون المقاطعة مقبولة بمعرفة المعالج :
1- تعطيل خاصية الأولوية : IPEN=0 .
2- تحديد (تعيين) البت GIE بالسجل INTCON .
3- مسح علم المقاطعة لمصدر المقاطعة .
4- تمكين بت المقاطعة للجهاز المقاطع . إذا كانت المقاطعة من جهاز أساس core ، على سبيل المثال TMR0 ، عندئذ يجب تحديد البت TMR0IE بالسجل INTCON بواحد . وإذا كانت المقاطعة من جهاز طرفى ، على سبيل المثال المحول A/D ، عندئذ يتم تمكين البت PEIE للسجل INTCON بالإضافة إلى تمكين بت مقاطعة الجهاز ADIE لسجل الأجهزة الطرفية PIE المناسب.

المقاطعات مع تمكين الأولوية :
1- تمكين خاصية أولوية المقاطعة : IPEN=1 .
2- تحديد البتات GIEH , GIEL بالسجل INTCON .
3- مسح علم المقاطعة لمصدر المقاطعة .
4- تحديد مستوى الأولوية باستخدام السجل IPR المقابل .
5- تحديد بت تمكين المقاطعة ، باستخدام أى من السجلات INTCON, INTCON2, INTCON3 أو السجلات PIEI .
على سبيل المثال ، فيما يلى الخطوات المطلوبة لتعيين المؤقت TMR0 كمقاطعة ذات أولوية عالية :
1- تمكين خاصية الأولوية IPEN = 1 .
2- تمكين المقاطعات بالمؤقت TMR0 . بتحديد TMR0IE=1 .
3- تمكين المؤقت TMR0 للأولوية العالية . بتحديد TMR0IP=1.
4- مسح علم المقاطعة بالمؤقت TMR0 . بتحديد TMR0IF=0 .
5- تمكين عموم المقاطعات . بتحديد GIEH=1 .

معالجة المقاطعة :
• مترجم الميكروسى برو يدعم المقاطعات فى برامج المستخدم . عند حدوث مقاطعة ، فإن المعالج يتوقف عن كل ما يقوم به ويقفز إلى روتين خدمة المقاطعة ISR .
• سلسلة الميكروكونترولر PIC18F تدعم كل من المقاطعات ذات الأولوية المنخفضة والمقاطعات ذات الأولوية العالية . فى المترجم ميكرو سى برو يتم التعامل مع المقاطعات ذات الأولوية العالية كدوال للمستخدم ، حيث يجب أن تستخدم الكلمة المحجوزة ""interrupt كإسم للدالة . على سبيل المثال روتين خدمة المقاطعة التالى :

الكود:


void interrupt(void)
{
ISR body
}



• يتم إعلان المقاطعات ذات الأولوية المنخفضة باستخدام الكلمة المحجوزة "interrupt_low" كما يلى :

الكود:


void interrupt_low(void)
{
ISR body
}


Admin
Admin

عدد المساهمات : 985
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى