Forum: Mikrocontroller und Digitale Elektronik AD-Wandler bei ATMega8


von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich versuche heraus zu finden wie man den AD-Wandler im ATMega8
benutzt.
Anhand der Informationen im Datenblatt:
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf (seite
193 bis 205)
und der, die ich hier im Forum gefunden habe:
http://www.mikrocontroller.net/forum/read-1-180921.html#181079

habe ich ein kleines Programm geschrieben (sehe Anhang)und im Emulator
laufen lassen.

Das Problem ist nun, dass laut dem Datenblatt wenn die Konversion
beendet ist, wird das ADIF-Flag auf 1 gesetzt. Deshalb wartet das
Program bis ADIF-Flag gesetzt ist. Dies passiert aber nicht egal wie
lange das Programm läuft.

Ich kann leider nicht erkennen wo das Problem liegt.
Wäre dankbar für jede Hilfe.

von Christian Zietz (Gast)


Lesenswert?

Unabhängig von Deinem Code: Der Simulator des AVR-Studios simuliert den
AD-Wandler nicht. D.h. das ADIF-Bit wird nie gesetzt.

Christian

von Christian Zietz (Gast)


Lesenswert?

Hoppla! Ich sehe gerade: Im Simulator des AVR-Studio 4.11 Build 406 SP2
wird ADIF laut Doku doch gesetzt. In Version 4.10 war das noch anders?
Welche Version benutzt Du?

Christian

von Martin (Gast)


Lesenswert?

Danke für die Antwort.

Ich dachte, der AvrStudio-Simulator würde so zimlich alles was im
Microkontroller vorgeht realitätsgemäss simulieren. Ich habe dafür
extra  windows wieder installiert.Und im IO-View gibt es auch dieses
ADIF-Flag.

Ich benutze noch die Version 3.56.
Ok ich versuche AvrStudio upzudaten, weil ich den ADWandler ohne den
Simulator nicht zum laufen bringe. Da gibt es zu viele Sachen die ich
nicht verstehe und einen funktionierenden AD-Wandler Asm-Code habe ich
leider nicht gefunden.

von Christian Zietz (Gast)


Lesenswert?

Du musst ohnehin manuell eingreifen, um die gewünschten Werte in ADCH
und ADCL zu laden (der Simulator weiß schließlich nicht welche Spannung
Du gerne am Eingang hättest). Dabei kannst Du auch gleich das ADIF-Bit
setzen.

CU Christian

von Hauke Radtki (Gast)


Lesenswert?

um wirklich zu sehen, was im controller vorgeht, brauchst du nen JTAG
debugger oder so... aber soweit ich weiss, geht das erst ab dem mega16
....(oder 32 ... bin mir nicht sicher)

von Martin (Gast)


Lesenswert?

Mein Code Funktioniert leider weder im Simulator noch in einem  echten
Mikrocontroller. So komme ich leider nicht weiter.

Weiss jemand wo ein Beispiel-AsmCode für AD-Wandler in einem ATMega8
gibt?

von Hauke Sattler (Gast)


Lesenswert?

Hi ich glaube ich habe den Fehler gefunden

Du mußt das ADIF flag beim starten der Umwandlung löschen.
Nun kommt das besondere. Das ADIF Flag wird gelöscht indem man eine
EINS drüberschreibt.

du hast (an zwei Stellen) geschrieben:
ldi  r16, (1<<ADEN)|(1<<ADSC)|(0<<ADFR)|(0<<ADIF);Konversion starten
ADEN=1 ADSC=1

wenn du das mit:
ldi  r16, (1<<ADEN)|(1<<ADSC)|(0<<ADFR)|(1<<ADIF);Konversion starten
ADEN=1 ADSC=1
austauscht sollte es funktionieren.

Zum Simulieren würde ich VMLAB nehmen. Das setzt die Simulation sehr
gut um.

cu
Hauke

P.S.
das "ldi r16,0x00" kann man weglassen.

von Martin (Gast)


Lesenswert?

Danke für die hilfe.

>Du mußt das ADIF flag.....
Da kommen wir der Sache schon näher.Auf der Seit 204 im Datenblatt
steht das auch so.
Die LEDs am PortB reagieren jetzt auf die Spannung die an den ADC0-Pin
angeliegt wird.

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.