Forum: Mikrocontroller und Digitale Elektronik Warum zählt mein AD-Wandler nicht richtig?


von Weihnachtsmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe auf meinen STK-Kit mit ATMega ein Poti angeschlossen und will
die Spannung auf ADC0 messen.
Wenn ich das Poti drehe zählt der aber nicht rauf sondern zeigt einfach
sonst einen Mist an. Ich gebe nur den Low Bereich auf LEDs aus. Mit
allen anderen Microcontroller(kleineren) habe ich das fertig gebracht
nicht aber mit dem ATMega16. Habe ich irgendwo einen Offet oder
irgendwas nicht berücksichtig?

Gruss

Weihnachtsmann

von Tobias (Gast)


Lesenswert?

Poste mal wie du den Poti angeschlossen hast.

Tobi

von Weihnachtsmann (Gast)


Lesenswert?

Zwischen GND und VTG (STK500 Board) und schleifer auf PA0

von ...HanneS... (Gast)


Lesenswert?

Kann es sein, dass du den ADC zu oft ausliest? Denn deine Mainloop hat
keine "Bremse".

...

von Andi (Gast)


Lesenswert?

Setz das Bit ADLAR in ADMUX auf 1, lies das high-Byte aus, invertiere es
und gib es an den LED´s aus.

MfG
Andi

von Weihnachtsmann (Gast)


Lesenswert?

Hallo zusammen

Danke für die Hilfe

Also Ich habe jetzt eine Warteschleife eingebaut das hat nicht
geholfen. Erste nach dem ich das ADLAR-Bit gesetzt habe geht es.

Mein Englisch ist nicht so gut. Verstehe ich es richtig dass mit diesem
Bit "ADC Left Adjust Result" die "Linke" also niederwertigen Bit
zuerst angezeigt werden?


Gruss

Weihnachtsmann

von Weihnachtsmann (Gast)


Lesenswert?

Nachtrag

Leider habe ich festgestellt dass es doch nicht ganz geht.

Hänge ich den AD-Eingang auf GND leutet LED0 also das niederwertigste
Byte. Wenn ich AD-Eingang auf Vcc hänge dann leuchten alle ausser LED0
nicht.

von Andi (Gast)


Lesenswert?

Türlich geht das!
Wenn Du von 10 Bits nur die oberen 8 Bits anzeigen läßt und ein
ADC-Wert von 1019 erzeugt wird (1111111011) ist das in Ordnung.
Häng Dir doch mal einen Spannungsteiler mit Widerstand und Poti an den
ADC-Pin.

MfG
Andi

von Weihnachtsmann (Gast)


Lesenswert?

Irgendwie verstehe ich im Moment gar nichts mehr.


Der Wandler hat 10 Bit Auflösung Wenn ich den AD-Wandler auf Vcc hänge
müssen alle 10 Bit eine 1 anzeigen. Also:

ADCL = 11111111
DACH = 00000011

Mich interessieren in erste Linie mal die unteren Bits von Bit0 -Bit7

von Hauke Sattler (Gast)


Angehängte Dateien:

Lesenswert?

Also zuerst sehe ich in deinem Code, das du ADFR (=ADATE) gesetzt hast.
Du willst also anscheinen den ADC im "Free Running Mode" laufen
lassen. Dazu mußt doch jedoch die Trigger Quelle im SFIOR Register
richtig auswählen.
Ich selber habe mit frei laufenden ADC bisher keine so guten
Erfahrungen gemacht. Deshalb starte ich den ADC immer "von Hand"
(sprich ADFR=0)

Weiterhin sehe ich das du das erst die ADC Wandlung startest und dann
erst ADMUX setzt. Das ist GIFT für den ADC. Man muß es andersherum
machen.

Nach dem Setzen von ADMUX hat es sich als praktisch erwiesen vor der
wirklichen Wandlung erst noch eine Dummywandlung durchzuführen (deren
Ergebniss dann verworfen wird).

Weiterhin mußt du abwarten ob der ADC schon fertig ist bevor du
ausließt.
Das prüfe ich immer damit ob das ADIF bit in ADCSRA gesetzt ist.

Da du weder das ADIE bit gesetzt hast noch den ADC Interuptvector
gesetzt hast ist das "SEI" auch überflüssig.

cu
Hauke

P.S. der Code ist noch nicht getestet und deshalb ohne Gewähr

von Weihnachtsmann (Gast)


Lesenswert?

Das Programm hat zwar noch einen schreibfehler funktioniert jetzt aber
einwandfrei. Danke an alle


Gruss

Weihnachtsmann

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.