Sergey Опубликовано 16 Ноября 2021 Опубликовано 16 Ноября 2021 Дело было вечером, делать было нечего. А асик в ванну надо было погружать. 555 таймеров под рукой не было, а тинька была. Далее скрины и прошивка. Там все понятно. //#define F_CPU 9600000UL #define BIGSUMM 1875000000 #define PREDDEL 18750000 #define PINF PB0 // пин частоты volatile uint32_t ADDCOUNTER; // число + к счетчику volatile uint32_t counter=0; // счетчик uint16_t f=1510; // настраиваемая частота в попугаях. хотя по идее должно быть в Гц, //но лень разбираться. в данном случае стоит 180гц, что соответствует примерно 5500 оборотов. void f_change(uint16_t f) { ADDCOUNTER=(BIGSUMM/(PREDDEL/f))*1000; } ISR(TIM0_OVF_vect) { counter=counter+ADDCOUNTER; if (counter >= BIGSUMM) { counter=counter-BIGSUMM; PORTB^=(1<<PB0); } } void setup() { // настройка пинов DDRB=1; PORTB=6; // настроим таймер TCCR0B=1;// предделитель 1 TIMSK0=2;// прерывание по переполнению. ADDCOUNTER=(BIGSUMM/(PREDDEL/f))*1000; } void loop() { f_change(f); } 1
Рекомендуемые сообщения
Пожалуйста, авторизуйтесь, чтобы оставить комментарий
Вы сможете оставлять комментарии после авторизации
Войти