Danke!
ich habe es entsprechend geändert aber ich bekomme : ? V auf dem LCD angezeigt!
was mach ich denn falsch?Code:#include <avr/io.h> #include <inttypes.h> #include <stdio.h> #include "lcd.h" void LCD(int result) { char buffer[5]; double d; //int t; //int x; //d = result * (2.56/1024)*10000; d = result* (2.56/1024); //t = d / 10000; //x = d - (t * 10000); sprintf(buffer,"%4.2lf V",d); // itoa(result,buffer,10); lcd_gotoxy(7,1); lcd_puts(buffer); } uint16_t readADC(uint8_t channel) { uint8_t i; uint16_t result = 0; ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);// Den ADC aktivieren und Teilungsfaktor auf 64 stellen ADMUX = channel;// Kanal des Multiplexers waehlen ADMUX |= (1<<REFS1) | (1<<REFS0);// Interne Referenzspannung verwenden (also 2,56 V) ADCSRA |= (1<<ADSC); // Den ADC initialisieren.. while(ADCSRA & (1<<ADSC));// und einen sog. Dummyreadout machen for(i=0; i<3; i++) // Jetzt 3x die analoge Spannung and Kanal channel auslesen { ADCSRA |= (1<<ADSC);// Eine Wandlung while(ADCSRA & (1<<ADSC));// Auf Ergebnis warten... result += ADCW; } ADCSRA &= ~(1<<ADEN);// ADC wieder deaktivieren result /= 3;// und dann Durchschnittswert ausrechnen. return result; } int main(void) { int result; lcd_init(LCD_DISP_ON); lcd_puts("Die Spannung ="); while(1) { result = readADC(0); //Auslesen der analogen Spannungen an Pin 0, LCD(result); // also ADC0. In result steht das Ergebnis. } return 0; }
MfG







Zitieren

Lesezeichen