مبدل آنالوگ به دیجیتال در AVR – آموزش AVR جلسه 6

آنالوگ به دیجیتال در avr

آنالوگ به دیجیتال در AVR

در جلسه ی گذشته از آموزش Avr سراغ وقفه ها در میکروکنترلر Avr رفتیم و این جلسه رو مبدل آنالوگ به دیجیتال در avr قراره اختصاص بدیم.

تا این بخش از آموزش ها دیدیم که همیشه حرف ازحالت صفر و یک و ولتاژ های صفرو 5 ولت بود. اما همیشه در دنیای الکترونیک ولتاژ ها صفر یا 5 ولت نیستن و ولتاژ هایی مابین این اعداد رو هم گاهی نیاز داریم که به شکل دقیق بخونیم.

مبدل آنالوگ به دیجیتال در AVR

مبدل آنالوگ به دیجیتال در AVR به ما این امکان رو میده تا با تبدیل ورودی آنالوگ به مقدار دیجیتال این عمل رو انجام بدیم و با دقت خوبی بتونیم ولتاژ های بین صفر تا 5 ولت رو بخونیم.

در واقع مقدار آنالوگ رو با تبدیل به دیجیتال کردن میخونیم!

 ADC مخفف Analog to Digital Converter میباشد !

پایه های مبدل آنالوگ به دیجیتال  در ATmega32/16

پایه های ADC در atmega32 و atmega به شکل زیر هستش و پایه های پورت A برای این کار در نظر گرفته شده (یعنی فقط با این پایه ها توانایی انجام این کار رو داریم.)

پایه های مبدل آنالوگ به دیجیتال ADC

توجه کنید که پایه های 31 و 30 پایه های تغذیه ی این واحد هستن و باید به صفر و 5 ولت متصل بشن.

ولتاژ مرجع ADC

واحد ADC در AVR این وظیفه رو داره که ولتاژ آنالوگ رو به دیجیتال تبدیل کنه . اما چطوری؟!

مثلا فرض کنید قراره ولتاژی بین صفر تا 5 ولت به یکی از پایه های Adc داده بشه ، میکرو صفر رو 0 و 5 ولت رو 1023 در نظر میگیره و اعداد بین صفر تا 5 ولت رو به 1024 (چون از صفر شرو میکنه به شمارش، 1023 میشه آخرین) واحد مساوی تقسیم میکنه.

مثلا 2.5 ولت رو به 512 تغییر میده و تبدیل به یک مقدار دیجیتال میکنه.

اما ولتاژ همیشه صفر تا 5 ولت نیست و مثلا ممکنه ولتاژِ بین 0 تا 3 ولت داشته باشیم .

اینبار هم میکرو صفر رو برابر صفر و 3 رو برابر 1023 قرار میده و اعداد بین اونهارو هم به مقدارهای مساوی تقسیم میکنه.

 

این نوع تقسیم ( 0 تا1023 ) حالت 10 بیتی Adc میباشد، میتوان  Adc را در تنظیمات کدویزارد به حالت 8 بیتی نیز راه اندازی کرد که در این حالت اعداد به حوزه ی بین 0 تا 255 تقسیم میشوند.

 

انواع ولتاژ مرجع در ADC

ولتاژ مرجع ADC سه مدل داره که در تنظیمات adc در کدویژن میتونید تعیین کنید:

adc-in-avr-atmega32

پایه ی AREF

پایه ی 32 میکروکنترلر که در تصویر بالا مشخص شده ، به این پایه هر ولتاژی داده بشه ، بعنوان مرجع ADC تعیین خواهد شد ، مثلا ولتاژ 5 اگر داده بشه صفر تا 5 ولت ، و یا 3 ولت داده بشه صفر تا 3 ولت بعنوان مرجع در نظر گرفته میشه.

ولتاژ مرجع در ADC

پایه ی AVCC

این پایه هم میتونه مرجع ADC تعیین بشه، که در این حالت ولتاژ 5 ولت به عنوان مرجع انتخاب میشه.

این پایه وظیفه ی حذف نویز رو هم بر عهده داره که جلسه آینده به توضیح درباره ی اون میپردازیم.

 

int, Cap. on AREF

حالت سوم و آخر هم ولتاژی هستش که توسط مدار داخلی میکرو تعیین میشه و ما کافیه که در کدویزارد اونرو تنظیم کنیم.

با انتخاب این حالت ولتاژ مرجع 2.56 ولت تعیین میشه.

