Gast
#1144572
Guten Tag zusammen,
ich hab ein Problem mit dem ADC des ATmega644:
Ich möchte analoge Werte von 0V bis Vcc einlesen und auf ein LCD (0 bis
255) ausgeben. Wenn ich nun die Spannung langsam erhöhe sind immer Werte
von 0 bis 25 zu lesen. Und dies zyklisch bis Vcc erreicht ist. Die
Rechnerei zum Visualisieren ist Fehlerfrei. Ich komm aber nicht drauf,
was da sein könnte. Evtl. Bits verschoben, Register nicht richtig
gesetzt o. ä.
HILFE!!
Folgendermaßen ist der ADC initialisiert:
uint16_t ReadChannel(void)
{
uint8_t i;
ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0);
ADMUX |= (1<<REFS0) | (1<<ADLAR);
//nachfolgend wird eine Wandlung durchgeführt. Dies wird
empfohlen, um den Wandler "warmlaufen" zu lassen
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) )
{
; // auf Abschluss der Konvertierung
warten
}
result = ADCH; // ADCW muss einmal gelesen werden,
// sonst wird Ergebnis der nächsten
Wandlung
// nicht übernommen.
// Eigentliche Messung - Mittelwert aus 10 aufeinanderfolgenden
Wandlungen
result = 0;
for( i=0; i<10; i++ )
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single
conversion"
while ( ADCSRA & (1<<ADSC) )
{
; // auf Abschluss der Konvertierung
warten
}
result += ADCH; // Wandlungsergebnisse
aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren
result /= 10;
// Summe durch zehn teilen = arithm.
Mittelwert
return result;
}
Danke im Voraus.
Gruß