تكملة المعالجات والمتحكمات المصغرة الجزء الثالث (01-19)
عملية بدء ال ADC
عادة يتم بدء عمل ال ADC كما يلي:
1 . تحديد قيمة ADPS[2:0] في ADCSR من أجل عامل التقسيم.
=[/(∗]
حيث أن TAD=13Clock . و تردد الساعة يكون بين 50 – 200 كيلو
هرتز.
2 . تحديد قيمة مرتفعة ل ADIE من أجل تفعيل نمط المقاطعة.
3 . تحديد قيمة مرتفعة ل ADEN من أجل تفعيل ال ADC .
4 . تحديد قيمة ل ADSC من أجل بدء عملية التحويل مباشرة.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
20
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 1 : البدء اليدوي ل ADC
اختيار القناة رقم 0 من أجل التحويل.
يتم تحديد التحجيم بشكل مسبق على 8 )تردد نبضات الساعة 10
ميغا هرتز(.
الدخول في حلقة انتظار من أجل بت ADIF ليأخذ قيمة 1 ، مما يدل
على انتهاء التحويل.
ثم يتم إعادة ضبط ADIF عن طريق كتابة 1 منطقي.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
21
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 1 : البرنامج الفرعي InitADC()
// InitADC : يقوم ببدء التحويل التشابهي
الرقمي
void InitADC( void)
{
ADMUX = 0; // تحديد القناة 0
ADCSRA = 0xC3; // تشغيل المحول
التشابهي الرقمي وبدء أول تحويل، وتحديد
قيمة التحجيم إلى 8 ،
// هذه الخطوات مهمة جدا من أجل النتائج
الصحيحة للمحول التشابهي الرقمي
while (!(ADCSRA & 0x10)); // تحقق
إذا كان التحويل جاهزا
ADCSRA |= 0x10; // إعادة ضبط علم
جاهزية التحويل
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
22
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 1 : القراءة اليدوية لل ADC
ReadADC(unsignedchar)
قراءة الكمون التشابهي من القناة المحددة.
يتم إعطاء النتيجة على أنها معدلة من اليسار، 10 بت ثنائي.
يتم تحديد المقسم إلى 8 من أجل إبطاء عمل الساعة.
بعد انتهاء عملية التحويل التشابهي الرقمي، ستخزن نتائج ADCL و ADCH
على شكل 16 بت، ويتم إعادة قيمتها عند استدعاء التابع.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
23
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 1 : البرنامج الفرعي ReadADC()
unsigned intReadADC(unsigned char channel) {
unsigned intbinary_weighted_voltage, binary_weighted_voltage_low;
unsigned intbinary_weighted_voltage_high; // كمون ثنائي محمّل
ADMUX = channel; // تحديد القناة
ADCSRA |= 0x43; // بدء التحويل، التقسيم محدد على
8 من أجل نتائج دقيقة
while (!(ADCSRA & 0x10)); // تحقق من جاهزية
التحويل
ADCSRA |= 0x10; // مسح علم جاهزية التحويل
binary_weighted_voltage_low= ADCL; //
قراءة البتات الثمانية الأقل أهمية أولا
// قراءة بتين مرتفعين، والضرب ب 256
binary_weighted_voltage_high= ((unsigned int)(ADCH << 8));
binary_weighted_voltage=
binary_weighted_voltage_low| binary_ weighted_ voltage_high;
return binary_weighted_voltage; //ADCH:ADCL }
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
24
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
استخدام نمط العمل الحر لل ADC
أكثر الحالات التي تستخدم نمط العمل الحر، تكون في مسجلات درجة
الحرارة.
يتم الاحتفاظ بالحرارة بقيمتها المحدثة، وبأسرع زمن ممكن. بحيث يتم
تسجيل أحدث قيمة عندما يتم تخزين معلومات الحرارة في كل فاصل زمني
قدره ثانية واحدة.
في نمط العمل الحر، تحدث مقاطعة ADC في نهاية كل تحويل و
يمكن استخدامها في تحديث الحرارة الحالية.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
25
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الخطوات المطلوبة عند استخدام نمط العمل الحر
عند قراءة خرج المحول التشابهي الرقمي في نمط العمل الحر، من
الضروري:
1 . إيقاف عمل المقاطعات، أو إيقاف تحويلات العمل الحر.
2 . قراءة النتيجة، ثم
3 . إعادة تفعيل المقاطعات و نمط العمل الحر.
هذه الخطوات ضرورية من أجل التأكد من قراءة البيانات بشكل دقيق، حيث
أن البرنامج لن يقوم بقراءة بيانات عندما يقوم المعالج الصغري بتحديث قيم
مسجلات نتائج ال ADC .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
26
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 2 : بدء ال ADC
voidInitADC(void)
{
ADMUX=0x3;// كجهد مرجعي للدخل » ايي ريف « تحديد القناة الثالثة و
ADCSRA=0xC9;// تشغيل المحول التشابهي الرقمي، بدء التحويل، تقسيم الساعة
على 64
{
ال ISR الخاصبال ADC يقوم بقراءة قيمة التحويل الحالية وتحويلها إلى حرارة.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
27
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 2 : ADC ISR باستخدام المترجم Image Craft Creation .
/* ADC interrupt service routine (روتين خدمة المقاطعة )*/
#pragma interrupt_handleradc_handler: iv_ADC// رقم شعاع
المقاطعات، يتم تحديد الأسماء في الترويسة
unsigned intADC_DATA;
Void adc_handler() {
unsigned intADC_low, ADC_high;
ADC_low= ADCL;
ADC_high= ((unsigned int)(ADCH << 8));
ADC_DATA =ADC_low| ADC_high;
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
28
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال 2 : ADC ISR باستخدام المترجم CodeVision .
/* ADC interrupt service routine (روتين خدمة المقاطعات )*/
interrupt [ADC_INT] void adc_isr(void)
{
unsigned intADC_DATA;
ADC_DATA = ADCW;
/*get data from ADC result register (إحضار البيانات من مسجل النتيجة )*/
current_temp=
((long)5*(long)ADC_DATA)/ (long) 1023 +(long)100; /* يقوم القانون بحساب
مستوى التكميم الذي توجد فيه الإشارة )أي
5 *بيانات المحول التشابهي الرقمي/ 1023 ( ثم
يقوم بإضافة إزاحة قدرها 100 ، وهي إزاحة
لتحديد بداية المجال عند 100 درجة مئوية */
ADCSRA=0x40|ADSRA; // ابدأ التحويل
التالي
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
29
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
نظام اكتشاف النهاية، بالاعتماد على كمون دخل
تشابهي للقناة 3 لل ADC .
يضيء ليد أحمر، إذا تجاوز الدخل قيمة 3 فولت،
يضيء ليد أصفر، إذا كان الدخل أقل من 2 فولت،
يضيء ليد أخضر إذا كان مجال الكمون بين 2 فولت و 3 فولت.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
30
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
القطع المستخدمة في
نظام اكتشاف النهاية
31
ترجمة وتنسيق: رامي قباني.
إلقاء الدكتور: عبد الغني البكار.
برنامج نظام اكتشاف النهاية
#include <mega16.h>
/* تحديد منفذ الخرج وأنماط الأضواء */
#define LEDs PORTC
#define red 0b11011111
#define green 0b01111111
#define yellow 0b10111111
/* بقراءة » اي اس ار « يقوم مسجل خدمة المقاطعة
المحول التشابهي الرقمي، ويحدد قيمة الأضواء */
Interrupt [ADC_INT] void adc_isr(void)
{
unsigned intadc_data; /* متحول من
أجل قيم المحول */
adc_data= ADCW; /* قراءة جميع
البتات العشرة إلى المتحول */
if (adc_data> (3*1023)/5)
LEDs = red; /* كبيير جدا )أكبر
من 3 فولت( */
else if (adc_data< (2*1023)/5)
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
32
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
برنامج نظام اكتشاف النهاية
LEDs = yellow; /* صغير جدا )أصغر من
2 فولت( */
else
LEDs = green; /* يجب أن تكون فقط
صحيحة */
}
Void main (void)
{
DDRC = 0xe0; /* الخانات الثلاثة الأكثر
أهمية من أجل الخرج */
ADMUX = 0x3; /* تحديد القراءة على 1
القناة 3*/
ADCSRA = 0xCE; /* تشغيل المحول
التشابهي الرقمي، تقسيم على 64 ، لا قناع للمقاطعات،
وتحديد حالة البدء */
#asm(“sei”) /* تفعيل بت المقاطعات العامة */
while (1)
}; /* لا تفعل شيئا سوى انتظار مقاطعة المحول
التشابهي الرقمي */
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
33
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مبادئ طرفية المقارن التشابهي
تقارن بين AIN0 الدخل التشابهي الموجب، و AIN1 الدخل التشابهي
السالب.
إذا كانت AIN0>AIN1 ، إذا أعط قيمة على الخرج ) ACO .)
إذا تغيرت حالة ACO بالاتجاه الموجب أو السالب أو كليهما، يؤدي ذلك إلى
حدوث مقاطعة:
إذا كانت مقاطعة المقارن التشابهي لا يوجد عليها قناع.
وإلا فإنه يمكن جعل تغير الحالة يسبب التقاط الدخل على T/C1 .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
34
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المخطط الصندوقي للمقارن التشابهي
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
35
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مسجلات التحكم والحالة للمقارن التشابهي ) ACSR )
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
36
البت
الوصف
ACD
بت إيقاف المقارن التشابهي. يأخذ قيمته من أجل إيقاف المقارن التشابهي.
ACBG
تحديد عرض حزمة المقارن التشابهي
ACO
بت الخرج للمقارن التشابهي
ACI
علم المقاطعة للمقارن التشابهي
ACIE
بت القناع الخاص بمقاطعات المقارن التشابهي
ACIC
بت التقاط الدخل للمقارن التشابهي. يأخذ قيمته لتفعيل التقاط الدخل عند تغيير حالة المقارن.
ACIS1
بتات تحديد الحالة للمحول والمقارن التشابهي )انظر التعريفات أدناه(
ACIS2
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
بتات تحديد حالة المقاطعة للمقارن التشابهي
ACIS0
ACIS1
حالة المقاطعة
0
0
تفعيل المقاطعة عند تغير ACO
1
0
محجوز – لا تقم باستخدامه
0
1
تفعيل المقاطعة عند مرور جبهة هابطة على ACO ( . AIN1 يصبح أكبر من AIN0 ).
1
1
تفعيل المقاطعة عند مرور جبهة صاعدة على ACO ( AIN0 يصبح أكبر من AIN1 ).
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
37
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com