جدول المحتويات:

مقدمة إلى ADC في متحكم AVR - للمبتدئين: 14 خطوة
مقدمة إلى ADC في متحكم AVR - للمبتدئين: 14 خطوة

فيديو: مقدمة إلى ADC في متحكم AVR - للمبتدئين: 14 خطوة

فيديو: مقدمة إلى ADC في متحكم AVR - للمبتدئين: 14 خطوة
فيديو: Microcontroller AVR Lesson 9 ADC analog to digital converter + LCD تحويل اشارة انالوج متغيرة لديجيتل 2024, ديسمبر
Anonim
مقدمة إلى ADC في متحكم AVR | للمبتدئين
مقدمة إلى ADC في متحكم AVR | للمبتدئين

في هذا البرنامج التعليمي سوف تعرف كل شيء ADC في متحكم avr

الخطوة 1: ما هو ADC؟

يسمح ADC ، أو المحول التناظري إلى الرقمي ، بتحويل الجهد التناظري إلى قيمة رقمية يمكن استخدامها بواسطة متحكم دقيق. هناك العديد من مصادر الإشارات التناظرية التي قد يرغب المرء في قياسها. هناك مستشعرات تمثيلية متاحة تقيس درجة الحرارة ، وشدة الضوء ، والمسافة ، والموضع ، والقوة ، على سبيل المثال لا الحصر.

الخطوة 2: كيف تعمل ADC في AVR- متحكم

يسمح AVR ADC للمتحكم الدقيق AVR بتحويل الفولتية التناظرية إلى قيم رقمية مع وجود أجزاء خارجية قليلة أو معدومة. يتميز ATmega8 بتقريب متتالي 10 بت ADC يحتوي ATmega8 على 7 قنوات ADC في PortC. يحتوي ADC على دبوس جهد إمداد تناظري منفصل ، AVCC. يجب ألا يختلف AVCC أكثر من ± 0.3 فولت عن VCC.. قد يتم فصل مرجع الجهد خارجيًا عند دبوس AREF. يتم استخدام AVCC كمرجع للجهد. يمكن أيضًا تعيين ADC للتشغيل بشكل مستمر (وضع التشغيل الحر) أو للقيام بتحويل واحد فقط.

الخطوة 3: صيغة تحويل ADC

صيغة تحويل ADC
صيغة تحويل ADC

حيث يكون Vin هو الجهد على دبوس الإدخال المحدد و Vref مرجع الجهد المحدد

الخطوة 4: كيفية تكوين ADC في ATmega8؟

كيفية تكوين ADC في ATmega8؟
كيفية تكوين ADC في ATmega8؟

يتم استخدام السجلات التالية لتنفيذ ADC في ATmega8

اختيار معدد ADC

الخطوة 5: اختيار ADLAR

اختيار ADLAR
اختيار ADLAR
اختيار ADLAR
اختيار ADLAR

نتيجة الضبط الأيسر ADC يؤثر بت ADLAR على عرض نتيجة تحويل ADC في سجل بيانات ADC. اكتب واحدًا إلى ADLAR إلى اليسار لضبط النتيجة. خلاف ذلك ، يتم ضبط النتيجة بشكل صحيح

عند اكتمال تحويل ADC ، يتم العثور على النتيجة في ADCH و ADCL. عند قراءة ADCL ، لا يتم تحديث سجل بيانات ADC حتى تتم قراءة ADCH. وبالتالي ، إذا تُركت النتيجة مضبوطة ولم تكن هناك حاجة إلى دقة أكثر من 8 بتات ، يكفي قراءة ADCH. خلاف ذلك ، يجب قراءة ADCL أولاً ، ثم ADCH. بتات اختيار القناة التناظرية تحدد قيمة هذه البتات المدخلات التناظرية المتصلة بـ ADC.

الخطوة 6: اختيار ADCSRA

اختيار ADCSRA
اختيار ADCSRA
اختيار ADCSRA
اختيار ADCSRA

• بت 7 - عدن: ADC تمكين كتابة هذا البت لواحد يمكّن ADC. من خلال كتابته على الصفر ، يتم إيقاف تشغيل ADC

