Forum: Mikrocontroller und Digitale Elektronik ADC in ATMega64 wandelt nicht korrekt ???


von StefanKM (Gast)


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

von Benedikt (Gast)


Lesenswert?

Was verwendest du als Referenzspannung ?

von StefanKM (Gast)


Lesenswert?

Interne Referenz von 2,56V. VREF ist über Kondensator gegen GND
gepuffert.

von Michael U. (Gast)


Lesenswert?

Hallo,

die interne Referenz ist zwar recht stabil, hat aber durchaus nicht
unbedingt 2,56V. Im Datenblatt steht der Bereich, den sie
exemplarabhängig haben kann.

Gruß aus Berlin
Michael

von Der T. (Gast)


Lesenswert?

Ist die Temp. immer genau den selben wert zu hoch gemessen?
(also stabiler Offset?)

Wenn ja:
Wie genau ist der Widerstand?

Lösung: Differenz entgegenrechnen!?! ;)

von StefanKM (Gast)


Lesenswert?

Das stimmt, jedoch hatte ich am ATMega32 auch die interen Referenz
verwendet ohne dass die Temperatur wesentlich zu hoch war.

Stefan

von StefanKM (Gast)


Lesenswert?

Ob der Offset stabil ist oder nicht, weiß ich nicht, da ich bisher noch
keine Temperaturrampe gefahren bin und gemessen habe.

Und wo könnte denn so ein Offset herkommen?

von Benedikt (Gast)


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.

von Jörn P. (jonnyp)


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.

von Wolfgang (Gast)


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

von StefanKM (Gast)


Lesenswert?

Vielen Dank für Eure Tips. Ich werde mal einiges versuchen und bei
weiteren Problemen wieder zurück kommen.

Also vielen Dank nochmal.
Stefan

von Sonic (Gast)


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!

von StefanKM (Gast)


Lesenswert?

Werd ich überprüfen. Danke für den Tip
Stefan

von StefanKM (Gast)


Lesenswert?

REFS0 und REFS1 sin didentisch zu ATMega32 genau wie der Rest des ADC.
Hab meinen Fehler bisher jedoch nicht gefunden.

von Stefan K. (_sk_)


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

von StefanKM (Gast)


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

von Thomas O. (Gast)


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.

von StefanKM (Gast)


Lesenswert?

Nein hab ich nicht vorgesehen!?
Sollte ich vielleicht noch vorsehen!?

von Karl heinz B. (kbucheg)


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.

von inoffizieller WM-Rahul (Gast)


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

von Marian (Gast)


Lesenswert?

ist der Eingang des ADC richtig konfiguriert. Ich vermute pull-up
Widerstand am ADC-Pin. Was zeigt der ADC, wenn Input auf Masse?

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.