//Przetwarzanie ADC Atmaga16 i wy�wietlenie wyniku na LCD //autor: skynet_2 & atom1477 (elektroda.pl) #include <avr/io.h> #include <util/delay.h> #include "HD44780.h" #include "HD44780.c" #include "itoa.h" void Inicjalizacja(void) { ADMUX |= (1 << REFS1) | (1 << REFS0);// �r�d�o napi�cia referencyjnego str 211 pdf ADMUX |= (0 << ADLAR);// zmiana kolejno�ci ADCL, ADCH str 211 pdf ADMUX |= (0 << MUX2) | (0 << MUX1) | (0 << MUX0);//wybranie wej�cia str 212 pdf //wybranie preskalera, dzieli F_CPU do zalecanych 50kHz do 200kHz pracy ADC //0 [000] 2 //1 [001] 2 //2 [010] 4 //3 [011] 8 //4 [100] 16 //5 [101] 32 //6 [110] 64 //7 [111] 128 ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADCSRA |= (1 << ADEN);// w��czenie ADC //ADCSRA &= ~(1 << ADEN);// wy��czenie ADC } uint16_t getVoltage() { ADCSRA |= (1 << ADSC);//rozpocz�cie konwersji while (ADCSRA & (1 << ADSC)) return ADCW; } int main() { LCD_Initalize(); LCD_Clear(); char bufor[16]; Inicjalizacja(); while (1) { _delay_ms(10); itoa(getVoltage(), bufor, 10); LCD_Clear(); LCD_WriteText("Pomiar:"); LCD_WriteText(bufor); } return 0; }
Piju