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.