منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

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

اذهب الى الأسفل

باختصار وحدات (موديولات) المؤقت Timer Modules والمقاطعات مع الميكروكونترولر PIC18F2550 : Empty باختصار وحدات (موديولات) المؤقت 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 :

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


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

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


• يمكن اختيار قيمة قاسم التردد السابق 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

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

https://fathallaabdelaziz.forumarabia.com

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

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

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

المقاطعات Interrupts :

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


• المقاطعة هى "حدث خارجى أو داخلى" والذى يتطلب من وحدة المعالجة المركزية 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 ، وهو السجل الرئيسى للتحكم فى المقاطعة .

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


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

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


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




المقاطعات مع تعطيل الأولوية :
عندما يتم تعطيل خاصية أولوية المقاطعة ، يجب تحقق الشروط التالية من أجل أن تكون المقاطعة مقبولة بمعرفة المعالج :
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

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

https://fathallaabdelaziz.forumarabia.com

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

الرجوع الى أعلى الصفحة


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