Forum: Mikrocontroller und Digitale Elektronik ATTiny25 - ADC liefert nach Kanalwechsel immer 0


von ATTiny25 (Gast)


Lesenswert?

Hallo

Ich möchte für ein Netzgerät eine Digitale Strom und Spannungsanzeige 
bauen.
Dazu messe ich mit einem ATTiny25 sowohl den Ausgang als auch über einem 
Shunt und zeige das Ergebnis auf einer 7-Segment-Anzeige an.

Da die Anzeige nicht Platz für beides bietet, muss ich die Anzeige per 
Schalter umschalten. Dazu habe ich einen Doppel-Umschalter. Je nach 
Schalterstellung wird V_out oder GND an den ADC3 gelegt. Der ADC2 liegt 
konstant an V_Shunt. Ich nutze die differentiellen Eingänge. zwischen 
V_out und V_Shunt kann ich die Ausgangsspannung messen, zwischen V_Shunt 
und GND (mit Verstärkung x20 und Polarität vertauscht) den 
Ausgangsstrom.
(Der zweite Schalter signalisiert dem µC, was grade gemessen werden 
soll).

Soweit so gut. Das klappt an sich auch sehr gut, nur muss ich jetzt noch 
an ADC1 ein Signal messen. Dazu schalte ich auf den ADC1 um, setze die 
Referenzspannung auf VCC und messe den Pin. Das funktioniert auch noch 
super. Das Problem ist jetzt aber das zurückschalten. Dazu setze ich die 
Referenzspannung auf AREF und wähle ADC2-ADC3 aus. Nur liefert er mir 
dann immer 0.

Ich hab das Problem schon eingekreist, wenn ich "SetMeasureADC1()" 
auskommentiere, kann ich wunderbar die Spannung zwischen den beiden 
Eingängen messen, das Ergebnis stimmt auch soweit (Logischerweise 
liefert die Messung dann murks, da andere Channel ausgewählt sind). 
Sobald ich die Funktion einkommentiere, gibt er mir wieder 0 aus. Und 
zwar wirklich 0, der Wert schwankt auch kein bisschen. Auch vor dem 2ten 
Messen ADMUX komplett auf 0 zu setzen und neu zu initialisieren scheint 
nichts zu bringen.

Code: http://pastebin.de/23218

(Der Interrupt ist absichtlich leer, er soll mich nur aus dem 
Schlafmodus wecken. Das Auslesen geschieht dann in ReadADC(). Sobald ich 
in den Noise-Reduction-Sleepmode wechsle, startet die Messung 
automatisch).

Er hängt sich auch nicht auf, das Display wird weiter aktualisiert. 
Folglich muss er aus dem Schlafmodus wieder raus kommen, was nur durch 
ein Interrupt funktioniert. Der ADC scheint also zu laufen. Nur warum 
liefert er 0? Bestimmt so ein ganz blöder Flüchtigkeitsfehler :/

MfG ATTiny25

von Hubert G. (hubertg)


Lesenswert?

In meinem Datenblatt Seite 130 Punkt 19.5.2 steht das man nach AREF 
wechsel die erste Conversion verwerfen soll.

von ATTiny25 (Gast)


Lesenswert?

Hey, danke, es funktioniert :)

Ich wusste zwar dass der ADC n paar Takte länger dauert nach dem 
wechseln, aber dass das Ergebnis gleich 0 ist :/

Naja danke dir nochmal :)

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.