Nach veilen Versuchen weißich nicht mehr weiter.... Ich will 2 AD-Kanäle einlesen, bekomme aber keine Werte, weil das Programm (siehe Anhang) in der Zeile "sbis ADCSR,ADIF ;Warten bis Wandlung" hängen bleibt. Kann mir da jemand sagen wo da das Problem liegt? Danke schonmal.... Gruß Danny
Hallo Danny Du fragst doch in deiner "Fertig" Schleife das ADIE ab. Wird aber nur gesetzt, wenn auch globalInterrupts frei gegeben werden. Frag doch einfach nach dem Start de AD Wandlung das ADCSR,ADSC ab. Wird doch nach Ende der Wandlung auf Null gesetzt. "ADSC ADC Start Conversion Mit diesem Bit wird ein Messvorgang gestartet. In der frei laufenden Betriebsart muss das Bit gesetzt werden, um die kontinuierliche Messung zu aktivieren. Wenn das Bit nach dem Setzen des ADEN-Bits zum ersten Mal gesetzt wird führt der Controller zuerst eine zusätzliche Wandlung und erst dann die eigentliche Wandlung aus. Diese zusätzliche Wandlung wird zu Initialisierungszwecken durchgeführt. Das Bit bleibt nun so lange auf 1, bis die Umwandlung abgeschlossen ist, im Initialisierungsfall entsprechend bis die zweite Umwandlung erfolgt ist und geht danach auf 0. " MFG Dieter
bleibts in der Realität hängen oder in der Simulation? War zumindest früher so, dass der A/D-Wandler und der Komparator im AVR-Studio nicht unterstützt wird, wie es heute ist, weiss ich gar nicht - muss direkt mal nachsehen.
Hi, mit dem befehl "sei" enable global interrupts. Du solltest dir den Befehlssatz vom AVR downloaden. Mfg Dirk
Hallo Wenn du Interrupts verwendest, solltest du doch auch die Interruptvektoren definieren. Sonst springt dein Programm doch auf Adresse 09 und läuft da fröhlich weiter. Schau mal unter http://www.mikrocontroller.net/tutorial/interrupts.htm MFG Dieter
Nachtrag. Sieht aber schön im AVR Studio, wenn du per Hand das ADIF Flag setzt, dann springt er an Adresse 09 und macht da weiter. MFG Dieter
Muß natürlich anstatt 09, 0E lauten. 15 0x00E ADC AD-Wandlung abgeschlossen MFG Dieter
O.k. sehe ich ein. Da ich erst einsteige kann mir bestimmt jemand verraten wie ich das mache? Komme mit der Beschreibung im Tutorial nicht ganz klar. (Sowas wie Interrupts für Dummies...) Danke euch schonmal
Also dann müsste ich: .org ADC rjmp fertig? Dann bleibe ich doch auch hängen,oder nicht. Oder anderes Sprungziel?
Hallo Schau mal in die 8535.def rein. Da sind die Interrupt Adressen mit Namen abgelegt. Auszug .equ ADCCaddr=$00E ;ADC Conversion Complete Interrupt Vector Address Also mußt du schreiben entweder ORG 0x00e rjmp adc_int // zum Beispiel oder org ADCCaddr rjmp adc_int Dann macht er bei einem Interrupt deines AD Wandlers eine Sprung nach ADC_int. Die könnte dann so aussehen. ; Interrupt Routine. Wird ausgeführt, wenn AD Wandlung beendet ist. adc_int: in hexl,ADCL ;lowbyte auslesen in hexh,ADCH ;hibyte auslesen sts $60,hexl ;low byte speichern sts $68,hexh ;high byte speichern reti ;Rücksprung aus Interrupt MFG Dieter
Allen Paletti (hoffe ich). Werde das morgen gleich mal testen. Danke für deine Hilfe! Gruß Danny
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.