{jumi [*3]}
تسميات
إنتبه إلى أنه قد اعتمدنا التسميات التالية خلال هذه السلسلة:
تجد جميع مصطلحات مقالات هذه السلسلة في قاموس المصطلحات التابع لها. |
ملفات المقال
يمكنك تحميل ما يلي للاستفاذة أكثر من المقال: |
محاضرة المقال
{jumi [*3]}
الإزاحة (Shifting)
تستخدم تعليمات الإزاحة والدوران بهدف إزاحة زوج واحد أو أكثر - من ثمن أو أكثر – إلى اليمين أو إلى اليسار؛ وهناك فرق بين عملية الإزاحة وعملية الدوران لقيمة ما حيث:
مثال: A = &B11011011 Shift A ,Right, 1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
Shift A ,Right, 4 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
التدوير (Rotating)
مثال: A = &B11011011 Rotate A ,Right, 1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
Rotate A ,Right, 4 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
تعليمات الإزاحة والتدوير في Bascom
شرح التعليمة |
التعليمة البرمجية |
إزاحة زوج من متغير (var) إلى اليمين أو اليسار وعدد خانات الإزاحة محددة بـ [, shift] |
Shift var ,Right/Left [, shift] |
تدوير زوج من متغير (var) إلى اليمين أو اليسار وعدد خانات الدوران محددة بـ [, shift] |
Rotate var ,Right/Left [, rotate] |
التجربة الحادية عشرة
استخدم المفاتيح اللحظية S1-S2 (PIND.3, PIND.2)iعلى اللوحة التعليمية لإزاحة وتدوير قيمة تظهر على الصمامات الضوئية الثمانية (LEDs) الموصولة بالبوابة PORTC. |
الشكل 1: توصيل الثنائيات والمفاتيح مع المتحكم للتجربة 11 |
البرنامج Exp.11.bas في بيئة BASCOM-AVR: ' ****************************************************************************** |
القواطع في متحكمات AVR
تعرف القاطعة (Interrupt) بأنها آلية إعلام داخلية (دون تدخل المتحكم في آلية عمل القاطعة داخلياً) تعلم وحدة المعالجة المركزية بوجود حدث يجب معالجته مما يسبب تغير في سير البرنامج الرئيسي لإنجاز برنامج فرعي يسمى برنامج خدمة القاطعة. لتوضيح الفكرة نأخذ على سبيل المثال برنامج قراءة حالة مفتاح موصول إلى قطب المتحكم، وبالتالي يوجد لحالتين لبرمجة عمل المفتاح:
|
الشكل 2: تمثيل عملية القاطعة والقفز من البرنامج الرئيسي إلى برنامج القاطعة والعودة إلى البرنامج الرئيسي |
مصادر القواطع في متحكمات AVR
تمتلك العائلة AVR مجموعة كبيرة من مصادر القاطعة المختلفة، وتمتلك كل من هذه القواطع عنوان مستقل في حيز ذاكرة البرنامج، ولكل قاطعة خانة تمكين مستقلة، فعندما نرغب بتفعيل إحدى القواطع فإنه يتوجب علينا تفعيل الخانة المخصصة لها في مسجل التحكم بالقاطعة المعنية إلى جانب تفعيل خانة تمكين القاطعة العامة Iفي مسجل الحالة SREG. |
|
الشكل 3: الخانة 7 شعاع القواطع العام (Global Interrupt Vector) في مسجل الحالة SREG |
|
يمكن تمثيل شعاع القواطع العام (Global Interrupt Vector) بقاطع رئيسي، وباقي القواطع كقواطع فرعية، وبالتالي لا يكفي تفعيل القاطعة الفرعية وإنما يجب أيضاً تفعيل شعاع القواطع العام معها كما هو مبين على الشكل التالي. |
|
الشكل 4: تمثيل لحالة شعاع القواطع العام (Global Interrupt Vector) والقواطع الفرعية الأخرى |
تصنيف القواطع في متحكمات AVR
يمكن تقسيم القواطع في العائلة AVR إلى مجموعتين رئيسيتين، تضم كل مجموعة من المجموعتين مجموعات فرعية أخرى:
|
مبدأ عمل القواطع في متحكمات AVR
تتمتع وحدة القواطع بمسجلات تحكم خاصة في المساحة المخصصة للدخل/الخرج بالإضافة إلى خانة تفعيل خاصة (I) ضمن مسجل الحالة، وتتمتع كل قاطعة بشعاع قاطعة منفصل في جدول أشعة القواطع، ويكون لكل قاطعة أولوية متناسبة مع موقع شعاعها ضمن الجدول، فكلما كان عنوان شعاع القاطعة أدنى كلما كانت ذات أولوية أعلى. |
الشكل 5: عناوين أشعة القواطع في المتحكم ATmega32A |
الشكل 5 يبين القائمة الكاملة للقواطع في المتحكم ATmega32Aوعناوين الأشعة لهذه القواطع، كما تحدد هذه القائمة أيضاً مستويات الأولوية للقواطع، فالعنوان الأخفض ($000) هو الشعاع ذو الأولوية الأعلى، فلقاطعة التصفير مثلاً الأولوية الأعلى ومن ثم القاطعة الخارجية INT0وهكذا...
عندما تحدث قاطعة ما فإنه يتم تلقائياً تصفير خانة تمكين القاطعة العامة (I = 0)، وبالتالي تحجب جميع القواطع الأخرى إلى حين الانتهاء من القاطعة الحالية، إلا أن المبرمج يستطيع أن يُفعّل خانة تمكين القاطعة العامة (I = 1) داخل برنامج خدمة القاطعة في حال أريد الإبقاء على القواطع الأخرى. وعندما ينفذ المتحكم تعليمة العودة RETURN الواقعة في نهاية برنامج خدمة القاطعة، فإنه يتم تلقائياً تفعيل خانة تمكين القاطعة العامة (I = 1). |
ملاحظات هامة حول القواطع في متحكمات AVR
|
زمن استجابة القاطعة
إن الاستجابة الزمنية عند تنفيذ القواطع بالنسبة لمتحكمات عائلة AVR هي على الأقل أربع دورات ساعة (4-Cycle) يتم خلالها دفع (Push) محتوى عداد البرنامجPC (Program Counter)i إلى المكدس SP ويستهلك الدفع 2-Cycle، ومن ثم يقفز البرنامج إلى برنامج خدمة القاطعة ويستهلك القفز 2-Cycle. وإذا حدثت القاطعة أثناء تنفيذ إحدى التعليمات التي زمن تنفيذها أكبر من دورة واحدة، فإنه يتم استكمال تنفيذ التعليمة قبل الانتقال إلى برنامج خدمة القاطعة. إن العودة من برنامج خدمة القاطعة تستهلك أربع دورات ساعة (4-Cycle) أيضاً يتم خلالها سحب (Pull) قيمة عداد البرنامجPC من المكدس SP ويستهلك السحب 2-Cycle، ومن ثم يقفز إلى البرنامج الرئيسي ويستهلك القفز 2-Cycle، وينفذ ابتداءً من التعليمة التالية للتعليمة التي حدثت عندها القاطعة. |
القواطع الخارجية في متحكمات AVR
تمتلك متحكمات العائلة AVR أقطاب مخصصة للقواطع الخارجية والتي يرمز لها INT0 و INT1 و… و INT7. الهدف من هذه القواطع الخارجية هو الاستجابة لأحداث معينة تطبق على أقطاب هذه القواطع. تملك هذه القواطع الخارجية أنماط استجابة متعدة للجبهات المطبقة عليها وكذلك يمكن تفعيلها أو إلغاء تفعيلها من خلال مجموعة من مسجلات التحكم الخاصة بهذه القواطع. |
مسجلات التحكم بالقواطع الخارجية في متحكمات AVR
تملك القواطع الخارجية ثلاث مسجلات تحكم وهي:
|
الشكل 6: مسجل التحكم بنمط عمل القاطعة الخارجية MCUR للقواطع [INT0/INT1] |
على اعتبار وجود أربعة حالات لنمط عمل كل قاطعة من القواطع الخارجية فإن هذا سيحتاج إلى خانتين في مسجل التحكم بنمط عمل القاطعة الخارجية لكل قاطعة حيث: تمثل الخانتين ISC00 وISC01 خانتي التحكم بنمط عمل القاطعة الخارجية INT0، وتمثل الخانتين ISC10 وISC11 خانتي التحكم بنمط عمل القاطعة الخارجية INT1، وهكذا باقي القواطع الأخرى... |
الشكل 7: اختيار حالات نمط استجابة القاطعة للحدث للقاطعة INT1 |
|
الشكل 8: مسجل التحكم القواطع الخارجية GICR |
|
الشكل 9: مسجل أعلام القواطع الخارجية GIFR |
برمجة القواطع الخارجية في BASCOM-AVR
بشكل عام فإنه من أجل برمجة القواطع الخارجية فإنه يجب:
ConfigINTx= State
OnINTxLabel
EnableINTx
EnableInterrupts ملاحظة 1: يمكن أثناء عمل البرنامج إلغاء تفعيل أي من القواطع الخارجية من خلال التعليمة: DisableINTx ملاحظة 2: يمكن أثناء عمل البرنامج إلغاء تفعيل شعاع القواطع العام من خلال التعليمة: DisableInterrupts ملاحظة 3: التعليمة Print تستخدم لطباعة البيانات على النافذة التسلسلية UART في حال الوصل مع الحاسب. |
التجربة الثانية عشرة
المطلوب تعديل التجربة الثامنة لتعمل المفاتيح اللحظية الثلاث (S1 و S2 و S3) الموصولة إلى أقطاب القواطع الخارجية INT2 و INT1 و INT0، على تغيير حالة عمل (Toggle) الثنائي D1 عن الضغط على المفتاح S1، وتغيير حالة D2 عند الضغط على S2، وتغيير حالة D3 عند الضغط على S3 – باستخدام القواطع الخارجية بدلاً من الفحص الدوري لحالة المفاتيح. |
الشكل 10: توصيل المفاتيح اللحظية الثنائيات مع المتحكم ATmega32A على اللوحة Mini-Phoenix للتجربة 12 |
البرنامج Exp.12.bas في بيئة BASCOM-AVR: ' ****************************************************************************** ConfigInt0= Falling :OnInt0 Sw_r1 :EnableInt0:Portd.2 = 1 'PU Resistor |
توصيل وبرمجة لوحة مفاتيح مصفوفية مع متحكم AVR
من أجل ربط عدد كبير من المفاتيح اللحظية مع متحكم مصغر فإنه ليس من المجدي ربط كل مفتاح إلى قطب كما مر معنا في التجارب السابقة لأن عدد الأقطاب المستهلكة من المتحكم ستساوي عدد المفاتيح التي تم ربطها مع تلك الأقطاب. لذلك يتم ربط المفاتيح مع بعضها بطريقة مصفوفية – أي يتم توصيل النقطة الأولى للمفاتيح المتوضعة على سطر واحد مع بعضها لتشكل قطب واحد يمثل السطر، كذلك يتم توصيل النقطة الثانية للمفاتيح المتوضعة على عمود واحد مع بعضها لتشكل قطب واحد يمثل العمود... وهكذا كما هو مبين على الشكل 11. |
|||
الشكل 11: لوحة المفاتيح المصفوفية (Matrix-Keypad) المؤلفة من 16-key |
|||
تستخدم لوحة المفاتيح المصفوفية بشكل أساسي في الهواتف، ويمكن أن تكون مؤلفة من 9 مفاتيح (3×3) أو 16 مفتاح (4×4) أو أكثر... يتم توصيل لوحة المفاتيح مع أقطاب المتحكم المصغر مباشرة، ومنهجية مسح اللوحة لمعرفة المفتاح المضغوط تتم على الشكل التالي:
|
|||
الشكل 12: توصيل مجموعة المفاتيح مع المتحكم المصغر وحالة المسح |
|||
من أجل قراءة لوحة مفاتيح ست عشرية في البيئة BASCOM-AVR فإننا نحتاج إلى تعليميتين أساسيتين:
Config Kbd =Portb,Debounce= 100 ,Delay= 100
Var =Getkbd() الدالة “Getkbd” ستعود بقيمة عددية تتراوح بين 0 و16 تمثل المفتاح المضغوط. حيث يعود هذا الدالة بالقيمة Var = 16 إذا لم يكن هناك أي مفتاح مضغوط. وأما إذا كان هناك مفتاح مضغوط فسيعود بقيمة المفتاح المضغوط كما يلي: |
|||
Var(S1) = 0
|
|
||
الشكل 13 توصيل مجموعة المفاتيح مع المتحكم المصغر والقيم التي يعود بها الدالة “Getkbd” |
التجربة الثالثة عشرة
المطلوب كتابة برنامج لقراءة حالة لوحة مفاتيح موصلة بشكل مصفوفي إلى البوابة PORTB لمعرفة المفتاح المضغوط وطباعة اسم المفتاح المضغوط على النافذة التسلسلية UART كما هو مبين على الشكل 14 – ثم يطلب تطبيقها على اللوحة التعليمية مباشرة. |
الشكل 14: توصيل مجموعة من المفاتيح مع المتحكم Atmega32A |
البرنامج Exp.13.bas في بيئة BASCOM-AVR: ' ****************************************************************************** |
الحقوق الفكرية
حقوق النشر محفوطة م.وليد بليد Copyright © 2012 Walid Balid All rights reserved |
تأليف
المؤلف: وليد بليد (سوريا)
{jumi [*3]}
{jumi [*3]}
{jumi [*3]}
التعليقات
ولكن الأكثر من ذلك هو نفسك الخالية من الأنانية وهذا نجاح بحد ذاته
فهنيئا لك لكل جهدك