Slavka_online
@Slavka_online
Интересная личность

Расчет времени таймера на Atmega?

static int getCounter(int  seconds) {

  double frc = ((double)1 / seconds) * 1000;
  int cnt  =  65536 -  (15625 / frc) ;
  return cnt;

}


Вот функция которая принимает на вход миллисекунды и настраивает регистр таймера TCNTx , но проблема в том что на осциллографе выходит ерунда.
Контроллер Atmega2560, плата Arduino Mega. Пред делитель настроен на 1024, т.е 16кк / 1024 = 15625
Внутри прерывания обычное пинание пина digitalWrite(port, !digitalRead(port));
  • Вопрос задан
  • 299 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ocelot
@Ocelot
Попробуйте так:
const unsigned long F_cpu = 16000000UL;
const unsigned long Prescaler = 1024UL;
unsigned int cnt = seconds * F_cpu / Prescaler;
if (cnt > 65535)   cnt = 65535;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Eltex Новосибирск
от 80 000 руб.
Rendez-Vous Москва
от 170 000 до 200 000 руб.
от 75 000 до 120 000 eur.
16 июн. 2019, в 19:42
500 руб./за проект
16 июн. 2019, в 18:38
5000 руб./за проект
16 июн. 2019, в 17:14
5000 руб./за проект