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.