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.
Unabhängig von Deinem Code: Der Simulator des AVR-Studios simuliert den AD-Wandler nicht. D.h. das ADIF-Bit wird nie gesetzt. Christian
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
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.
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
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)
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.