Hallo,
ich habe (mal wieder) Probleme und weiß nicht weiter:
Ich brauche drei PWM Kanäle am ATmega48. Der erste (OC0A) funktioniert bereits, jetzt sollen noch die beiden Kanäle des Timer1 dazukommen (OC1A an PB1 und OC1B an PB2). Aus dem Datenblatt habe ich die entsprechenden Einstellungen entnommen, leider tut sich aber nichts an den beiden Ausgängen!
Im Internet ist leider nur recht wenig zum ATmega48 zu finden. Könnte da jemand von euch mal drübergucken, was ich eventuell falsch gemacht haben könnte?
Code:
void PWM_Init (void)
{
//DataDirections
DDRD |= (1<<PD6); //Sauger-PWM
DDRB |= (1<<PB1) | (1<<PB2);//Motoren-PWM
//Kanal 1 (funktioniert bereits!)
//Fast-PWM-Mode, Clear on CompareMatch, Set at Bottom, Clk/8
TCCR0A |= (1<<COM0A1) | (1<<WGM00) | (1<<WGM01);
TCCR0A &= ~(1<<COM0A0);
TCCR0B |= (1<<CS01);
TCCR0B &= ~((1<<WGM02) | (1<<FOC0A) | (1<<FOC0B) | (1<<CS00) | (1<<CS02));
//Kanal 2 & 3 (funktionieren noch nicht!)
//10-bit Fast-PWM, Clear on CompareMatch, Set at Bottom, Clk/8
TCCR1A |= (1<<COM1A1) | (1<<COM1B1) | (1<<WGM10) | (1<<WGM11);
TCCR1A &= ~((1<<COM1A0) | (1<<COM1B0));
TCCR1B |= (1<<WGM12) < (1<<CS11);
TCCR1B &= ~((1<<WGM13) | (1<<CS10) | (1<<CS12));
//Initialisierungs-Compare-Werte
OCR1AH = 0x2;
OCR1AL = 0;
OCR1BH = 0x3;
OCR1BL = 0;
};
EDIT: Oh man! So ein Mist! Ich hab den Fehler gefunden, es war nur ein falsches Zeichen... Hab's oben rot markiert. Ärgerlich!
Lesezeichen