Перейти к контенту

Рекомендуемые сообщения

Опубликовано

Дело было вечером, делать было нечего. А асик в ванну надо было погружать. 555 таймеров под рукой не было, а тинька была. Далее скрины и прошивка. Там все понятно.

 

807218791_16-11-2021205057.thumb.jpg.5a6386ac5bb972437a3c3608609f39c3.jpg1557230622_16-11-2021205139.jpg.5c899b4479f77a4ed5552fcc5d83b117.jpg570146248_16-11-2021205152.jpg.378edd75676dd39eb821177c989b89e9.jpg

 

//#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);
}

Пожалуйста, авторизуйтесь, чтобы оставить комментарий

Вы сможете оставлять комментарии после авторизации



Войти
×
×
  • Создать...

Важная информация

Условия использования