ATMega8 - Problem mit ADU

OP #1578446
Lesenswert?

Habe ein Problem mit dem ADU beim ATMega8.

Habe einen DMX Transceiver gebaut um mit ihm LED Scheinwerfer 
anzusteuern.
Zum Einstellen der Helligkeit und der Geschwindigkeit des Farbwechsels 
habe ich zusätzlich 2 Potis genommen.
Ich will die beiden Spannungswerte der Potis (~0 - 5V) digitalisieren 
(mittels ADU) und zur Steuerung der Helligkeit und der Geschwindigkeit 
des Farbwechsels verwenden.
Wenn ich nur einen der beiden ADU Eingänge verwende, passen die Werte. 
Aber wenn ich beide Eingänge auslese, vermischen sich die Ergebnisse und 
es kommt ein Blödsinn raus.
Hab schon diverse Methoden probiert, aber noch keine Lösung gefunden.
- Hab schon probiert den ADU jedes Mal zuerst zu starten und nach der 
Konvertierung wieder zu beenden
- Hab schon probiert, vor der Konvertierung ein Dummie-Readout zu machen 
und danach den Mittelwert aus 4 Ergebnissen zu bilden

Ich mache die Auswertung mittels Polling, weil ich vermeiden will, dass 
der ADU Interrupt mit dem Interrupt des USART (DMX) konguriert.

Der Code im Anhang ist vereinfacht, habe alle DMX betreffenden Teile 
herausgenommen, da ich hoffe, dass so jemand schneller einen Fehler 
entdeckt.

Wäre sehr sehr dankbar wenn mir bei dem Problem jemand helfen könnte.
Angehängte Dateien:
OP #1578598
Lesenswert?

Diese Version hab ich schon probiert.
Es ändert sich nichts.

Schaltplan:
hab zwei 10k Potis am ADC0 und am ADC1 eingang.
Poti liegt an 0 und +5V, Schleifer auf µC

Des komische ist, beide Potis sind angeschlossen, in dem Modus in dem 
nur ein Kanal ausgelesen wird, funktionierts ohne Probleme. Erst wenn 
ich den zweiten Kanal zusätzlich auslesen will kommt nichts gescheites 
raus.
Gast #1578682
Lesenswert?

Lies hier nochmal nach, wie man das ADC-Register ausliest:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29

Auf den ersten Blick sehe ich nur, dass du lediglich den ADCH ausliest. 
Mal davon abgesehen, dass ADCH dir nur die Auflösung / 8 gibt, musst du 
beide Register auslesen.

Von der Beschaltung sollte es so funktionieren. Wo setzt du deine 
Referenzspannung?
#1578697
Lesenswert?

LordZiu schrieb:

> Auf den ersten Blick sehe ich nur, dass du lediglich den ADCH ausliest.
> Mal davon abgesehen, dass ADCH dir nur die Auflösung / 8 gibt, musst du
> beide Register auslesen.

Nein. Muss er nicht.
ADCH muss auf jeden Fall gelesen werden. ADCL nur dann, wenn man am Wert 
interessiert ist (und wenn das der Fall ist, dann muss ADCL vor ADCH 
ausgelesen werden. ADCL lesen verriegelt den ADC Wert gegen 
Veränderungen, ADCH lesen hebt die Verriegelung wieder auf). Da er ADLAR 
gesetzt hat reicht es nur ADCH zu lesen.

Ich seh im Code allerdings auch nichts.
OP #1578745
Lesenswert?

Könnte es sein, dass der Interrupt des USARTs die Konvertierung 
beeinträchtigt?
Allerdings wüsste ich dann gern, warum es funktioniert, wenn ich nur 
einen Kanal auslese.

Ein Freund hat gemeint, dass eventuell eine Verknüpfung zwischen den 
beiden Kanälen sein könnte, weiß jemand was dazu?
#1578946
Lesenswert?

Dominik W. schrieb:
> Was für ein Prescaler wär bei 16 MHz empfehlenswert?

Datenblatt nachsehen.
Da steht drinnen, in welchem Ferquenzbereich der ADC benutzt werden 
soll. Du hast deine Taktfrequenz, weist in welche Frequenzbereiche du 
kommen musst und suchst dir davonausgehend den dafür notwendigen 
Prescaler.

> Warum funktionierts dann, wenn ich nur einen auslese?

Wahrscheinlich deswegen, weil du dann zwischendurch den Kanal nicht 
wechselst. Die Sample&Hold Stufe wird sich dann irgendwann auch so auf 
den richtigen Wert einstellen. Schlimmstenfalls erst nach dem 2.ten oder 
3.ten Ausleseversuch.
Gast #1578996
Lesenswert?

Hi

>Der Multiplexer ist das Problem, vor allem bei der Abtastrate.

Nein, die Sample&Hold-Stufe. Irgendwann reicht die Zeit nicht mehr, um 
den Kondensator unzuladen.

>Ich nutze den ATmega ADC generell nur per Interrupt, und wenn ich den
>ADMUX umschalte, warte ich erstmal 1 - 4 ADC Werte, bis ich sie nutze.

Dann kannst du den ADC auch gleich langsamer laufen lassen und es klappt 
dann auch bei jeder Messung.

>Was für ein Prescaler wär bei 16 MHz empfehlenswert?

Bei 16MHz: 128

MfG Spess
#1579187
Lesenswert?

spess53 schrieb:

>>Der Multiplexer ist das Problem, vor allem bei der Abtastrate.
>
> Nein, die Sample&Hold-Stufe. Irgendwann reicht die Zeit nicht mehr, um
> den Kondensator unzuladen.

stimmt ja, hätte schreiben sollen "das multiplexen der S/H"...
egal, ich nehme lieber höhere Abtastrate und schmeiße die ersten Werte 
weg, betreibe dafür dann oversampling.
Gast #1579239
Lesenswert?

also ich nehme jeden Wert, auch nachdem ich den MUX umgeschaltet habe 
und es funktioniert,
ich habe auch im Datenblatt nichts gefunden dass es nicht funktionieren 
sollte, man sollte natürlich das Datenblatt beachten beim Umschalten
Gast #1579387
Lesenswert?

Hi

>Hab jetzt den Prescaler auf 64 eingestellt und es FUNKTIONIERT!!!

Freut mich.

>Hab alles probiert und an alles gedacht, außer an die Geschwindigkeit!

Wenigstens wirst du das nicht so schnell wieder vergessen.

MfG Spess

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