Hallo zusammen,
ich mache im Moment etwas mit vielen Timern und Interrupts. Der Overflow-Interrupt funktioniert auch, Code:
Das "POS_LED_TOGGLE ();" kann ich wunderbar auf dem Oszi sehen, die Zeiten stimmen auch (83µs)Code:ISR(TIMER1_OVF_vect) // Timer1 Überlauf { TCNT1 = 64202; //64202 vorladen POS_LED_TOGGLE (); }
Jetzt soll der ADC bei jedem Überlauf gestartet/getriggert werden und wenn er fertig ist soll er einen Interrupt auslösen:
Das LED_TOGGLE hab ich aus dem Timer1-Interrupt rausgeschmissen, dafür hier hinein gepackt:Code:void POS_LDR_INIT (void) { ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIF); // ADC enable + triggern enable + interrupt wenn fertig SFIOR |= (1 << ADTS2) | (1 << ADTS1); // triggern bei timer1 überlauf sei(); }
Ich hab aber auf dem Oszi ein dauerhaftes high (<- kommt vom INIT). Nix Rechteck...Code:ISR(ADC_vect) { POS_LED_TOGGLE (); }
Weis jemand warum? Hab ich irgend ein Register beim ADC vergessen?
Viele Grüße und vielen Dank schonmal
-schumi-
PS: µC = Atmega32, Compiler = AVR-GCC
EDIT: Hier gibts alle Sources als Zip: http://dl.dropbox.com/u/19005544/RN-ADC-Interrupt.zip







Zitieren

Lesezeichen