Witam, mam problem z okiełznaniem programowego PWM. Pacjent to Atmega 16 taktowana zewnętrznym kwarcem 8MHz. Niby wszystko tak jak powinno być, a ruszyć nie chce. Będę wdzięczny za rzucenie świeżym okiem na program, bo kończą mi się pomysły co jest nie tak.
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile uint8_t pwm1, pwm2, pwm3;
int main(void)
{
DDRA |=(1<<PA0)|(1<<PA1)|(1<<PA2);
PORTA|=(1<<PA0)|(1<<PA1)|(1<<PA2);
TCCR2 |= (1<<WGM21);
TCCR2 |= (1<<CS20)|(1<<CS21)|(1<<CS22);
OCR2 = 200;
TIMSK |= (1<<OCIE2);
sei();
uint8_t i;
while (1);
{
for (i=0;i<255;i++)
{
pwm1=i;
pwm2=255-i;
pwm3=i;
_delay_ms(100);
}
pwm1=255;
pwm2=255;
pwm3=255;
_delay_ms(1000);
}
}
ISR( TIMER2_COMP_vect )
{
static uint8_t licznik;
if(licznik>=pwm1) PORTA |= (1<<PA0); else PORTA &= ~(1<<PA0);
if(licznik>=pwm2) PORTA |= (1<<PA1); else PORTA &= ~(1<<PA1);
if(licznik>=pwm3) PORTA |= (1<<PA2); else PORTA &= ~(1<<PA2);
licznik++;
}