المعالجات والمتحكمات المصغرة الجزء الرابع (58-77)


0058

0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077

نمط التقاط الدخل على المؤقت 1
 يجب مراعاة التالي عند قياس دورة الوقت ب T/C0
. 1 بدء المؤقت عند بداية الحدث،
. 2 إيقاف المؤقت عند نهاية الحدث، و
. 3 في النهاية قراءة زمن الحدث
 استخدام ال T/C1 الذي يكون في حالة عمل دائم.
. 1 يتم التقاط الزمن في T1 عند بداية الحدث
. 2 ويتم أيضا التقاطه عند نهاية الحدث، و
. 3 ثم نطرح الزمنين من بعضهما لإيجاد الزمن الذي مر حتى ظهور
الحدث.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
58
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مسجل التقاط الدخل 1 ( ICR1 )
 وهو مسجل من 16 بت ) ICR1H+ICR1L )
• يلتقط قراءة للمؤقت 1 عندما يتلقى المعالج الصغري جبهة صاعدة أو
هابطة على القطب ICP .
• يسمح ضبط/محي البت ICES1 بالتقاط الزمن عند الجبهة
الصاعدة/الهابطة.
• يجب قراءة المحتويات الملتقطة بعد التقاطها مباشرة، وذلك لمنع كتابة
معلومات جديدة عليها.
• تحدث مقاطعة في كل مرة يتم فيها التقاط معلومات جديدة في ICR1 .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
59
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مسجل التقاط الدخل 1 ( ICR1 )
 في كل مرة تحدث فيها مقاطعة الالتقاط،
