اگر بخواهیم مبدل انالوگ به دیجیتال (ADC) را به صورت ساده توصیف کنیم،یک ولت متر دیجیتال است که بر روی پایه های میکروکنترلر نصب شده است و به وسیله ی آن میتوان ولتاژ پایه های ورودی را با دقت مناسبی اندازه گیری کرد. همانطور که میدانید ما تا به حال در هیچ آی سی نمیتوانستیم شدت ولتاژ ورودی را به دقت...
emic.ir
یک برنامه برای کدویژن گذاشته ، من تست نکردم فعلا.
PHP:
#include <mega16a.h>
#include <delay.h>
#include <alcd.h>
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR)) // هست که توسط خود کدويژن ايجاد مي شود ADC از خط 4 تا خط 13 کتابخانه //
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
int a; // خوانده شده از پين هاي ميکرو در ان ADC براي ريختن مقادير int از نوع a تعريف متغيري به نام //
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
ADMUX=ADC_VREF_TYPE; // هستند که با توجه به تنظيماتي که در کدويزارد انجام داديم توسط خود کدويژن ايجاد مي شوند ADC از خط 25 تا27 رجيسترهاي //
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
lcd_init(16);
while (1)
{
a=read_adc(0); // a خواندن عددي بين 0 تا 1023 که نشان دهنده مقدار ولتاژ انالوگ روي ان پين ميکرو است و ريختن ان در متغير //
if(a<410) //را مينويسد Vin is lower 2V عبارت LCD اگر عدد خوانده شده از 410 که با توجه به فرمول تناسب مي شود 2 ولت کمتر بود روي //
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Vin is lower 2V");
delay_ms(300);
}
if(a>410) //را مينويسد More Vin of 2V عبارت LCD اگر ولتاژ خوانده شده بيشتر از 2 ولت بود روي //
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("More Vin of 2V");
delay_ms(300);
}
}
}
در سایت بالا توضیح داده چطوری کار کنیم.
در این پروژه مبدل انالوگ به دیجیتال میکرو (ADC) تشخیص می دهد که ولتاژی که به پین ADC0 می دهیم کمتر از 2 ولت است یا بیشتر و درنهایت عبارتی روی LCD کاراکتری نمایش می دهد.
نکته : همانطور که در شماتیک بالا مشاهده می کنید, برای استفاده از ADC میکرو باید پین AREF و AVCC را به ولتاژ مرجع خود که در اینجا 5 ولت است متصل کنید. (پین 31 را هم که در شبیه سازی Proteus وجود ندارد, به منفی وصل کنید)
نگارنده lcd را به پورت C وصل کرده ، و تنظیمات adc را در کدویزارد کدویژن طبق عکس بالا انجام داده.
سالک: با تشکر از نگارنده. از نظر من که آموزش مشکلی ندارد. ولی همین طوری نمیشه نظر داد ، باید عملی تست بشه.