Hi Leuts, ich habe hier einen Mega16 mit 8 MHz und versuche mich gerade an PWM. Nun habe ich folgenden Code: int main() { DDRB = 0xff; DDRD = 0xff; TCCR0 = (1<<CS00) | (1<<WGM00) | (1<<WGM01) | (1<<COM01); OCR0=50; TCCR1A |=(1<<COM1A1) | // Clear OC1A on Compare Match (1<<WGM10)|(1<<WGM11)| // 10bit, Fast PWM (1<<WGM12) | (1<<CS10); // No Prescaler OCR1A=50; for (;;) { ; } } PWM vom Timer0 funktioniert, an OC0 (PB3) habe ich ein PWM Signal. PWM mit Timer1 funzt nicht, an OC1A (PD5) habe ich nichts. Was mache ich falsch ?
Die Clock-Select Bits und Teile der WGM Bits sind nicht in Register TCCR1A, sondern in TCCR1B. TCCR1B wird im Code nicht gesetzt, der Timer ist also abgeschaltet. Grüße, Peter
Stimmt, danke dass Du mir das Brett weggenommen hast :-) Anyway, jetzt krieg ich Timer2 nicht zum Laufen (PWM und ich soll wohl nicht sein). Ich möchte einfach nur, dass Timer2 alle 1ms einen CTC-Interrupt aufruft (Timer0 funzt): #include <avr/io.h> #include <avr/interrupt.h> int main() { DDRB = 0xff; DDRD = 0xff; // Timer 0 konfigurieren: // Fast PWM TCCR0=0; TCCR0 |= ((1<<WGM01)|(1<<WGM00)); // Clear OC0 on compare TCCR0 |= (1<<COM01); // Systemtakt TCCR0 |= (1<<CS00); // CTC-Vergleichswert OCR0 = 200-1; ///////////////////////////////////////////////////////// // Timer 2 konfigurieren // alle 1 ms wird ein CompareMatch-Interrupt ausgeloest TCCR2 = 0; // CTC-Modus einstellen TCCR2 |= (1<<WGM21); // Prescaler 64 TCCR2 |= (1<<CS22); // CompareMatch-Interrupt aktivieren TIMSK |= (1<<OCIE2); // OCR-Register laden OCR2 = 125; ////////////////////////////////////////////////////// sei(); for (;;) { } } // CompareMatch-Interrupt Timer 2 // wird im 1 ms Takt aufgerufen ISR(TIMER2_COMP_vect) { PORTB ^= (1<<PB1); }
Der Timer2 sollte mit dieser Konfiguration eigentlich funktionieren. Ich würde das mal im Simulator ausprobieren (Breakpoint in den Interrupt setzen). Grüße, Peter
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.