Franky55555
14.06.2011, 17:42
Hi!
Ich will bei einem ATMega 16 (läuft mit 16mhz) den CTC modus des Timer 1 verwenden.
Folgenden Quellcode habe ich:
Timer-Init:
TIMSK=(1<<OCIE1A); //Compare Interrupt einschalten
TCCR1B=(1<<CS11); //vorteiler: 8
TCCR1B|=(1<<WGM12); //CTC-Modus
TCNT1H=0; // Timer Daten Register Timer1 High auf 0 Setzen
TCNT1L=0; // Timer Daten Register Timer1 Low auf 0 Setzen
OCR1A = 1999; //für fout=1kHz
sei(); //Interrupts einschalten
Und zum Testen habe ich noch das:
ISR(TIMER1_COMPA_vect)
{
PORTD= ~PORTD;
}
Das sollte doch eigentlich ein Rechtecksignal am ganzen PORTD erzeugen.
Tut es aber nicht.
Wenn ich den PORTD am Anfang auf 1 setze, dann ist er nacher 0, und umgekehrt.
Die ISR wird scheinbar nur 1 mal aufgerufen.
Warum?
MfG
EDIT: Ich benutze AVR Studio 5, vllt liegts ja daran
Ich will bei einem ATMega 16 (läuft mit 16mhz) den CTC modus des Timer 1 verwenden.
Folgenden Quellcode habe ich:
Timer-Init:
TIMSK=(1<<OCIE1A); //Compare Interrupt einschalten
TCCR1B=(1<<CS11); //vorteiler: 8
TCCR1B|=(1<<WGM12); //CTC-Modus
TCNT1H=0; // Timer Daten Register Timer1 High auf 0 Setzen
TCNT1L=0; // Timer Daten Register Timer1 Low auf 0 Setzen
OCR1A = 1999; //für fout=1kHz
sei(); //Interrupts einschalten
Und zum Testen habe ich noch das:
ISR(TIMER1_COMPA_vect)
{
PORTD= ~PORTD;
}
Das sollte doch eigentlich ein Rechtecksignal am ganzen PORTD erzeugen.
Tut es aber nicht.
Wenn ich den PORTD am Anfang auf 1 setze, dann ist er nacher 0, und umgekehrt.
Die ISR wird scheinbar nur 1 mal aufgerufen.
Warum?
MfG
EDIT: Ich benutze AVR Studio 5, vllt liegts ja daran