PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATMega ADC-Wert hängt sporadisch....



Oli Krause
12.11.2008, 19:56
Hai zusammen,

ich habe gerade ein folgendes Projekt am laufen: Mit dem ADC des ATMega 64 soll die Stellung eines Potis erfasst werden und dann abhängig davon alle zwei Stunden ein Ausgang eine gewisse Dauer geschaltet werden.
Zur Erfassung Verwende ich die interne Ref mit einem C nach GND. Mit dem Poti ist ein Spanungsteiler gegen den ADC-Eingang aufgebaut.
Um nun alle zwei Stunden das Event auszulösen verwende ich ein Uhrequarz an den dafür vorgesehenen Eingängen ( sorry mir fällt der Name gerade nicht ein ...). Außerdem läuft der TimerInterrupt viertelsekündlich.

Jetzt zu meinem Problem. An sich misste der ADC recht sauber....nur eben nicht immer.
Wenn ich im AVR-Studio einen Breakpoint auf die eigentliche Messroutine setze ( nach der Messung ) dann erfasst der Controller jede Veränderung. Setze ich aber den Breakpoint in den Timerinterrupt, passiert es hin und wieder, daß der Wert hängen bleibt.
Gehe ich noch einen Schritt weiter und lasse den Controller frei laufen, dann ist es eher selten, daß eine Wertveränderung sauber erfasst wird.

Ach so....wahrscheinlich nicht unwichtig: ich betreibe den Controller mit dem internen Oszillator.....laut Fuses auf 8Mhz gesetzt.
Auch mit dem Prescaler habe ich schon einiges ausprobiert....immer wenn ich dachte, daß es jetzt funktioniert, hats im Freerun wieder nicht geklappt.

Schonmal vielen Dank für Eure Ideen !!

Viele Grüße
Oli

Hubert.G
12.11.2008, 21:53
Hast du schon mal versucht mehrere Messungen zumachen und den Gesamtwert zu mitteln?
Ausserdem sollte man die erste Messung wegwerfen.

Gock
13.11.2008, 12:51
Nutzt Du den ADC IRQ, der die Fertigstellung des Messvorgangs anzeigt? Lässt Du ihm also genug Zeit zum Messen?
Hast Du vielleicht ein Störsignal auf der Leitung oder auf der Versorgung?
Schaltest Du am selben Port noch irgendetwas digital?
Ich verstehe nicht, wie Du im Studio einen Breakpoint setzt. Hast Du JTAG?
Gruß

Oli Krause
13.11.2008, 18:37
Hai mittanand,

mittlerweile habe ich das Problem so wie es aussieht gelöst....

Nun zu Euren Fragen:
Hubert: nein hab ich nicht direkt versucht, wäre aber interessant..

Gock: nein, ich verwende keinen Interrupt bei der Fertigstellung der Messung. Ich warte immer bis das ADSC-Bit auf 0 wechselt.
Ja, ich arbeite mit dem JTAG Ice II USB und es funktioniert wunderbar..:--)

Zu meine augendscheinlichen Lösung ( habs nur kurz ausprobiert und hat demnach funktioniert....längere Tests werden heute Abend folgen ):
Bisher habe ich jedesmal, wenn ich die Stellung des Potis abfragen wollte, erneut eine Convertierung gestartet (ADSC =1 ) und anschließend gewartet, bis das Bit wieder 0 war.
Jetzt habe ich das Autostartbit gesetzt und somit den ADC auf Freerun gestartet.
Wenn ich dann in meine Abfrage-Routine komme schaue ich nur noch nach, ob das ADSC-Bit auf Null ist, also eine Konvertierung abgeschlossen ist.
Das wars....
Warum es jetzt scheinbar funktioniert, ist mir nicht wirklich klar. Evtl hat mir der 1/4 sekündliche Timer-Interrupt reingespukt ? Ich weiß es net....

Vielen Dank fürs Zuhören!

Grüße
Oli