Написал программу для ATmega16, которая на выводе OC0(PB3) создает ШИМ сигнал с частотой ~ 100 Гц.
ШИМ используется для управления симистором. При подаче 5В на ножки РВ0/РВ1 скважность уменьшается/увеличивается.

Вот код(компилировал в CodeVision):

#include <mega16.h>
#include <delay.h>


unsigned char pwm=0;

int main(void)
{
PORTB=0b00000000;
DDRB=0b00001000;

TCCR0=0b01100001;
TCNT0=0b00000000;
OCR0=0b00000000;

while (1)
{

if ((PINB.0==1)&&(pwm !=0))
{
pwm=pwm-1;
delay_ms(250);
OCR0=pwm;
}
if ((PINB.1==1)&&(pwm !=255))
{
pwm=pwm+1;
delay_ms(250);
OCR0=pwm;
}
};

return(0);
}


Эмулировал в AVRStudio - почти работает. Проблема в том, что когда врегистр OCR0 записано значение 0x00 на выводе РВ3 установлена лог. 1, а в соответствии с даташитом должен быть 0, то есть мощность плавно меняется от 0.4% до 99.6%, но в точке 100% становится 0%, а в точке 0% - 100%.

Может я что-то в программе неправильно написал? Подскажите, где ошибка.