Таймер и прерывания для atmega2560 (Arduino IDE)
2 500 руб. за проект
•
безналичный расчёт, электронные деньги, наличный расчёт
Сама по себе задача довольно примитивная, больше уйдет вемени на постаовку задачи, вникание в ее со стороны исполнителя и приемку результатов, но это буквально 20 строк кода, которые должны быть безупречны.
Есть некий сигнал на входе (желтый на картинке), есть аналоговая часть (ее мы не рассматриваем) на входе МК мы имеем либо 0 либо 1, длительность сигнала 100-2500 мкс, частота 4-60 Гц, либо его просто нет
предположим нам приходит сигнал длительностью 1200 мкс (микросекунд), задача
1. поймать на выводе (с прерыванием) изменение с 0 на 1
2. настроить таймер таким образом, чтобы он сработал один раз через t=650 мкс
3. перевести вывод D в состояние HIGH
4. через время t сработает перывание от таймера и мы переведем вывод D в LOW
какой-то таймер явно занят (TIMER4), но там их много, какие-то заняты неявно самой cредой arduino, это необходимо учесть
задачи:
1) во что бы то ни стало перевести D обратно в LOW через время t
2) не допускать (если на входе сошли с ума) и сигнал идет с частотой 1000 гц, тогда: мы как обычно обрабатываем первый сигнал ("заводим" таймер) и запоминаем его время (когда он пришле), и любой последующий пришедший раньше чем время t2=20000 мкс просто игнорируем
попутно мы считаем кол-во импульсов, можешь пропускать импульсы и так далее (выходит за границы ТЗ)
на выходе я хотел бы получить готовый кусок кода с большим кол-вом комментариев с описанием каждого действия, почему такой регистр, почему это знаение, что за режим и так далее
Есть некий сигнал на входе (желтый на картинке), есть аналоговая часть (ее мы не рассматриваем) на входе МК мы имеем либо 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 мкс просто игнорируем
попутно мы считаем кол-во импульсов, можешь пропускать импульсы и так далее (выходит за границы ТЗ)
на выходе я хотел бы получить готовый кусок кода с большим кол-вом комментариев с описанием каждого действия, почему такой регистр, почему это знаение, что за режим и так далее
- Файлы
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.