- ما هو ADC (التحويل التناظري إلى الرقمي)
- ADC في متحكم AVR Atmega16
- المكونات مطلوبة
- مخطط الرسم البياني
- إعداد سجلات التحكم ADC في Atmega16
- برمجة Atmega16 لـ ADC
إحدى الميزات الشائعة المستخدمة في كل تطبيق مضمن تقريبًا هي وحدة ADC (المحول التناظري إلى الرقمي). يمكن لهذه المحولات التناظرية إلى الرقمية قراءة الجهد من المستشعرات التناظرية مثل مستشعر درجة الحرارة ومستشعر الإمالة ومستشعر التيار ومستشعر فليكس وما إلى ذلك في هذا البرنامج التعليمي سوف نتعلم ما هو ADC وكيفية استخدام ADC في Atmega16. يتضمن هذا البرنامج التعليمي توصيل مقياس جهد صغير بدبوس ADC الخاص بـ Atmega16 ويتم استخدام 8 مصابيح LED لعرض الجهد المتغير لقيمة خرج ADC فيما يتعلق بالتغيير في قيمة إدخال ADC.
شرحنا سابقًا ADC في ميكروكنترولر أخرى:
- كيفية استخدام ADC في ARM7 LPC2148 - قياس الجهد التناظري
- كيفية استخدام ADC في STM32F103C8 - قياس الجهد التناظري
- كيفية استخدام ADC في MSP430G2 - قياس الجهد التناظري
- كيفية استخدام ADC في Arduino Uno؟
- استخدام وحدة ADC لوحدة التحكم الدقيقة PIC مع MPLAB و XC8
ما هو ADC (التحويل التناظري إلى الرقمي)
ADC لتقف على المحول التناظري الرقمي. في الإلكترونيات ، ADC هو جهاز يحول الإشارة التناظرية مثل التيار والجهد إلى رمز رقمي (شكل ثنائي). في العالم الحقيقي ، تكون معظم الإشارات تمثيلية وأي متحكم أو معالج دقيق يفهم اللغة الثنائية أو الرقمية (0 أو 1). لذا ، من أجل جعل المتحكمات الدقيقة تفهم الإشارات التناظرية ، علينا تحويل هذه الإشارات التناظرية إلى شكل رقمي. ADC يفعل هذا بالضبط لنا. هناك العديد من أنواع ADC المتاحة لتطبيقات مختلفة. قليل من ADC المشهور هو الفلاش والتقريب المتتالي و سيجما دلتا.
النوع الأكثر تكلفة من ADC هو التقريب المتتالي وفي هذا البرنامج التعليمي سيتم استخدام ADC التقريبي المتتالي. في نوع التقريب المتتالي من ADC ، يتم إنشاء سلسلة من الرموز الرقمية ، كل منها يتوافق مع مستوى تمثيلي ثابت ، على التوالي. يستخدم عداد داخلي للمقارنة مع الإشارة التناظرية قيد التحويل. يتوقف التوليد عندما يصبح المستوى التناظري أكبر بقليل من الإشارة التناظرية. يتوافق الكود الرقمي مع المستوى التناظري وهو التمثيل الرقمي المطلوب للإشارة التناظرية. ينتهي هذا من شرحنا الصغير عن التقريب المتتالي.
إذا كنت ترغب في استكشاف ADC بعمق كبير ، فيمكنك الرجوع إلى برنامجنا التعليمي السابق على ADC. تتوفر ADC في شكل ICs وأيضًا وحدات التحكم الدقيقة تأتي مع ADC يحمل في ثناياه عوامل في الوقت الحاضر. في هذا البرنامج التعليمي ، سوف نستخدم ADC المدمج لـ Atmega16. دعونا نناقش حول ADC يحمل في ثناياه عوامل من Atmega16.
ADC في متحكم AVR Atmega16
يحتوي Atmega16 على ADC مدمج 10 بت و 8 قنوات. 10 بت يتوافق مع ذلك إذا كان جهد الدخل 0-5V ، فسيتم تقسيمه بقيمة 10 بت ، أي 1024 مستوى من القيم التناظرية المنفصلة (2 10 = 1024). الآن 8 قنوات تتوافق مع 8 دبابيس ADC مخصصة على Atmega16 حيث يمكن لكل دبوس قراءة الجهد التناظري. المنفذ الكامل (GPIO33-GPIO40) مخصص لتشغيل ADC. بشكل افتراضي ، دبابيس PORTA هي دبابيس IO عامة ، وهذا يعني أن دبابيس المنفذ متعددة الإرسال. من أجل استخدام هذه المسامير كدبابيس ADC ، سيتعين علينا تكوين سجلات معينة مخصصة للتحكم ADC. هذا هو السبب في أن السجلات تُعرف باسم سجلات التحكم ADC. دعونا نناقش كيفية إعداد هذه السجلات لبدء تشغيل ADC يحمل في ثناياه عوامل.
دبابيس ADC في Atmega16
المكونات مطلوبة
- متحكم Atmega16 IC
- 16 ميجا هرتز الكريستال المذبذب
- اثنين من المكثفات 100nF
- مكثفتان 22pF
- اضغط الزر
- أسلاك توصيل
- اللوح
- USBASP v2.0
- Led (أي لون)
مخطط الرسم البياني
إعداد سجلات التحكم ADC في Atmega16
1. ADMUX Register (ADC Multiplexer Selection Register) :
سجل ADMUX مخصص لاختيار قناة ADC واختيار الجهد المرجعي. توضح الصورة أدناه نظرة عامة على سجل ADMUX. الوصف موضح أدناه.
- بت 0-4: بت اختيار القناة.
مكس 4 |
مكس 3 |
مكس 2 |
مكس 1 |
مكس 0 |
قناة ADC مُحددة |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bit-5: يستخدم لضبط النتيجة إلى اليمين أو اليسار.
ADLAR |
وصف |
0 |
الحق في ضبط النتيجة |
1 |
اليسار ضبط النتيجة |
- البت 6-7: يتم استخدامها لتحديد الجهد المرجعي لـ ADC.
المراجع 1 |
المراجع 0 |
اختيار مرجع الجهد |
0 |
0 |
تم إيقاف تشغيل عارف داخلي Vref |
0 |
1 |
AVcc مع مكثف خارجي عند عارف دبوس |
1 |
0 |
محجوز |
1 |
1 |
مرجع جهد داخلي 2.56 مع مكثف خارجي في AREF Pin |
ابدأ الآن في تكوين بتات التسجيل هذه في البرنامج بحيث نحصل على قراءة ADC داخلية وإخراجها إلى All Pins of PORTC.
برمجة Atmega16 لـ ADC
البرنامج الكامل معطى أدناه. انسخ البرنامج في Atmega16 باستخدام JTAG و Atmel studio وقم بتدوير مقياس الجهد لتغيير قيمة ADC. هنا ، يتم شرح الكود سطراً بسطر.
ابدأ بعمل وظيفة واحدة لقراءة القيمة المحولة ADC. ثم قم بتمرير قيمة القناة كـ 'chnl' في وظيفة ADC_read .
غير موقعة ADC_read (char chnl غير موقع)
يجب أن تكون قيم القناة بين 0 إلى 7 حيث أن لدينا 8 قنوات فقط ADC.
chnl = chnl & 0b00000111 ؛
من خلال كتابة "40" أي "01000000" في سجل ADMUX ، اخترنا PORTA0 كـ ADC0 حيث سيتم توصيل الإدخال التناظري للتحويل الرقمي.
ADMUX = 0x40 ؛
تتضمن هذه الخطوة الآن عملية تحويل ADC ، حيث نبدأ التحويل من خلال كتابة ONE إلى ADSC Bit في سجل ADCSRA. بعد ذلك ، انتظر حتى ADIF bit لإرجاع القيمة عند اكتمال التحويل. نتوقف عن التحويل عن طريق كتابة '1' في ADIF Bit في سجل ADCSRA. عند اكتمال التحويل ، قم بإرجاع قيمة ADC.
أدكسرا - = (1 <
هنا يتم تحديد الجهد المرجعي الداخلي ADC عن طريق ضبط REFS0 بت. بعد ذلك ، قم بتمكين ADC وحدد prescaler كـ 128.
ADMUX = (1 <
الآن احفظ قيمة ADC وأرسلها إلى PORTC. في PORTC ، يتم توصيل 8 مصابيح LED والتي ستظهر الإخراج الرقمي بتنسيق 8 بت. المثال الذي أظهرناه يغير الجهد بين 0 فولت إلى 5 فولت باستخدام وعاء 1 كيلو.
أنا = ADC_read (0) ؛ PORTC = أنا ؛
يتم استخدام Digital Multimeter لعرض جهد الإدخال التناظري في ADC Pin ويتم استخدام 8 LED لإظهار قيمة 8 بت المقابلة لإخراج ADC. ما عليك سوى تدوير مقياس الجهد والاطلاع على النتيجة المقابلة على المتر المتعدد وكذلك على مصابيح LED المتوهجة.
يتم إعطاء رمز كامل وفيديو العمل أدناه.