hier:
TCCR0=(1<<WGM01)|(1<<CS02)|(1<<CS00); // pr 1024 - ctc => 3600hz
Habe es ausprobiert.
Die ISR von Timer 0 wird jedoch nach wie vor nicht aufgerufen![]()
Code:#include <avr/io.h> #include <avr/interrupt.h> int main(){ DDRC=0xff; DDRA=0x00; DDRD=(1<<PD5); // sound output TCNT0=0; TCNT1=0; TCCR0=(1<<WGM01)|(1<<CS02)|(1<<CS00); // pr 1024 - ctc => 3600hz TCCR1A = (1<<COM1A0); TCCR1B= (1<<WGM12)|(1<<CS10); // pr 1024 - ctc TIMSK = (1<<OCIE1A)|(1<<OCIE0); OCR1A=0; OCR0=200; // *18 = 3600 => 1sekunde DDRB=0xff; PORTB=0xff; sei(); while(1){ } return 0; } ISR(TIMER1_COMPA_vect){ // PORTB=0x0f; } ISR(TIMER0_COMP_vect){ PORTB=0xf0; }
Hi,
wenn Timer1 auf CTC eingestellt ist und Du OCR1A auf 0 setzt, tritt der Interrupt eventuell so oft auf, daß immer nur der Interrupt von Timer1 abgearbeitet wird. Dieser steht in der Interrupt Vector Tabelle weit vor dem OVF Timer 0 und wird deshalb immer als erster dran kommen.
Wie sieht es aus, wenn OCR1A nicht 0 ist?
PS Mit welcher Taktfrequenz läuft der µC? Ist der erste Code vom ersten Beitrag genau der Code mit dem Du auch testest? Wie überprüftst Du, daß Timer0 ISR nicht aufgerufen wird? (LEDs?)
Gruß
Searcher
Geändert von Searcher (24.06.2011 um 11:59 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Lesezeichen