AVR ADC an AREF, Ergebnis = 999, nicht 1023?!

OP #4229298
Lesenswert?

Hi.. nächstes Problem. Ich habe hier einen ATtiny26 und möchte mit dem 
ADC ein Audiosignal auf AREF/2 einkoppeln. Das funktioniert auch schon 
recht gut. jedoch ist mir aufgefallen, dass der Mittelwert dann bei 498 
liegt und nicht, wie angenommen bei 511..512.

Jetzt hab ich testweise den ADC -Eingang mal auf GND gelegt. Sauber 0, 
die ganze Zeit. Also kein Offset-Fehler. Wenn ich den ADC-Kanal jedoch 
an AREF anschließe bekomme ich immer Werte von 998..999. Ja, AREF, nicht 
AVCC oder sonstiges. Warum nicht 1023? Montags-Produkt? Wieder so ein 
ATtiny26-Bug? Dürfte ja eigentlich nicht sein, eine solch große 
Abweichung.

Der Tiny läuft mit 8Mhz int. Oszillator. Am ADC ist die Interne 
Spannungsreferenz 2.56V mit ext. Kondensator aktiviert. ADC-Clock 
Vorteiler ist 64, ergibt einen ADC-Takt von 125kHz. Die Messung erfolgt 
differenziell zwischen ADC0 (positiv an AREF) und ADC1 (negativ, an 
GND).

ADCSR = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
ADMUX = (1 << REFS1) | (1 << REFS0) | 0b01100;

Jemand eine Idee?
OP #4229308
Lesenswert?

Guter Tipp! Trifft leider nicht zu. Bevor ich jetzt den Schaltplan 
zeichne tuts auch eine Beschreibung: Der ATtiny26 ist quasi nackt. Da 
hängt nur I2C dran, und das ist zum Zeitpunkt der ADC-Messung inaktiv.

Ansonsten ist auch alles schön mit 100n-Kerkos versehen. Zwischen den 
beiden VCC und GND Anschlüssen. Zwischen AREF und GND. AVCC ist über 
100µH an VCC angekoppelt. Das Rauschen ist mittlerweile auch <1LSB.

ADC1 ist direkt über eine Steckbrücke mit dem nächstgelegenen GND 
verbunden. ADC0 über eine Steckbrücke mit AREF.

Mit dem Multimeter messe ich übrigens 2.85V an AREF. Bisschen viel.
Gast #4229312
Lesenswert?

Die differentielle Messung hat zusätzle Fehler. Insbesondere kann man da 
einen negativen Offset haben. Also statt 0 würde eigentlich so etwas wie 
-20 herauskommen, was der ADC aber so nicht kann und dann 0 ausgibt.

Auch durch Störungen, die mit der Auslösung des ADC syschron sind, kann 
man einen zusätzlichen Fehler erhalten.
Gast #4229322
Lesenswert?

Aha, dann bin ich beruhig.

Evtl. solltest Du auf einen externen OPV zurückgreifen, dann kann man 
einmal die beiden Fehler erfassen und immer heraus rechnen.

Paul H. schrieb:
> Ah tatsächlich! Mit der Single-Ended-Messung bekomme ich als
> Ergebnis
> brav 1023. Ich werde jetzt mal bei verschiedenen Eingangsspannungen
> zwischen Single-Ended und Differential umschalten und vergleichen.
OP #4229341
Lesenswert?

Externen Opamp wollte ich vermeiden und das Projekt so simpel wie 
möglich halten. Die differenzielle Messung brauch ich eigentlich gar 
nicht. Die Gain-Modi sind aber nur da verfügbar.

Ich hab eben mal einen Kanal single-ended und einen differential messen 
lassen und mit einem Trimmer zwischen GND und AREF rumgestellt. Es 
handelt sich hier um einen simplen Verstärkungsfehler. Der Gain ist 
nicht 1x sondern 0,97x oder so. So lange ich das weiß kann ichs 
rausrechnen :-)
#4229844
Lesenswert?

Paul H. schrieb:
> Der Gain ist nicht 1x sondern 0,97x oder so. So lange ich das weiß kann
> ichs rausrechnen :-)
Hoffentlich ist der Gain-Fehler bei jedem ATtiny gleich, sonst suchst du 
dich dämlich wenn der mal kaputt geht und du einen anderen nimmst.

Paul H. schrieb:
> Mit dem Multimeter messe ich übrigens 2.85V an AREF. Bisschen viel.
Da solltest du eher die Ursache suchen.

Paul H. schrieb:
> verbunden. ADC0 über eine Steckbrücke mit AREF.
Es ist vielleicht auch nicht die beste Idee, die interne Referenz als 
ADC-Eingang zu missbrauchen.
Gast #4229854
Lesenswert?

Hi

>Hoffentlich ist der Gain-Fehler bei jedem ATtiny gleich, sonst suchst du
>dich dämlich wenn der mal kaputt geht und du einen anderen nimmst.

Dafür kalibriert man den ADC. Gibts passende AppNotes.

MfG spess
Gast #4229882
Lesenswert?

In den Tiefen des Handbuchs steht:

Voltage on Any Pin except RESET with Respect to
Ground ..............................-0.5V to VCC + 0.5V

Also sollte es mit der "Subtraktion“ von Spannungen nicht weit her sein.
OP #4230036
Lesenswert?

Michael K. schrieb:
> Und wenn VREF falsch ist, dann ist es vmtl. keine Fehlkalibrierung

Das Datenblatt sagt:
VINT Internal Voltage Reference min:2.4 typ:2.7 max:2.9
Liegt also noch im Rahmen



Michael K. schrieb:
> Es ist vielleicht auch nicht die beste Idee, die interne Referenz als
> ADC-Eingang zu missbrauchen.
ADC0 ist der Eingang, AREF der "Ausgang". Wird übrigens laut Appnote bei 
der Kalibrierung ebenso praktiziert ;-)

Im Projekt selbst wird eh ein Tiny261 zum Einsatz kommen. Mal schauen, 
wie der sich so verhält.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren