Таймер и прерывания для atmega2560 (Arduino IDE)
Есть некий сигнал на входе (желтый на картинке), есть аналоговая часть (ее мы не рассматриваем) на входе МК мы имеем либо 0 либо 1, длительность сигнала 100-2500 мкс, частота 4-60 Гц, либо его просто нет
предположим нам приходит сигнал длительностью 1200 мкс (микросекунд), задача
1. поймать на выводе (с прерыванием) изменение с 0 на 1
2. настроить таймер таким образом, чтобы он сработал один раз через t=650 мкс
3. перевести вывод D в состояние HIGH
4. через время t сработает перывание от таймера и мы переведем вывод D в LOW
- для нас важен только момент перехода входного сигнала в 1, его длительность нас не интересует
- t задается и находится в дианаоне от 100 мкс до 1500 мкс
- продержим D в HIGH скажем 3000 мкс - все сгорит
- точность: скажем если t=650 а сработает через 700 или 600 не так важно, +/-50 мкс свободно, это приминительно к внутренним задержкам, всяким там разрядностям таймера (я не понимаю в этом)
какой-то таймер явно занят (TIMER4), но там их много, какие-то заняты неявно самой cредой arduino, это необходимо учесть
задачи:
1) во что бы то ни стало перевести D обратно в LOW через время t
2) не допускать (если на входе сошли с ума) и сигнал идет с частотой 1000 гц, тогда: мы как обычно обрабатываем первый сигнал ("заводим" таймер) и запоминаем его время (когда он пришле), и любой последующий пришедший раньше чем время t2=20000 мкс просто игнорируем
попутно мы считаем кол-во импульсов, можешь пропускать импульсы и так далее (выходит за границы ТЗ)
на выходе я хотел бы получить готовый кусок кода с большим кол-вом комментариев с описанием каждого действия, почему такой регистр, почему это знаение, что за режим и так далее