Задать вопрос
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));
  • Вопрос задан
  • 471 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы