Hallo zusammen, könnt ihr mir bitte sagen was ich an dem 16 bit timer noch nicht verstanden habe? Mein Ziel ist es einfach nach einem Compare Match event eine LED an PORTC toggeln zu lassen. Ich habe habe dazu Com B verwendet, einfach so. hier ist mein Code, es tut sich an der LED leider nichts. Herzlichsten Dank und viele Grüße, Matthias. #include <avr/io.h> #include <avr/interrupt.h> uint16_t result; ISR(TIMER1_COMPB_vect) { PORTC^=(1<<PC0); } int main(void) { DDRC=0xff; PORTC=0x00; DDRD = 0xff; // PORT D ist Ausgang PORTD = 0x00; TCCR1B |= (1<<CS12) | (1<<CS10); //precaler auf 1024 = 15 overflows/Sekunde TIMSK |= (1<<OCIE1B); //timer1 output compare B Match Interrupt enable OCF1B flag in TIFR must set TIFR |= (1<<OCF1B); // output compare B Match flag is set OCR1B=60000; //Vergleichswert TCCR1B |= (1<<WGM12); //CTC modus sei(); //Gobale Interruptbehandlung ein while(1) return 0; }
Hi Du hast CTC mit OCR1A als Top eingestellt. D.h. der Timer läuft bis zu dem Wert von OCR1A und fängt dann von Null wieder an. Und jetzt überlege mal. MfG Spess
spess53 schrieb: > Hi > > Du hast CTC mit OCR1A als Top eingestellt. D.h. der Timer läuft bis zu > dem Wert von OCR1A und fängt dann von Null wieder an. Und jetzt überlege > mal. > > MfG Spess Hallo Spess, vielen Dank für Deinen Tipp. HAbe CTC auf TCCR1B = (1<<CS10) // no Prescaling 16ms bei 4MHZ 30.000 vom 65.536 = 1/2.2 Teil vom 16ms -->7,32ms | (1<<WGM12) | (1<<WGM13); //12 und 13 für CTC compare B gestellt. TIMSK |= (1<<OCIE1B); //Timer Output compare B Match interrupt enable ICR1=30000; //legt den Top Wert für Comp B fest nicht //OCR1B =30000; jetzt läuft es. Ein schönes Wochenende wünsche ich.
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.