Wenn das Ergebnis gleich ist - egal ob am ADC eine Spannung anliegt oder der Pinn in der Luft hängt - dann klingt das doch danach, dass der ADC "nichts" misst. Jedenfalls nichts Sinnvolles. Oder?... aktuelles Problem ... ADC wert > 205 und < 409 ... Immer sogar wenn nichts angeschlossen ist ...
Code:... /* ADC Einzelmessung */ uint16_t ADC_Read(uint8_t channel) { // Kanal waehlen, ohne andere Bits zu beeinflußen ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten } return ADCW; // ADC auslesen und zurückgeben }
Rechne mal bitte: Dein Vorteiler ist clock/8. WENN Du den Controller mit 8 MHz fährst (ist ja nicht unüblich, Du gibst hier leider nix an) dann bekommst Du eine ADC-Frequenz von 1 MHz. Dieser Takt ist die Stoppuhr für die Abläufe des ADC - der zählt die Takte und bemisst damit seine Samplezeit, seine Wandlungszeit und so.
Nun siehts also so aus, als sei Dein ADC-Takt zu hoch >>WENN<< meine Annahme mit den 8 MHz stimmt. Musst halt rechnen.Zitat von Atmel-Datasheet 8271E–AVR–07/2012
Verdächtig erscheint mir auch Dein Kanalwechsel bei Deiner ADC_Read-Funktion mit der unmittelbar folgenden Leseaktion. Lies Dir dazu mal das Datenblatt durch, Abschnitt Changing Channel oder so, dort ist ausgeführt wie glaubhaft der erste Wert nach dem Kanalwechsel ist. Und ein Kanalwechsel erfolgt (meines Wissens nach) auch dann, wenn durch den Befehl derselbe Kanal wie vorher ausgewählt wird . . .
Und Huberts Hinweis ist ja auch im Datenblatt (... Analog Input Circuitry ...) näher erläutert *gg*
Lesezeichen