Datum:
Hi, Habe mit dem Atmega16 eine kleine Messstelle für meine Solarzellen gebaut. Dabei messe ich an einem single ended Ad Eingang die Solarzellenspannung und an 2 differentiellen AD Eingängen Lade- und Verbrauchstrom. Wenn am single ended Eingang keine Spannung anliegt bekomme ich wie erwartet als ad Ergebnis 0. Die beiden anderen Eingänge liefern bei 0V (Spannungsabfall an den Shunts) jeweils den Wert 1021 !? Bei anliegender Spannung liefern beide korrekte Werte ! Sollte ich bei 0V nicht auch 0 als Ergebnis bekommen ??? Peter M.
Datum:
Hi, Also die Funktion mit der ich die Werte auslese:
uint16_t gainedMeasure(uint8_t admux)
{
uint8_t i;
uint16_t result = 0;
// Den ADC aktivieren und Teilungsfaktor auf 8 stellen
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0) ;
ADMUX=admux;
// Den ADC initialisieren und einen sog. Dummyreadout machen
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
// Jetzt 3x die analoge Spannung and Kanal channel auslesen
// und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC);
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
// ADC wieder deaktivieren
ADCSRA &= ~(1<<ADEN);
result /= 3;
return result;
}
|
Als Argument übergebe ich 0b110001001 Referenz 2.5 V intern und gain 10x Wie gesagt das Ganze liefert auch richtige Werte, nur bei 0V eben nicht !
Datum:
Peter M schrieb: > // Den ADC initialisieren und einen sog. Dummyreadout machen > ADCSRA |= (1<<ADSC); > while(ADCSRA & (1<<ADSC)); Hier ADCW 1x auslesen nicht vergessen, sonst ist es kein Dummyreadout! Und wenn dabei result benutzt wird, result anschliessend wieder auf 0 setzen. > // Jetzt 3x die analoge Spannung and Kanal channel auslesen > // und dann Durchschnittswert ausrechnen. > ... > Als Argument übergebe ich 0b110001001 ^^^^^^^^^^^ Das passt nicht, weil es 9 Bits sind. Kontrolliere das bzw. benutze die Makroschreibweise im Aufruf. Mit dem differentiellen ADC habe ich selbst noch nicht experimentiert. Dein Beitrag ist aber ein willkommener Anlass, das in Angriff zu nehmen :)