• يجب أن يحدد البرنامج فيما إذا كانت إشارة المقاطعة هي بداية أو نهاية الحدث.
T/C1 مزود بدارة إلغاء ضجيج، وذلك لمنع
• حدوث قراءات عند أزمنة مغلوطة بسبب ورود شوكات غير مرغوب بها
على ICP .
• يجب أن يبقى ICP عند المرحلة الفعالة لمدة أربع عينات متتالية، وذلك قبل
أن يعتبر المعالج الصغري وجود حالة تنشيط فعالة ويلتقط البيانات.
• البت الخاص بإلغاء الضجيج عند عملية الالتقاط هو ) ICNC1 .)
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
60
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
61 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
مثال: قياس دور إشارة مربعة مطبقة
على ICP خلال ميللي ثوان
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
حساب العملية
.ISR1 الخاص بطفحان T/C1 يزيد عداد الطفحان كلما حدث الطفحان خلال
فترة القياس.
. 2 يستخدم عدد مرات الطفحان في حساب الدور.
. 3 ومن ثم يمكن حساب عدد نبضات الساعة التي حدثت خلال عملية القياس
كما يلي
عدد نبضات الساعة = ) unsignedlong ( جبهة النهاية + )) unsignedlong ( عداد الطفحان * 65536 ( – ) unsignedlong ( جبهة البداية ;
. 4 يتم إعطاء نبضات ساعة للمؤقت بنسبة تقسيم على 8 ( 6 ميغاهرتز/ 8 =
750 كيلوهرتز(،
• يتم حصول 750 عدة في كل 1 ميللي ثانية.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
62
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
برنامج قياس الدور
#include <mega16.h>
/* ليكون خرجا لعرض النبضة » سي « تعريف المنفذ
*/
#define period_outPORTC
unsigned char ov_counter; /* عداد طفحان
المؤقت 1*/
unsigned intstarting_edge, ending_edge; /* مساحة تخزين للأزمنة */
unsigned intclocks; /* مساحة تخزين للعدد
الحقيقي لنبضات الساعة خلال النبضة */
/* مسجل حالة المقاطعة لطفحان المؤقت 1*/
interrupt [TIM_OVF] void timer1_ovf_isr (void)
{
++ov_counter; /* زيادة العداد عند
حصول طفحان */
}
/* مسجل حالة المقاطعة لالتقاط الدخل في المؤقت 1*/
interrupt [TIM_CAPT] void timer1_capt_isr(void)
{
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
63
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
برنامج قياس الدور
/* جمع مسجل الالتقاط بطول 8 بت في عدد مؤلف من 16 بت */
ending_edge= 256 * ICR1H + ICR1L; /* أخذ زمن النهاية للدور */
clocks = (unsigned long) ending_edge
+ ((unsigned long) ov_counter* 65536)
-(unsigned long) starting_edge;
period_out=~ (clocks/750); /* » سي « إخراج عدد الميللي ثوان على المنفذ */
/* محي قيمة عداد الطفحان من أجل عملية القياس هذه */
ov_counter= 0;
/* حفظ زمن النهاية من أجل استخدامه كجبهة البداية */
starting_edge= ending_edge;}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
64
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
برنامج قياس الدور
void main (void)
{
DDRC=0xFF; /* » سي « تحديد المنفذ
ليكون خرج */
TCCR1A = 0; /* تعطيل كل خواص
شكل الموجة */
TCCR1B = 0xC2; /* تقسيم دخل
المؤقت 1 إلى تردد الساعة/ 8 ، وتفعيل
خاصية التقاط الدخل */
TIMSK = 0x24; /* كشف الغطاء عن
مقاطعتي الطفحان والالتقاط للمؤقت 1*/
#asm(“sei”) /* بت تفعيل المقاطعات
بشكل عام */
while (1)
{
; /*لا تفعل شيئا هنا */
}
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
65
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
نمط مقارنة الخرج في المؤقت 1 ( OC )
 مقارنة الخرج ) « يتم استخدام OC لإنتاج إشارات على الخرج. »)
• قد تكون إشارات مربعة أو غير متناظرة، و
– متغيرة من حيث التردد أو متماثلة.
. 1 يقوم البرنامج بتحميل قيمة مسجل مقارن الخرج.
. 2 تتم مقارنة OCR مع القيمة في مسجل العداد/مؤقت، وتحدث المقاطعة عند
تطابق القيمتين.
• تؤدي المقاطعة إلى أن ينفذ المعالج توابع متعلقة بالإشارة التي ينتجها، عند
الحاجة.
• يمكن أيضا ل OC أن يحدد، أو يمحي، أو يشغل قطبا محددا.
• يتم التحكم بأنماط OC عن طريق TCCR1A .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
66
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تعريف بتات TCCR1A للعمل في نمط مقارنة الخرج
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
67
COM1A0 و COM1A1 يتحكمان بخاصية نمط المقارنة من أجل مقاومة المقارنة A
COM1B0 و COM1B1 يتحكمان بخاصية نمط المقارنة من أجل مقاومة المقارنة B
COM1x0
COM1x1
الخاصية ) x هي إما A أو B ، بحسب ما يكون مناسبا(
0
0
لا يوجد خرج
1
0
حصول تطابق يؤدي إلى تشغيل الخط OC1x
0
1
حصول تطابق يؤدي إلى تحديد قيمة الخط OC1x ب 0
1
1
حصول تطابق يؤدي إلى تحديد قيمة الخط OC1x ب 1
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
نمط مقارنة الخرج ) OC ( للمؤقت 1
 تقوم بتات التحكم بنمط مقارنة الخرج بتقرير الإجراءات التي
يجب تنفيذها عند حصول تطابق بين مسجلي ال OC وال T/C .
. 1 يمكن تنفيذ عدة عمليات على قطب الخرج حيث أنه قد لا
يتأثر، أو يغير قيمته، أو يفعل، أو يمحى.
. 2 عندما تحدث المقاطعة يجب على ISR أن يعيد ضبط مسجل
المقارنة أو يعيد تحميله، وذلك من أجل عملية المقارنة التالية
التي يجب أن تحصل.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
68
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 1 : إنتاج موجة مربعة بتردد 7.5 كيلوهرتز
. 1 عندما تحدث أول حالة تطابق، يتم تغيير قيمة بت الخرج، وتحدث المقاطعة.
. 2 في ISR ، يتم حساب متى ستحصل المقاطعة التالية وتحميل ذلك الرقم في
مسجل المقارنة.
• إن دور إشارة بتردد 7.5 كيلوهرتز هو 133.3 ميكروثانية. 66.7 ميكروثانية
لكل نصف من الموجة.
• الوقت اللازم من أول حالة تحويل إلى التالية هو 66.7 ميكروثانية.
• باستخدام تردد الساعة المطبقة على العداد،
• يقوم البرنامج بحساب عدد نبضات الساعة التي ستحدث خلال 66.7 ميكروثانية.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
69
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 1 : إنتاج موجة مربعة بتردد 7.5 كيلوهرتز
. 3 يتم إضافة هذا العدد من نبضات الساعة إلى المحتوى
الموجود مسبقا في مسجل المقارنة
• ويعاد تحميله في مسجل المقارنة ليسبب حدوث التغيير التالي
وليعيد الحساب والدورة.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
70
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 1 : حساب الرقم المضاف إلى OCR لتحديد متى
ستتغير الحالة.
 طول النصف الأول من الموجة هو 66.7 ميكروثانية.
T0_clock= 750 kHz (6MHz/8) ،
 دور نبضة الساعة = 1/750 كيلوهرتز = 1.33 ميكروثانية
 الفترة الزمنية بين نقطتي تغيير حالة / دور نبضة الساعة = رقم
الفاصل
 في هذا المثال: 66.7 ميكروثانية / 1.33 ميكروثانية = 50
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
71
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 1 : العتاد اللازم لتوليد موجة بتردد 7.5
كيلوهرتز، وشكل الموجة الناتج
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
72
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الحالة التي يؤدي إضافة رقم الفاصل إلى OCR فيها
إلى ظهور رقم أطول من 16 بت.
 إذا احتوت OCR على الرقم 65000 و
 الفاصل هو 1000 ، عندها سيكون
65000 + 1000 = 66000 >( 65535 )
 بما أننا نستخدم متحولات من النوع unsignedinteger ،
سيؤدي ذلك إلى إهمال البتات الأكبر من 16
 وبالنتيجة سيكون 65000 + 1000 = 464 )يُترك البت ال 17
من العدد 66000 ليبقى 464 .)
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
73
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
وهذه النتيجة هي المطلوبة تماما!!!
 بما أن OCR و T/C هما مسجلان بطول 16 بت.
 يعد T/C من 65000 حتى 65536 ( 536 عدة( ومن ثم
464 عدة للوصول إلى نقطة التطابق.
•536 + 464 = 1000 عدة، وهي القيمة المطلوبة تماما.
• يقوم كل من T/C و OCR بالعودة إلى البداية عند النقطة ذاتها،
وهذه العودة ليست بمشكلة.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
74
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 1 ( : ISR لل OCA في المؤقت 1 )
#include <mega16.h>
/* في المؤقت » اي « روتين خدمة المقاطعة لمقارن الخرج 1*/
{
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
*/ OC1A هو OCR1AH و OCR1AL لكن برنامج CVAVR يقدم مسجلا وهميا
OCR1A قيمته من النوع integer وهي جمع لكل من المسجلين بطول 8 بت */
OCR1A = OCR1A + 50;
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
75
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 1 : )البرنامج الرئيسي(
void main (void)
{
DDRD=0x20; /* او سي « تحديد قيمة 1
ليكون خرج » اي */
TCCR1B = 0x02; /* تحديد عامل تقسيم
على 8*/
/* تفعيل نمط مقارنة الخرج من أجل تغيير
او سي « حالة القطب 1 عند حدوث » اي
تطابق */
TCCR1A = 0x40;
/* كشف القناع عن مقاطعة حدوث تطابق
» اي « على الخرج، وذلك للمسجل */
TIMSK = 0x10;
#asm(“sei”) /* تفعيل المقاطعات بشكل
عام */
while (1)
{
; /* لا تفعل شيئا هنا */
}
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
76
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تفسير البرنامج
 يتم في بداية ال main() إجراء التعريفات.
 يتم تحديد قيمة DDRD لتكون 0x20 بحيث يتم تحديد البت OC ،
OC1A ، في OCR1A ليعمل بنمط الخرج.
TCCR1B و TCCR1A
 تحديد عامل التقسيم على 8 ( 6 ميغاهرتز/ 8 = 750 كيلوهرتز( و
 تحديد OC بحيث يؤدي إلى تغيير قيمة OC1A عند حدوث تطابق.
 يتم الكشف عن مقاطعة OC عن طريق تحديد قيمة البت
OCIE1A في المسجل TIMSK .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
77
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com

أضف تعليق