Forum: Mikrocontroller und Digitale Elektronik AVR ADC an AREF, Ergebnis = 999, nicht 1023?!


von Paul H. (powl)


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?

von Peter D. (peda)


Lesenswert?

Schaltplan?

Glaskugel sagt, Du treibst große Lasten gegen VCC, d.h. der interne GND 
wird angehoben.

Ich hab mal ne LED-Anzeige gemultiplext und dann wärend der Wandlung die 
LEDs dunkel getastet.

von Karl M. (Gast)


Lesenswert?

Hallo,

Welchen Sinn hat diese Beschaltung, bzw. Konfiguration ?

Paul H. schrieb:
> Die Messung erfolgt
> differenziell zwischen ADC0 (positiv an AREF) und ADC1 (negativ, an
> GND).

von Paul H. (powl)


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.

von Lurchi (Gast)


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.

von Paul H. (powl)


Lesenswert?

Karl M. schrieb:
> Welchen Sinn hat diese Beschaltung, bzw. Konfiguration ?

Dass ich bei Bedarf den internen 20x-Gain nutzen kann. Ich Schalte mal 
eben testweise auf Single-Ended Messung.

von Peter D. (peda)


Lesenswert?

Differentiell habe ich nie probiert. Glaube aber im Datenblatt steht, 
daß die Genauigkeit dann schlechter ist.

von Paul H. (powl)


Lesenswert?

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.

von Karl M. (Gast)


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.

von Paul H. (powl)


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 :-)

von Michael K. (aemkai)


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.

von spess53 (Gast)


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

von Amateur (Gast)


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.

von Michael K. (aemkai)


Lesenswert?

spess53 schrieb:
> Dafür kalibriert man den ADC. Gibts passende AppNotes.

Soweit richtig!
Dass ist dann allerdings kein (u.U. später problematisches)
> rausrechnen

Und wenn VREF falsch ist, dann ist es vmtl. keine Fehlkalibrierung

von Paul H. (powl)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.