Warum zählt mein AD-Wandler nicht richtig?

Gast #164239
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
Angehängte Dateien:
Gast #164244
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
Gast #164245
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.
Gast #164246
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
Gast #164247
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
Gast #164248
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
Angehängte Dateien:

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