PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] ATMega 16 Timer 1 CTC Probleme



Franky55555
14.06.2011, 16: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

radbruch
14.06.2011, 17:00
PORTD = ~PIND;

Vielleicht so?

Franky55555
14.06.2011, 17:03
Nein, genau das gleiche Problem :(

radbruch
14.06.2011, 17:14
Das Setup scheint ok, obwohl ich vorsichtshalber auch ein TCCR1A=0; einfügen würde. Endlosschleife in main() vor return ist drin? interrupt.h eingebunden?

Franky55555
14.06.2011, 17:18
Ich habe die Endlosschleife vergessen.
Jetzt is sie drin und alles funktioniert.

Danke!