• بت 6 - ADSC: ADC بدء التحويل في وضع التحويل الفردي ، اكتب هذا البت إلى واحد لبدء كل تحويل. في وضع التشغيل الحر ، اكتب هذا البت إلى واحد لبدء التحويل الأول.

• بت 5 - ADFR: تحديد تشغيل مجاني لـ ADC عند تعيين هذا البت (واحد) ، تعمل ADC في وضع التشغيل الحر. في هذا الوضع ، عينات ADC وتحديثات سجلات البيانات بشكل مستمر. سيؤدي مسح هذا البت (صفر) إلى إنهاء وضع التشغيل الحر.

• Bit 4 - ADIF: ADC Interrupt Flag يتم تعيين هذا البت عند اكتمال تحويل ADC ويتم تحديث سجلات البيانات. يتم تنفيذ ADC Conversion Complete Interrupt إذا تم تعيين بت ADIE و I-bit في SREG. يتم مسح ADIF بواسطة الأجهزة عند تنفيذ ناقل معالجة المقاطعة المقابل. بدلاً من ذلك ، يتم مسح ADIF عن طريق كتابة منطقي للعلم.

• Bit 3 - ADIE: ADC Interrupt Enable عند كتابة هذا البت إلى واحد وتعيين I-bit في SREG ، يتم تنشيط المقاطعة الكاملة لتحويل ADC.

• البتات 2: 0 - ADPS2: 0: بتات التحديد المسبق للمقياس المسبق ADC وفقًا لورقة البيانات ، يجب ضبط هذا المقياس المسبق بحيث يكون تردد إدخال ADC بين 50 كيلوهرتز و 200 كيلوهرتز. ساعة ADC مشتقة من ساعة النظام بمساعدة ADPS2: 0 تحدد هذه البتات عامل القسمة بين تردد XTAL وساعة الإدخال إلى ADC.

الخطوة 7: إذا كنت تريد أن تأخذ قيمة ADC ، فعليك أن تحتاج إلى بعض الأعمال التي تم القيام بها المدرجة أدناه

  • قم بتعيين قيمة ADC
  • تكوين دبوس إخراج الصمام
  • تكوين أجهزة ADC
  • تمكين ADC
  • ابدأ التحويلات التناظرية إلى الرقمية
  • بينما إلى الأبد

إذا كانت قيمة ADC أعلى ثم قم بتعيين القيمة ، فقم بتشغيل LED ELSE Turn Off LED

الخطوة 8: تعيين قيمة ADC

الكود: uint8_t ADCValue = 128 ؛

الخطوة 9: تكوين خرج LED Pin

الكود: DDRB | = (1 << PB1) ؛

الخطوة 10: تكوين أجهزة ADC

تكوين أجهزة ADC

يتم ذلك من خلال ضبط البتات في سجلات التحكم الخاصة بـ ADC. أولاً ، دعنا نضبط قيمة prescalar لـ ADC. وفقًا لورقة البيانات ، يجب ضبط مقياس prescalar هذا بحيث يكون تردد إدخال ADC بين 50 كيلوهرتز و 200 كيلوهرتز. ساعة ADC مشتقة من ساعة النظام. مع تردد نظام يبلغ 1 ميجاهرتز ، سينتج عن مقياس مسبق من 8 تردد ADC يبلغ 125 كيلوهرتز. يتم ضبط القياس المسبق بواسطة وحدات بت ADPS في سجل ADCSRA. وفقًا لورقة البيانات ، يجب تعيين ADPS2: 0 بتات الثلاثة على 011 للحصول على المقياس المسبق 8.

الكود: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) ؛

بعد ذلك ، دعنا نضبط الجهد المرجعي ADC. يتم التحكم في ذلك بواسطة وحدات بت REFS في سجل ADMUX. يحدد ما يلي الجهد المرجعي إلى AVCC.

الكود: ADMUX | = (1 << REFS0) ؛

لتعيين القناة التي تم تمريرها عبر معدد الإرسال إلى ADC ، يجب ضبط بتات MUX في سجل ADMUX وفقًا لذلك. نظرًا لأننا نستخدم ADC5 هنا

الكود: ADMUX & = 0xF0؛ ADMUX | = 5 ؛

من أجل وضع ADC في وضع التشغيل الحر ، قم بتعيين بت ADFR المسمى بشكل مناسب في سجل ADCSRA:

الكود: ADCSRA | = (1 << ADFR) ؛

سيتم إجراء تغيير إعدادات أخير لتسهيل قراءة قيمة ADC. على الرغم من أن ADC لديها دقة 10 بت ، إلا أن هذه المعلومات الكثيرة غالبًا ما تكون غير ضرورية. يتم تقسيم هذه القيمة 10 بت على سجلين 8 بت ، ADCH و ADCL. بشكل افتراضي ، يتم العثور على أقل 8 بتات من قيمة ADC في ADCL ، مع كون الجزأين العلويين أقل بتتين من ADCH. من خلال تعيين بت ADLAR في سجل ADMUX ، يمكننا ترك قيمة ADC. يضع هذا أعلى 8 بتات للقياس في سجل ADCH ، والباقي في سجل ADCL. إذا قرأنا بعد ذلك سجل ADCH ، فسنحصل على قيمة 8 بت تمثل قياسنا من 0 إلى 5 فولت كرقم من 0 إلى 255. نقوم بتحويل قياس ADC 10 بت إلى 8 بت واحد. إليك الكود لتعيين بت ADLAR:

الشفرة:

ADMUX | = (1 << ADLAR) ، هذا يكمل إعداد جهاز ADC لهذا المثال. يجب تعيين بتين أخريين قبل أن تبدأ ADC في أخذ القياسات.

الخطوة 11: تفعيل ADC

لتمكين ADC ، اضبط بت ADEN في ADCSRA:

الكود: ADCSRA | = (1 << ADEN) ؛

الخطوة 12: ابدأ التحويلات التناظرية إلى الرقمية

لبدء قياسات ADC ، يجب ضبط بت ADSC في ADCSRA:

الكود: ADCSRA | = (1 << ADSC) ؛

في هذه المرحلة ، سيبدأ ADC في أخذ عينات باستمرار من الجهد المقدم في ADC5. سيبدو الرمز إلى هذه النقطة كما يلي:

الخطوة 13: بينما إلى الأبد

الشيء الوحيد المتبقي هو اختبار قيمة ADC وتعيين مصابيح LED لعرض مؤشر مرتفع / منخفض. نظرًا لأن قراءة ADC في ADCH لها قيمة قصوى تبلغ 255 ، فقد تم اختيار قيمة اختبار لـ th لتحديد ما إذا كان الجهد مرتفعًا أم منخفضًا. ستسمح لنا عبارة IF / ELSE البسيطة في حلقات FOR بتشغيل مؤشر LED الصحيح:

الشفرة

إذا (ADCH> ADCValue)

{

بورتب | = (1 << PB0) ، // قم بتشغيل LED

}

آخر

{

PORTB & = ~ (1 << PB0) ؛ // إيقاف تشغيل LED

}

الخطوة 14: في النهاية ، أكمل الكود

الشفرة:

#يشمل

int main (باطل)

{

uint8_t ADCValue = 128 ؛

DDRB | = (1 << PB0) ؛ // تعيين LED1 كإخراج

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) ؛ // اضبط ADC prescalar على 8 - // 125 كيلو هرتز معدل العينة 1 ميجا هرتز

ADMUX | = (1 << REFS0) ؛ // تعيين مرجع ADC إلى AVCC

ADMUX | = (1 << ADLAR) ، // اليسار ضبط نتيجة ADC للسماح بقراءة سهلة 8 بت

ADMUX & = 0xF0 ؛

ADMUX | = 5 ؛ // يلزم تغيير قيم MUX لاستخدام ADC0

ADCSRA | = (1 << ADFR) ، // اضبط ADC على وضع التشغيل الحر

ADCSRA | = (1 << عدن) ، // تمكين ADC

ADCSRA | = (1 << ADSC) ، // ابدأ تحويلات A2D بينما (1) // Loop Forever

{

إذا (ADCH> ADCValue)

{

بورتب | = (1 << PB0) ، // قم بتشغيل LED1

}

آخر

{

PORTE & = ~ (1 << PB1) ؛ // إيقاف تشغيل LED1

}

}

العودة 0 ؛

}

قم أولاً بنشر هذا البرنامج التعليمي انقر هنا

موصى به: