مقالات آموزشی

جلسه شانزدهم آموزش AVR
به نام خدا
آموزش میکروکنترلر AVR به زبان WinAVR) C)
(آموزش WinAVR جلسه پنجم)



مقدمه:

در جلسه قبل به معرفی پورت سریال میکرو و نحوه ارتباط میکرو با میکروی دیگر و نیز ارتباط با کامپیوتر توسط استاندارد RS232 پرداختیم. در این جلسه تصمیم داریم به معرفی مبدل آنالوگ به دیجیتال میکرو و نحوه کار با آن در محیط WinAVR بپردازیم.

◄ تصویر ابتدای این مقاله مربوط به اسیلوسکوپ دیجیتال کتاب مجموعه مدار آقای محمود بخت آور می باشد که سالها پیش توسط مولف این مقاله ساخته شده بود و هم اینک فقط تصویر آن باقیست. با توجه به ماهیت تبدیل آنالوگ به دیجیتال تصویر مناسبی برای ابتدای این مقاله به نظر می رسد. اسیلوسکوپ مذکور از آی سی LM3914 برای تبدیل مقادیر آنالوگ استفاده می کرد.


طرز کار مبدل آنالوگ به دیجیتال میکرو

مبدل آنالوگ به دیجیتال یا ADC یا A2D بخشی از میکروکنترلر AVR است که ولتاژ آنالوگ ورودی را به مقادیر دیجیتال تبدیل می کند. همانطوریکه در تصویر زیر مشاهده می فرمایید این بخش از یک مالتی پلکسر تشکیل شده است که در هر لحظه یکی از پایه های ورودی میکرو را نتخاب می کند، در طرف دیگر یک مبدل دیجیتال به آنالوگ داخلی با دقت ١٠ بیت ولتاژ آنالوگ دقیقی را بر اساس ولتاژ مبنا (که همان پایه AREF میکرو است) تولید می کند. این ولتاژ تولید شده با ولتاژ موجود در روی پایه خاص میکرو که مورد تست می باشد به ورودی های یک مقایسه کننده آنالوگ وارد شده و خروجی آن به بخش تبدیلات منطقی میکرو وارد می شود. به این ترتیب میکرو تشخیص می دهد که ولتاژ ورودی برابر با چه سطحی از ولتاژ است؛ که این سطح قالباً به دلیل ماهیت ١٠ بیتی بخش D2A (دیجیتال به آنالوگ داخلی) در محدوده ١٠٢۴ پله یا مرحله بین ٠ ولت تا ولتاژ مرجع قرار دارد.





ولتاژ مرجع می تواند از یک مرجع داخلی و دقیق 2.56 ولت و یا ولتاژ خارجی که بر روی پایه AREF اعمال می شود تامین گردد. این ولتاژ خارجی می تواند بین ٠ تا ۵ ولت متغیر باشد. همانطوریکه در تصویر بالا مشاهده می کنید می توان با تنظیم رجیسترهای مربوطه یکی از ولتاژ مرجع های داخلی، AVCC و یا AREF را به بخش تبدیلات میکرو تحویل داد. شایان ذکر است که از پایه AREF میکرو می توان ولتاژ 2.56 ولت را دریافت کرد چون طبق دیاگرام مشاهده می کنیم که ولتاژ مرجع در صورت استفاده، بوسیله ترانزیستور FET بر روی پایه AREF جریان می یابد. (هر چند که این پایه بعنوان ورودی است ولی با این حال می توان برای مقاصد خاص از 2.56 ولت آن استفاده کرد، البته جریان این پایه فوق العاده کم می باشد).

در بازار آی سی های مبدل آنالوگ به دیجیتال با دقت مختلف موجود می باشد که معمولاً سرعت نمونه برداری بالاتری دارند و می توان از آنها بجای مبدل داخلی میکرو استفاده کرد، با این حال استفاده از مبدل داخلی، مدار را کوچکتر و هزینه ساخت آن را کمتر می کند، با استفاده از مبدل دیجیتال به آنالوگ می توان صدا را به کد های دیجیتال تبدیل کرد و با استفاده از ماژول های انتقال دیتا ارسال نمود (کاری که در موبایل ها و برخی از تلفن های بیسیم انجام می پذیرد). همچنین می توان صدای دیجیتال شده را بر روی EEPROM و یا SD/MMC ذخیره کرد. برای اتصال میکروفن به مبدل آنالوگ به دیجیتال باید از مداری به نام پری آمپلیفایر استفاده کرد، چرا که قدرت سیگنال خروجی میکروفن بسیار پایین بوده و نمیتواند محدوده وسیعی از ADC را تحت پوشش قرار دهد.

در این مقاله تصمیم داریم با استفاده از توابع کتابخانه رایگان پروفسور پاسکال استنگ به نام avrlib برنامه ای برای میکروکنترلر نمونه ATmega8 بنویسیم که مقدار ولتاژ موجود در یکی از پایه های میکرو را به صورت عددی بر روی یک نمایشگر کریستال مایع نشان دهد.


شماتیک

برای این مقاله نقشه الکترونیکی زیر را بر روی تخته آزمایش ببندید:






برنامه

