ESP32 и внешние прерывания
- Войдите на сайт для отправки комментариев
Пнд, 03/10/2022 - 11:21
Приветствую. К doit esp32 devkit v1 подключены SD карта и DS3231. Используется библиотека ESPAsyncWebServer. Секундный импульс от часов формирует прерывание на 36 пине esp по восходящему фронту. При работе wifi от одного импульса прерывание срабатывает несколько раз. Когда wifi не запускаю, работает всё нормально, на 1 импульс 1 прерывание. На других пинах ситуация похожая. И при чтении с флешки почти каждый раз вылетает. В прерывании идет подсчет количества импульсов. Так же не должно работать?
Esp32 и Esp8266 используют прерывания для обеспечения работы WiFi, поэтому при одновременной работе с вайфаем/бт и прерываниями есть нюансы.
На какой хер тебе в esp32 внешние секундные импульсы? Навешал над антенной соплей со слабой подтяжкой, вот и срабатывает.
Зачем - это другой вопрос. Чтобы не опрашивать часы 10 раз в секунду. Соплей нет, подтяжки ставил, осциллографом замерял.
У тебя есть РЧ-осциллограф, стоящий миниум три миллиона, но ты делаешь вот эту бесполезную хрень с часами? Охотно верю.
В esp32 есть свои часы. Встроенные. Не страдай дурью.
Я художник, я так вижу. Дело же не в способе реализации и не в самих часах, а в неадекватном поведении прерывания.
Я художник, я так вижу.
Ох уж эти экспрессионисты )))
а на другом пине? к примеру 25 или 26
Покажи реально как подключены часики и флешка, короче схему полностью. Подтяни пин прерывания к земле килоомником. Возьми пин, который не работает как сенсор, к примеру GPIO2. Уведи внешние устройства подальше от антенны.
Здравствуйте уважаемые коллеги.
чтотто на старуху поруха :(
чтобы не плодить темы задам вопрос тут.
тоже esp, из текста программы видно куда я привязал кнопки.
хочу получить счет- инкремент на единицу при каждом нажатии и отпускании кнопки.
получаю инкремент на два. то есть единица прибавляется и на нажатие и на отпускание.
чудеса да и только :) подскажите где косячу плз.
Я правильно понимаю, что инкремент счетчиков возможен не чаще одного раза в 150 микросекунд ? Не маловата задержка ?
Я живу в реалиях, что это миллисекунды , или нет ?
https://links2004.github.io/Arduino/dd/de3/class_ticker.html
Частота импульсов feed 4-5 гц, stream - 0.1– 0.5 гц
чтотто на старуху поруха :(
Тут проруха на прорухе.
Если конденсатор на кнопку ставился для подавления дребезга, то он у вас не работает.
Программный анти дребезг у вас тоже не работает как вы задумывали. В ОСНОВНОМ помогает при нажимании и не помогает при отпускании. При отпускании, если присутствует дребезг, ничто не мешает посчитать первый падающий фронт от дребезга, что вероятно и происходит.
В ОСНОВНОМ помогает при нажимании, т.к. задержка 150 мс асинхронная относительно нажатия. Установленный флаг снимется в интервале от 0 до 150 мс..
Но эффект двойного срабатывания сохраняется и при работе от реальных датчиков через оптрон.
оптрон 817 - никаких радиочастот. Фронты и срезы чистые, по крайней мере на лучевом осциллографе, да и на цифровом тоже.
чуть позже все же схему нарисую…
откуда?
А вот всякие отптроны, конденсаторы, и прочую ересь с медленными фронтами к esp32 следует подключать через триггеры шмитта.
Убери конденсатор вообще, а потом ещё поставь на 0.1 мкФ. Напиши результаты.
Угу, в пятницу вернусь из командировки попробую. Заодно подам посчитанные импульсы с наны, и посмотрю как будет. От наны же точно дребезга не будет :)
Вообще всякие левые тикеры на esp32 - зло злющее. Все дело в том, что незаметно для вас там работет RTOS, которая, кстати и корячит задержки, может в ней проблема. Я бы каждый проход лупа в волатильную переменную копировал значение миллис. Ну просто потому, что если вы сделаете чтение миллис из прерывания у вас есп32 вылетит с выходом за пределы памяти (не буду тут рассказывать почему). В прерывании фиксируете сработку, отключаете его (прерывание), ну как там - детачинтерупт. В другую волатильную переменную копируете то самое закешированное значение миллиса. В лупе проверяете истечение дебонс интервала, по скопированному значению. Если интервал истек - снова подключаете прерывание. И будет вам счастье.
Погодь! , а аткуда миллис в ртос??? Это где почитать?????????
Странный вопрос... Он же под ардуиной пишет. Что мешать быть и миллису и FreeRtos вместе ?
Охота за лишним импульсом
Подключил нану на оба прерывания.
блинкует на 3 секунды через 3 секунды на оптроны.
еспэшка считает импульсы по обоим изменениям сигнала хотя должна только на срез.
нана не может жэ с дребезгм импульсы выдавать?
чертовщина.
убрал емкостя и чертовщина кончилась:)
убрал емкостя и чертовщина кончилась:)
Ну вот то-то и оно, слишком большая емкость (да еще небось и без резистора)...
А вот всякие отптроны, конденсаторы, и прочую ересь с медленными фронтами к esp32 следует подключать через триггеры шмитта.
Аларчик просто открывался.
еслиб просто обычная входная цепь с оптороном то все просто бы работало и впрос бы не возник.
но , чтобы отлаживать на даче я вклячил на выход оптрона мембранную кнопку (три штуки)
соответственно оне начали дрыбизжать и я добавил емкостей. И некоторые программные экзорсисы.
в итоге штатные датчики на входе оптронов тоже начали работать с (вышеозначенными) купюрами. Ибо емкостя…
отсюда вывод : не надо пытаться отладочные примочки интегрировать в рабочие цепи.
кесарю цезарево а цезарю кесарево :) отладочная модель на нане оказалась удачной, отладка с нею комфортной, лень - зло!
ЗЫ . Триггеры приехали , тоже проверю :)