РЕКЛАМА НА ФОРУМХАУС Так то здесь важна не длительность импульсов, а минимальный период их поступления. Или максимальная частота.
В теории все так. Я подключал ESP для контроля оборотов вентилятора. Контролировать все это по прерываниям, с передачей данных на WIFI не получилось. WIFI просто переставал работать. Даже при передачи информации 1 раз в секунду. Так как прерываний в сек. было достаточно много, я попробовал первые 500 мс отслеживать прерывания, потом делал запрет, паузу порядка 200 мс, и только потом прием/передача wifi. Ничего не получилось. Проще было замерить количество импульсов за эти пол секунды, чем разбираться с причиной. Причем на разных пинах, это все происходило по разному. Длительность цикла 2-3 ms, а длительность импульса от счетчика 96 ms. проще без прерываний все сделать.
Смотрите сами, как вам проще. Разобраться с причиной, или найти обходной путь. Но если вы работаете в среде Arduino, то поиск причин может быть достаточно проблематичен. Кстати, если вы боретесь с esp8266, я бы посоветовал перейти на esp32, даже лучше на esp32-s3
Была такая мысль перейти на esp-32. Но есть отработанная технология на wemos. Сделано множество плат. Несколько проектов пришлось переделывать, в итоге есть пара готовых плат, которые можно прямо сейчас использовать. А с esp-32 придется все это заново проходить. Если форумы почитать, то там то же не все так просто. Туча подводных камней. Временные затраты получаются больше, чем прикрутить wemos.
У вентилятора как бы оборотов больше, ESP все время была занята прерываниями. В подобных случаях нужно или аппаратный делитель ставить, или хотя бы аналоговым способом, по росту напряжения на интегрирующем конденсаторе. Если у вас с такой же скоростью электросчетчик будет крутиться - ну, я не знаю как это возможно.
Я разрешал прерывания в промежутке 100 ms, потом запрещал. Обращение к WIFI было 1 раз в сек. Все равно не помогло. При считывании импульсов задача значительно проще. Нужно просто считать переход с высокого на низкий уровень.
Пробуйте Проблема с вентилятором понятна, слишком много прерываний и слишком мало времени на wifi, тут такого быть не должно, но вы делайте как считаете правильным
Сам цикл длился всего 2-3 мс. Т. е. каждые 2-3 мс. вызывались программный код обслуживающий WIFI. Скорее всего WIFI использует сам прерывания, и они действительно пересекаются с пользовательскими. Вентилятор действительно давал импульсы часто, но даже ограничение времени, когда разрешено прерывание не позволило решить проблему. Возможно, если покопаться, можно найти причину, но особого желания нет, так как в данных проектах это все можно решить и без прерывания. Понятно, что не красиво, зато надежно. Похожая проблема получается, если постоянно читать аналоговый порт.
У меня есть не одна железка, "постоянно читающая аналоговый порт", но таких проблем нет. Просто читать его надо примерно 1 раз за цикл, и циклы крутить с минимальными задержками. В общем, это вопрос программирования
Так не получилось. Если считывать один раз за цикл, то WIFI перестает работать. У меня все полезное вызывается 1 раз в секунду. А сам цикл длится примерно 2-3 мс. Приходится на 100 мс делать задержку, потом производить аналоговые измерения. Между аналоговым считыванием, и вызовом приблуд WIFI должен быть промежуток.
Что-то странное вы пишете. Похоже, что это особенности вашей конкретной реализации и (или) комбинации "библиотек". Возможно, умноженные на "особенности" esp8266. Поэтому я и предлагал посмотреть esp32-s3. Этот чип сделан уже значительно "правильнее", даже по сравнению с просто esp32. А если перейти с Ардуино на "родную" среду idf и "фирменные" библиотеки с freertos, то подобных непонятных "нюансов" должно быть значительно меньше. И вообще всё станет понятнее и "прозрачнее".
Это особенности esp8266. Я использую wemos mini. под него разработаны платы, все косяки какие ножки куда можно использовать, выявлены. Размер позволяет запихнуть куда угодно. У меня лежат esp32, но пока руки не дошли, да и потребности нет. esp32-c3 интересная. Размер получается практически как у wemos mini, а возможностей больше.
Судя по тому, какие у вас были проблемы и как вы их пытались решить, я бы не торопился утверждать, что все косяки выявлены. Кстати, esp32-c3 и esp32-s3 существенно разные чипы. Например, esp32-c3 это RISC-V, а esp32-s3 классическая для ESP архитектура Xtensa, хотя и модернизированная.
Нет никаких проблем с esp8266) "У меня все работает" (с) Правда, я использую отдельные модули типа 12F и подобные, а не готовый Wemos, но и его использую как макетную плату - никогда никаких проблем не было. Такое впечатление что что-то мешает нормальной работе модуля. А что-нибудь простое, типа моргалки светодиодиком, работает? Без прерываний, обращения к регистрам, ассемблерных вставок и прочего? Потом добавить в цикл считывание порта и отправку цифры в сериал. Потом добавить ещё что-то - и найти когда все сломается.
А не проще ли взять китайский счетчик с RS-485 и снимать сколько угодно? Зачем придумывать себе гемор работает/не работает если есть готовые решения?