برنامه این جلسه به طور کامل در پوشه همراه مقاله آورده شده است. با این حال برای نوشتن برنامه از صفر بایستی ابتدا از منوی start وارد WinAVR شده و روی MFile کلیک کنید تا نوع میکرو، فرکانس کاری و غیره را تنظیم نمایید. نحوه انجام این تنظیمات به طور کامل در جلسات ١٢ و ١٣ توضیح داده شده است و به همین دلیل از تکرار آن ها در اینجا خودداری می شود. فایلهای موجود در پوشه سورس کد همراه این مقاله در شکل زیر مشاهده می شود؛ با راست کلیک بر روی Makefile و بازکردن آن با Notepad++ یا هر ادیتور دیگر می توانید محتوای آن را مشاهده و ادیت کنید. البته بازکردن این فایل با برنامه MFile نیز امکان پذیر است.





ما در این برنامه از میکروکنترلر ATmega8 با فرکانس کاری ١ مگاهرتز داخلی استفاده کرده ایم. توابع کتابخانه ای برای راه اندازی بخش مبدل آنالوگ به دیجیتال در دو فایل a2d.c و a2d.h قرار دارند. تابع a2dInit() مبدل را روشن کرده و سرعت نمونه برداری و نیز ولتاژ مرجع را با مقادیر پیش فرض درج شده در هدر فایل ad2.h مقدار دهی می نماید. سپس با دستور a2dSetPrescaler(ADC_PRESCALE_DIV32) سرعت نمونه برداری را برابر با یک سی و دوم فرکانس CPU قرار می دهیم و با دستور a2dSetReference(ADC_REFERENCE_AVCC) ولتاژ مرجع مبدل را برابر با ولتاژ موجود در پایه AVCC یعنی ۵ ولت تنظیم می کنیم. این ثابت ها که در داخل پرانتز در دستورات بالا درج شده اند در فایل a2d.h موجود می باشند و مقادیر تعریف شده هستند. در خطوط بعدی برنامه یک حلقه بی نهایت تشکیل داده و با دستور a2dConvert10bit(0) مقدار آنالوگ موجود در پایه شماره 0 مبدل که در آی سی میکروکنترلر ATmega8 همان پایه PC0 می باشد می خوانیم و آنرا در خط اول LCD نشان می دهیم. سپس به خط دوم نمایشگر پرش کرده و مقدار خوانده شده را بر 204 تقسیم می کنیم تا ولتاژ موجود در پایه بدیت آید. از آنجاییکه ACD در این میکرو ١٠ بیتی بوده و نیز ولتاژ مرجع بر روی ۵ ولت تنظیم شده است، به ازای ۵ ولت عدد ١٠٢٣ را داریم که با تقسیم ٢٠۴=۵÷١٠٢٣ عدد ٢٠۴ به دست می آید و با تقسیم مقدار دیجیتال بدست آمده بر ثابت ٢٠۴، ولتاژ موجود بر روی این پایه حاصل می شود که آن را در خط دوم نمایشگر نشان می دهیم.

متن برنامه:


#include <avr/io.h>		
#include <avr/interrupt.h>
#include <util/delay.h>
#include "rprintf.h"
#include "lcd.h"
#include "a2d.h"


int main(void)
{
	lcdInit();
	rprintfInit(lcdDataWrite);
	rprintf("WinAVR AVR64.com");
	_delay_ms(500);
	lcdClear();
	
	DDRC = 0x00;
	PORTC = 0x00;
	
	a2dInit();
	a2dSetPrescaler(ADC_PRESCALE_DIV32);
	a2dSetReference(ADC_REFERENCE_AVCC);


	while(1){
		
		lcdHome();
		rprintf("ACD0 value: %d",a2dConvert10bit(0));
		lcdGotoXY(0,1);
		rprintf("Voltage: %d v",a2dConvert10bit(0)/204);
		_delay_ms(100);
		lcdClear();
	};
	
	return 0;
}



تصویر پروژه در حال تست:

پس از پروگرم کردن میکرو و اتصال تغذیه ۵ ولت به مدار مشاهده می کنید که با تنظیم ولوم ۵ کیلو مقدار ولتاژ موجود در پایه ADC0 تغییر کرده و مقدار دیجیتال ١٠ بیتی و نیز میزان ولتاژ بر روی LCD نمایش داده می شود.






سخن آخر:

در این مقاله روش استفاده از کتابخانه a2d برای راه اندازی و استفاده از مبدل آنالوگ به دیجیتال AVR در محیط WinAVR را یاد گرفتید. با مطالعه کدهای داخل فایل a2d.c می توانید به نحوه پیاده سازی این توابع که با زبان اسمبلی صورت گرفته دست پیدا کنید و با الگوگیری از آن کتابخانه های کوچکتر و شخصی برای خود بنویسید. همچنین با بررسی هدر فایل a2d.h نیز می توانید فهرست سایر توابع کاربردی مبدل را مشاهده کرده و در صورت نیاز از آنها استفاده نمایید. راه اندازی مبدل آنالوگ به دیجیتال در حالت های دیگر با ولتاژ مرجع خارجی و یا ولتاژ داخلی کالیبره شده نیز مانند همین حالت بوده و به تغییر کوچکی در کد و نیز اعمال ولتاژ دلخواه به پایه AREF نیازمند است.

جلسه بعد به تایمر/ کانتر (Timer/Counter) یا به عبارتی زمان سنج ها و شمارنده ها اختصاص دارد. در جلسه بعدی می آموزید که چگونه مبنای دقیق زمان برای ساخت ابزار هایی مثل ساعت دیجیتال، تایمر و ... را به دست آورید و نیز نحوه ساخت شمارنده ساده برای شمارش رویدادها را خواهید آموخت.



دانلود PDF این مقاله
جلسه پانزدهم آموزش AVR << مقاله قبلی                ليست مقالات                مقاله بعدی >> جلسه هفدهم آموزش AVR



© 2009-2016 AVR64.com