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));
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 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;
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
FunBox Санкт-Петербург
от 120 000 ₽
FunBox Томск
от 120 000 ₽
FunBox Екатеринбург
от 120 000 ₽
29 февр. 2020, в 13:31
3000 руб./за проект
29 февр. 2020, в 13:24
15000 руб./за проект
29 февр. 2020, в 12:19
1000 руб./за проект