ADC in ATMega64 wandelt nicht korrekt ???

Gast #407243
Lesenswert?

Hallo.

Ich möchte eine Temperatur mit meinem ATMega64 messen. Ich habe dazu
einen Spannunsgteiler aufgebaut mit einem 2,7k Ohm Widerstand und einem
KTY-81. Ich messe die Spannung die über dem KTY-81 abfällt.

Ich habe zunächst auf einen Experimentierbrett mit einem ATMega32
gearbeitet und dort den ADC programmiert und konnte die richtige
Temperatur messen (Ausbage über ein LCD, Temperaturvergleich mit
anderem digitalen Messgerät).

Jetzt habe ich meine Platine fertig und arbeite mit einem ATMega64.
Nach der Einbindung meiner Routinen für den ATMega32 ist die gemssene
Temepratur um ca. 5-8°C zu hoch.

Ich habe schon alle notwendigen Register überprüft und entsprechende
Änderungen durchgeführt. Ohne Erfolg.

Ist der ADC eventuell beschädigt?

Kann mit jemand einen Tip geben?
Danke euch.

Stefan
Gast #407250
Lesenswert?

>Und wo könnte denn so ein Offset herkommen?

Von der internen Referenz !
Schau doch einfach mal ins Datenblatt, da steht drin wie groß der
Offset ist.

Wenn du als Referenz die selbe Spannung verwendest, die auch der KTY
Spannungsteiler bekommt, dann kompensiert sich der Fehler.
Ein Beispiel:
Spannung am KTY ist halbe Betriebsspannung, also 2,5V
am ADC liegen also 2,5V an, der ADC hat 5V als Referenz. Der gemessene
Wert liegt also bei halbem Werte Bereich, also bei etwa 512.

Jetzt bricht die Betriebsspannung zusammen, beträgt nur noch 3V
Am KTY liegen jetzt 1,5V an, der ADC bekommt aber auch nur 3V, der
gemessene Wert liegt also wieder in der Mitte, etwa bei 512.
#407251
Lesenswert?

Lt. Datenblatt kann int. Ref. zwischen 2,3V und 2,7V liegen, das ist u.
U. schon ein Haufen Holz. Ohne Kennntnis der genauen Referenz ist
natürlich jede Messung für die Katz. Du könntest natürlich die Ref. so
"hinschätzen" das deine Messung stimmt, sofern nicht andere Fehler
noch eine Rolle spielen. Schon mal dran gedacht, sich eine
Präzisions-Referenz zu besorgen? Ist im ersten Moment a bisserl teuer,
kann man aber immer wieder gebrauchen. Alles hängt natürlich von deinen
Genauigkeits Vorstellungen ab.
Gast #407252
Lesenswert?

Hallo,

die Lösung ist, daß Du eine Referenzmessung für die Referenzspannung
durchführst:

Bedigung ist, daß man eine echte Referenz im System hat (z.B. 5V
Spannungsregler.

dann geht das so:

1) Du nimmtst für eine Messung die 5V als Referenzspannung und
schaltetst die AVR-Referenz auf einen AD-Wandler durch
2) Der gewandelte AD-Wert sei ADWrefmess
3)Du schaltest auf die AVR-Referenz wieder um
4) danach kannst Du mit dem AD-W die Spannungen messen:

Uad=(ADW*ADWrefmess*VccAVR)/(ADWmax*ADWrefmessmax)

Dabei ist

ADW: der AD-Wert der Wandlung
ADWrefmess: Das Ergebnis der Referenzmmessung von 2)
VCCAVR: Die Versorgungsspannung des AVR, die bei 1)und 2) als
AVR-AD-Referenzspannung genutzt wirde
ADWmax: der maximale Wert, den eine Wandlung ausgegeben werden kann:
Bei 8 Bit: 255; Bei 10 Bit: 1023
ADWrefmessmax: der maximale Wert, der bei der Referenz-Wandlung (bei 1)
und 2)) ausgegeben werden kann:
Bei 8 Bit: 255; Bei 10 Bit: 1023

Gruß

Wolfgang
--
www.ibweinmann.de
Brushless Motor Control
Gast #407254
Lesenswert?

Sind die REFS0 und REFS1 - Bits benauso wie beim Mega32? (Register
ADMUX)? Bin da gestern auch drüber gestolpert, hatte nach der
Portierung versehentlich die Referenz-Betriebsart 'Reserved'
eingestellt, brachte einen ähnlichen Effekt!
#407257
Lesenswert?

Die Ungenauigkeit der internen REF ist egal, denn sie kürzt sich in
dieser Anwendung raus, wenn man die Beschaltung geschickt genug wählt.

An welcher Spannungsquelle hast Du den Spannungsteiler angeschlossen?
Wichtig ist, dass der Spannungsteiler von derselben Spannungsquelle
gespeist wird, aus der der ADC auch seine Referenz bezieht. Die Höhe
der Spannung ist egal. Sinnvoll ist, den Spannungsteiler an AVCC
anzuschliessen und AVCC dann als Referenz zu wählen.

Entscheidend ist, dass Dich das Verhältnis von R-kty und R-2k7
interessiert.

Gruß, Stefan
Gast #407258
Lesenswert?

Der Anschluss des Spannungsteilers war wirklich zunächst an einem
anderen Stromkreis angeschlossen (GND ist für beide Stromkreise
gleich). Aber auch nach dem Anschluss des Spannungsteilers an die
gleiche Spannung VCC des Controllers brachte keine Änderung.

Da ich die Fehlersuche nun satt hatte, habe ich den Controller
getauscht. Und siehe da, der neue mist die Spannung richtig und somit
auch die Temperatur.

Fehler behoben. Frag ich mich nur, wie der ADC bechädigt werden kann?

Gruß
Stefan
Gast #407259
Lesenswert?

Hast du den eingang gegen Überspannung abgesichert? Also mind. den
Widerstand reingemacht damit die internen Dioden nicht überlastet
werden? Vielleicht ist das ganze auch bei der AVCC passiert.
#407261
Lesenswert?

> Der Anschluss des Spannungsteilers war wirklich zunächst an einem
> anderen Stromkreis angeschlossen (GND ist für beide Stromkreise
> gleich). Aber auch nach dem Anschluss des Spannungsteilers an die
> gleiche Spannung VCC des Controllers brachte keine Änderung.

Du sollst den Spannungsteiler auch nicht an Vcc des Controllers
anschliessen sondern an ARef. Dort stellt dir der Controller
die Referenzspannung zur Verfügung die er selbst für die
Messung benutzt.

Wenn also an deinem ADC Eingang dieselbe Spannung anliegt,
wie sie an ARef herauskommt, dann meldet der ADC den Wert
1024. Das ist völlig unabhängig davon, wie hoch den nun
ARef tatsächlich ist.

> Fehler behoben. Frag ich mich nur, wie der ADC bechädigt werden
> kann?

Du hast keinen Fehler behoben, da gar keiner vorhanden ist,
ausser dem dass du die Beschaltung des Spannungsteilers falsch
vornimmst.
Ich bin 100% sicher, dass der ADC nicht beschädigt ist.
Gast #407262
Lesenswert?

Wie wäre es denn, einfach mal eine (bekannte) Spannung an den ADC-Pin zu
legen und zu messen?

>Wenn also an deinem ADC Eingang dieselbe Spannung anliegt,
>wie sie an ARef herauskommt, dann meldet der ADC den Wert
>1024. Das ist völlig unabhängig davon, wie hoch den nun
>ARef tatsächlich ist.

Es sind nur 1023...(aber so kleinlich wollen wir nicht sein ;)

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