-
23.02.2007, 19:57 #1
- Регистрация
- 03.12.2005
- Адрес
- Кошице
- Возраст
- 35
- Сообщений
- 58
- Поблагодарили
- 0
- Поблагодарил
- 0
ШИМ в AVR-ах
Написал программу для 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%.
Может я что-то в программе неправильно написал? Подскажите, где ошибка.
|
Социальные закладки