Ох, понаписали много-всяко, а нужно то всего лишь примеры ардуинского кода с таймерами 1,3,4,5, если они ВСЕ задействованы в режиме CTC, чтобы наглядно убедиться где неясность. Таймеры 0 и 2 у меня нормально работают.
Неправильно помогаем? Как всегда ![]()
А почему Вы сначала просили книгу, а теперь, оказывается, Вам нужна не книга, а
Вы бы уж определились, что Вам нужно, прежде чем постить и писали бы чётко и ясно. А то я вот чувствую себя идиотом, что искал для Вас ссылку на аппноту и выкладывал её, потерял на это время, а Вам, как оказалось, нужно совсем другое ![]()
а что не так с остальными? оно жеж всё аналогично
Апнота пригодится. За ссылку - спс
Так книга б была в самый раз, но увы… )
А пишу подробнее, тк народ спрашивал подробности, но сейчас важно проанализировать примеры готового кода.
Так то куда важнее проанализировать , схему работы таймера (из даташита) и разобраться какой регистр в каком таймере за что отвечает.
А анализировать готовый код имеет смысл, только если ты что то уже понимаешь
ТС, дорогой, я задал тебе конкретный вопрос про времена. Какие длительности и прочие времена в твоей задаче? Или ты тут просто демагогией занимаешься?
Если у тебя конкретный проект, то будь любезен указать конкретные значения.
Если тебе нужно изучить таймеры, но читать по аглицки ты не в состоянии, то просто выбери иное хобби.
Поясню. Чайники часто хотят использовать таймеры и прерывания там, где они совершенно не нужны. Поэтому еще раз - укажи свои характерные времена. Задержки реакции, длительности импульсов и пр. в микросекундах: “от” и “до”.
Да йопвашумать! Таймер умеет считать, фсё!!! А АВР есть ровно два режима счета - от нуля до верха и снова от ноля ИЛИ от ноля до верха и потом обратно от верха до ноля.
Если один, два или три регистра сравнения, при совпадении с которыми может что-то “волшебное” произойти на ножке вывода. На все “судьбоносные” события могут генерироваться прерывания. Более ничего таймер не умеет!!! Какие, в жопу, “примеры работы с таймером” могут быть?
Все хотелки ТС очень просто реализуются на одом (!) таймере блюпила.
вангую, частотник он делает
Например,канал 1 должен работать так. По внешнему прерыванию int0, запускаем таймер1 на 200 мкс, по окончании интервала, запускаем таймер1 на 2 мс. С приходом очередного сигнала внешнего прерывания - повторяем и тд. Каков будет пример кода?
Какова цель этих запусков ?
- Для таких интервалов вообще не нужны никакие таймеры.200 мкс и 2 мс == 2000 мкс.
- переведи со своего языка на русский, что ты понимаешь под “запустить таймер”? Что именно нужно сделать при запуске и потом, при остановке?
Самое главное!!! Ты не забыл, что ты что-то у людей просишь? Нужны слова "помогите, сам не разобрался, вот пример того, что я пробовал, пожалуйста… и прочие слова, которыми оформляется просьба, тваюмать!!!
Откуда мы знаем какой код Вы напишете? Напишете - посмотрим, каков он будет.
Вы, похоже, не поняли, здесь могут помочь найти ошибку в Вашем коде. А за Вас код никто писать не будет.
Ребята, всё заработало )
Пришлось помучиться, но удалось
Всем спасибо
Особая благодарность - 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
Не проверял. Времени почти нет.