Gast
#1883631
Tag!
Ich habe ein Problem mit der PWM bei einem Atmega32 (auch 16) und zwar
erzeugen alle 3 Timer analoge Ausgänge per PWM. Bei den Timer 1 und 2
funktioniert dies auch tadellos, nur will beim Timer0 nix rauskommen :(
Ich habe jetzt leider keine Ahnung mehr an was das liegen könnte...
------------------------------------------------------------------------
-
------------------------------------------------------------------------
-
hier mal einen auszug meines Quellcodes:
...
DDRD |= 0b10100000; // Pins als Outputs
DDRB |= 0b00001000;
PORTD &= 0b01011111; // Ausgänge abschalten
PORTB &= 0b11110111;
void Timers_init(void)
{
TCCR0 = 0b01101000; //Fast PWM - Timer gestoppt
OCR0 = 0;
//Timer1 (10bit) PWM
TCCR1A = 0b10000011; // 10bit Fast PWM
OCR1A = 0;
TCCR1B = 0b00001000;
// Timer2 (8bit) Fast PWM
TCCR2 = 0b01101000;
OCR2 = 0;
}
void PWM_Air(int wert) //Timer0 -> OC0 an B3
{
TCCR0 = 0b01101000; // Timer stopp
if(wert==0)
{
PORTB &= 0b11110111;
return; // PWM stopp
}
if(wert>=255)wert=255;
OCR0 = wert;
// hier Timer starten
TCCR0 = 0b01101010; //TAKTTEILER 8
}
void PWM_Oxy(int wert) // Timer2 -> OC2 an D7
{
TCCR2 = 0b01101000; // Timer stopp
if(wert==0)
{
PORTD&=0b01111111;
return; // PWM stopp
}
if(wert>=255)wert=255;
if(wert>OCR0)wert=OCR0; //max gleicher Anteil Oxy und Air
OCR2 = wert;
// hier Timer starten
TCCR2 = 0b01101001; //TAKTTEILER 1
}
------------------------------------------------------------------------
-
------------------------------------------------------------------------
-
wär Top, wenn mir jemand weiterhelfen könnte !