Henry
25.05.2006, 19:36
Hallo,
ich habe mir für eine Funktion erstellt mit der ich die Analogen Eingänge auslesen kann (ist nahezu 1:1 aus dem Tut von mikrocontroller.net übernommen, bis auf einige bezeichnungen).
//Code zum Auslesen des AD Eingang
uint16_t analog_lesen(uint8_t kanal)
{
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<< ADPS1) | (1<< ADPS0); // Frequenvorteiler auf 128 setzen und AD-Wandler aktivieren
ADMUX = kanal;
ADCSRA |= (1<<ADSC);
while ( ADCSRA & (1<<ADSC) );
for (i=0;i<4;i++)
{
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1<<ADSC) );
result += ADCW;
}
ADCSRA &= ~(1<<ADEN); //AD-Wandler deaktivieren
result /= 4;
return result;
}
Nun habe ich mir in meinem einen AD Kanal ausgelesen und möchte ihn anzeigen.
...
uint16_t messwert0 = 0;
char ausgabe0;
//***
messwert0 = analog_lesen(1);
itoa(messwert0, ausgabe0, 10);
lcd_gotopos(1,11);
lcd_writetext(" ");
lcd_gotopos(1,11);
lcd_writetext(ausgabe0);
...
Das Anzeigen von Text auf dem Display klappt, die Funktion ist also i.O. ich hatte so auch schon eine Anzeige des Wertes vom AD-Wandler, dann wurden aber plötzlich nur noch wirre Zeichen angezeigt, was ich mir nicht erklären kann.
Meine Frage ist nun :
habe ich einen Fehler in der Funktion zu auslesen des AD-Wandler oder wandelt due itoa() Funktion den Integerwert nicht richtig um?
Danke schon einmal für die Hilfe
ich habe mir für eine Funktion erstellt mit der ich die Analogen Eingänge auslesen kann (ist nahezu 1:1 aus dem Tut von mikrocontroller.net übernommen, bis auf einige bezeichnungen).
//Code zum Auslesen des AD Eingang
uint16_t analog_lesen(uint8_t kanal)
{
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<< ADPS1) | (1<< ADPS0); // Frequenvorteiler auf 128 setzen und AD-Wandler aktivieren
ADMUX = kanal;
ADCSRA |= (1<<ADSC);
while ( ADCSRA & (1<<ADSC) );
for (i=0;i<4;i++)
{
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1<<ADSC) );
result += ADCW;
}
ADCSRA &= ~(1<<ADEN); //AD-Wandler deaktivieren
result /= 4;
return result;
}
Nun habe ich mir in meinem einen AD Kanal ausgelesen und möchte ihn anzeigen.
...
uint16_t messwert0 = 0;
char ausgabe0;
//***
messwert0 = analog_lesen(1);
itoa(messwert0, ausgabe0, 10);
lcd_gotopos(1,11);
lcd_writetext(" ");
lcd_gotopos(1,11);
lcd_writetext(ausgabe0);
...
Das Anzeigen von Text auf dem Display klappt, die Funktion ist also i.O. ich hatte so auch schon eine Anzeige des Wertes vom AD-Wandler, dann wurden aber plötzlich nur noch wirre Zeichen angezeigt, was ich mir nicht erklären kann.
Meine Frage ist nun :
habe ich einen Fehler in der Funktion zu auslesen des AD-Wandler oder wandelt due itoa() Funktion den Integerwert nicht richtig um?
Danke schon einmal für die Hilfe