Код: Выделить всё
#define F_CPU 8000000UL // 8 Mhz
#include <avr/io.h>
#include <util/delay.h>
int main()
{
PORTB = 0;
DDRB = (1 << PB1);
TCCR1A = (1 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (0 << WGM10);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10);
TCNT1 = 0;
ICR1 = (uint16_t)(20000.0 / ((64.0 / F_CPU) * 1000000.0)); // 20ms PWM period
OCR1A = 0;
for (;;)
{
OCR1A = 63; // 504 mcs
_delay_ms(1000);
OCR1A = 163; // 1304 mcs
_delay_ms(1000);
OCR1A = 262; // 2094 mcs
_delay_ms(1000);
}
}
Фьюз биты выставил такие: (E:FF, H:DF, L:E2). От дефолта отличаются тем, что выключен бит делителя тактовой частоты на 8. То есть, если я правильно понимаю, микроконтроллер работает от внутреннего генератора с частотой 8 МГц.
Сверяясь с даташитом, я попытался установить таймер в режим Fast PWM, таймер должен тикать до значения ICR1. Предделитель 64. Подскажите, пожалуйста, что я неправильно понимаю и почему серва не поворачивается в заданную позицию и не останавливается.
Спасибо!