مزیت ولتاژ مرجع 2.56 در حالت 8 بیتی هست. به این شکل که با استفاده از این حالت هر ولتاژی که بعنوان خروجی داشته باشیم کافیه ضربدر صد کنیم تا مقدار عدد دیجیتالش رو بدست بیاریم(و بلعکس).

مثلا اگر ولتاژ 1 ولت داشته باشیم ، کافیه صد برابر کنیم تا عدد دیجتالش رو بدست بیاریم.

 

کلاک در ADC

در جلسه دوم ، پورت های میکرو‌کنترلر ،  گفتم که فعلا با فرکانس کاری میکروکنترلر کار نداریم و 8 یا مثلا 1 مگاهرتز بودنش تفاوتی نداره فعلا ، اما یکی از بخش های میکروکنترلر که فرکانس کاری میکروکنترلر در اون مهم و تعیین کنندس همین بخش آنالوگ به دیجیتال هستش.

نرخ نمونه برداری یکی از ملاک های دقت در خروجی هستش و دقت در برخی پروژه ها بسیار اهمیت داره.

نرخ نمونه برداری یعنی با چه سرعتی ولتاژ پایه ی ورودی چک بشه و تغییرات رو بررسی کنه.

 

نرخ نمونه برداری چطور تعیین میشه ؟

در تصویر بالا ، تنظیمات ADC ی بخش clock هم داره که میشه فرکانس نمونه برداری رو تعیین کرد. این فرکانس بر اساس کلاک میکرو تعیین میشه و با تقسیم های زیر فرکانس های f/2 و f/4 , f/8 , f/16 , f/32 , f/64 , f/128 رو برای ما فراهم میکنه.

مثلا اگر کلاک یا همون فرکانس کاری میکروکنترلر 8 مگاهرتز تنظیم شده باشه میشه با تقسیم های کلاکی که در بالا گفته شد ، یک سرعت رو انتخاب کرد :

clock-in-adc-avr

 

رجیستری های ADC و حذف نویز رو جلسه آینده برسی میکنیم و الان میریم سراغ چند پروژه مبدل آنالوگ به دیجیتال تا عملی تر آشنا بشیم با این واحد.

 

راه اندازی adc در کدویژن

تابع adc_read

برای راه اندازی ADC در کدویژن تا اینجا نحوه کار رو درک کردیم ولی چطوری باید ولتاژ ورودی به پورت A که پایه های ADC رو شامل میشه بخونیم؟

با استفاده از تابع زیر! :

 

که بجای X باید شماره صفر تا 7 ( شماره یکی از پایه های پورت  A رو وارد کنیم). تابع هر مقداری رو بخونه میتونیم داخل یک متغیر بریزیم:

 

 

 

مثال : با کمک راه اندازی ADC در کدویژن ، و پایه ی ADC1 برنامه ای بنویسید که اگر ولتاژی بین صفر تا 2ونیم ولت به پایه رسید LED متصل به پورت C0 خاموش شود و اگر ولتاژی بین 2.5 تا 5 ولت به این پایه رسید LED روشن شود.

در کدویزارد باید طبق تصویری که بالا در آموزش توضیح دادم adc رو فعال کنیم و همچنین طبق جلسه ی دوم ” پورت های میکرو‌کنترلر ” پایه ی C0 رو خروجی تعریف کنیم.

کد پروژه :

(در پایان مطلب کد + شبیه سازی ضمیمه شده)

 

دومین پروژه مبدل آنالوگ به دیجیتال avr :

در دومین پروژه adc قراره که ADC رو در حالت 8 بیتی راه اندازی کنیم و مقدار عدد دیجیتال رو بر روی یک LCD نمایش بدیم:

در این پروژه مطابق با پروژه قبل بخش ADC رو در حالت AREF فعال میکنیم با این تفاوت که تیک use 8 bits رو هم میزنیم.

lcd رو هم طبق آموزش اتصال ال سی دی به میکرو راه اندازی میکنیم. (من از پورت B استفاده میکنم)

کد پروژه :

 

 

کد + شبیه سازی هر 2 پروژه

 

در جلسه ی بعدی از آموزش آنالوگ به دیجیتال در AVR به رجیستر های واحد ADC در AVR میپردازیم.

 

ADS

حمیدرضا مودت

یک مهندس الکترونیک ، علاقه مند به یاد دادن و یاد گرفتن پیرامون دانش برق و الکترونیک

مطالب مرتبط