Подскажите хорошую книгу по программированию таймеров Mega2560

Ох, понаписали много-всяко, а нужно то всего лишь примеры ардуинского кода с таймерами 1,3,4,5, если они ВСЕ задействованы в режиме CTC, чтобы наглядно убедиться где неясность. Таймеры 0 и 2 у меня нормально работают.

Неправильно помогаем? Как всегда :frowning:

А почему Вы сначала просили книгу, а теперь, оказывается, Вам нужна не книга, а

Вы бы уж определились, что Вам нужно, прежде чем постить и писали бы чётко и ясно. А то я вот чувствую себя идиотом, что искал для Вас ссылку на аппноту и выкладывал её, потерял на это время, а Вам, как оказалось, нужно совсем другое :frowning:

а что не так с остальными? оно жеж всё аналогично

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

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

ТС, дорогой, я задал тебе конкретный вопрос про времена. Какие длительности и прочие времена в твоей задаче? Или ты тут просто демагогией занимаешься?
Если у тебя конкретный проект, то будь любезен указать конкретные значения.


Если тебе нужно изучить таймеры, но читать по аглицки ты не в состоянии, то просто выбери иное хобби.


Поясню. Чайники часто хотят использовать таймеры и прерывания там, где они совершенно не нужны. Поэтому еще раз - укажи свои характерные времена. Задержки реакции, длительности импульсов и пр. в микросекундах: “от” и “до”.

Да йопвашумать! Таймер умеет считать, фсё!!! А АВР есть ровно два режима счета - от нуля до верха и снова от ноля ИЛИ от ноля до верха и потом обратно от верха до ноля.
Если один, два или три регистра сравнения, при совпадении с которыми может что-то “волшебное” произойти на ножке вывода. На все “судьбоносные” события могут генерироваться прерывания. Более ничего таймер не умеет!!! Какие, в жопу, “примеры работы с таймером” могут быть?

Все хотелки ТС очень просто реализуются на одом (!) таймере блюпила.

вангую, частотник он делает

Например,канал 1 должен работать так. По внешнему прерыванию int0, запускаем таймер1 на 200 мкс, по окончании интервала, запускаем таймер1 на 2 мс. С приходом очередного сигнала внешнего прерывания - повторяем и тд. Каков будет пример кода?

Какова цель этих запусков ?

  1. Для таких интервалов вообще не нужны никакие таймеры.200 мкс и 2 мс == 2000 мкс.
  2. переведи со своего языка на русский, что ты понимаешь под “запустить таймер”? Что именно нужно сделать при запуске и потом, при остановке?

Самое главное!!! Ты не забыл, что ты что-то у людей просишь? Нужны слова "помогите, сам не разобрался, вот пример того, что я пробовал, пожалуйста… и прочие слова, которыми оформляется просьба, тваюмать!!!

Откуда мы знаем какой код Вы напишете? Напишете - посмотрим, каков он будет.

Вы, похоже, не поняли, здесь могут помочь найти ошибку в Вашем коде. А за Вас код никто писать не будет.

Ребята, всё заработало )
Пришлось помучиться, но удалось

Всем спасибо

Особая благодарность - Nick Gammon за инфу с форума “Gammon”
Всё кратко и понятно изложено по таймерам (ну понятно, что даташит мы читали ранее).
https://gammon.com.au/forum/bbshowpost.php?id=11504&page=2
Может кому пригодится …

эти рисунки даже я и на старом и на новом форуме выкладывал…
Там у него этот скетч заявлен как джиттер фри, проверял?

#include <avr/sleep.h>

ISR (TIMER1_COMPA_vect)
  {
  PINB = bit (5); // toggle D13 
  }  // end of TIMER1_COMPA_vect

void setup ()
  {
  pinMode (13, OUTPUT);

  // stop timer 0
  TCCR0A = 0;
  TCCR0B = 0;
  
  // stop timer 1
  TCCR1A = 0;
  TCCR1B = 0;
  
  TCCR1B = bit (WGM12) |  // CTC
           bit (CS10);    // prescaler of 1
          
  // 1e9 / 22050 / 62.5 = 725.6 - round down, then subtract 1
  OCR1A = 724;
  TIMSK1 = bit (OCIE1A);  // interrupt on compare A
  
  set_sleep_mode (SLEEP_MODE_IDLE);  

  }  // end of setup

void loop ()
  {
  sleep_mode ();
  }  // end of loop

Не проверял. Времени почти нет.