Аппаратное прерывание вызывает перезагрузку ESP8266

tretyakov_sa

Moderator
Команда форума

sav-13

Member
Никто так и не разобрался с внешними прерываниями?
Делаю шлюз с датчиков 433Мгц в интернет
Подцепил библиотеку RCswich. Если HTTP сервер не запущен, все хорошо, если запущен, то постоянная перезагрузка по WDT
 

nicelight

Member
Никто так и не разобрался с внешними прерываниями?
Делаю шлюз с датчиков 433Мгц в интернет
Подцепил библиотеку RCswich. Если HTTP сервер не запущен, все хорошо, если запущен, то постоянная перезагрузка по WDT
Аналогичная проблема. Старожилы форума пишут на чистом си, у них все работает, а к ардуинщикам относятся достаточно презрительно как к тьме необразованной, и помочь синициализировать и обработать внешнее прерывание в ардуино ИДЕ не берутся. уже несколько раз просил. На соседней ветке писал. к сожалению, пока безрезультатно..
Может у кого есть каике догадки , из за чего ардуина подвешивает еспшку и как можно попробовать это обойти.
судя по собранной с постов инфы, когда отрабатывает внешнее прерывание и делается еще несколько простых действий в коде, при возникновении прерывания, чип уходит в ребут.
 

sav-13

Member
Аналогичная проблема. Старожилы форума пишут на чистом си, у них все работает, а к ардуинщикам относятся достаточно презрительно как к тьме необразованной, и помочь синициализировать и обработать внешнее прерывание в ардуино ИДЕ не берутся. уже несколько раз просил. На соседней ветке писал. к сожалению, пока безрезультатно..
Может у кого есть каике догадки , из за чего ардуина подвешивает еспшку и как можно попробовать это обойти.
судя по собранной с постов инфы, когда отрабатывает внешнее прерывание и делается еще несколько простых действий в коде, при возникновении прерывания, чип уходит в ребут.
В общем проблему смог обойти:
1. В цикле loop() не должно быть ни каких delay()
2. Обработка сервера server.handleClient(); вызывается чем реже, тем лучше.
Я поставил один раз в 2 сек. (Через функцию millis())
3. Перед server.handleClient(); устанавливается запрет внешнего прерывания, после него снова разрешение

Получаем следующее - во время работы сервера внешнее прерывание отключено.
Если к серверу нет обращений, то время его обработки мало и вероятность потери входящих прерываний есть, но не велика
Если сервер занимается генерацией станиц, то соответственно потери прерывания больше.

Если потеря небольшого количество событий прерывания допустимо (например, событие дублируется), то данная схема рабочая
 

nikolz

Well-known member
задержки не могут быть более 6 секунд
если надо больше то разбейте задержку скажем по 2 секунды
и после каждой задержки сбрасывайте сторожевой таймер.
В этом случае задержка может быть любой.
Например, задержка в 60 секунд . делаем цикл на 30 ,
в котором сброс таймера и задержка на 2 секунды
 
Последнее редактирование:

nicelight

Member
задержки не могут быть более 6 секунд
если надо больше то разбейте задержку скажем по 2 секунды
и после каждой задержки сбрасывайте сторожевой таймер.
В этом случае задержка может быть любой.
Например, задержка в 60 секунд . делаем цикл на 30 ,
в котором сброс таймера и задержка на 2 секунды
о какой именно задержке вы имеете ввиду?
 

nicelight

Member
В общем проблему смог обойти:
1. В цикле loop() не должно быть ни каких delay()
2. Обработка сервера server.handleClient(); вызывается чем реже, тем лучше.
Я поставил один раз в 2 сек. (Через функцию millis())
3. Перед server.handleClient(); устанавливается запрет внешнего прерывания, после него снова разрешение

Получаем следующее - во время работы сервера внешнее прерывание отключено.
Если к серверу нет обращений, то время его обработки мало и вероятность потери входящих прерываний есть, но не велика
Если сервер занимается генерацией станиц, то соответственно потери прерывания больше.

Если потеря небольшого количество событий прерывания допустимо (например, событие дублируется), то данная схема рабочая
К сожалению, запрет прерываний не допустим. Мы по нему регулируем яркость свечения лампы ( фиксируется переход через ноль в сети 220 вольт четко 100 раз в секунду). при пропуске хотя бы 1 прерывания яркость лампы начинает прыгать вверх тем сильнее чем тусклее в настройках выставлена лампа.
По прежнему очень нуждаюсь в предположениях по возможному решению проблемы.
 

nikolz

Well-known member
Никто так и не разобрался с внешними прерываниями?
Делаю шлюз с датчиков 433Мгц в интернет
Подцепил библиотеку RCswich. Если HTTP сервер не запущен, все хорошо, если запущен, то постоянная перезагрузка по WDT
Если есть цикл, то поставьте в него рестарт WDT .
 

nikolz

Well-known member
Делайте на луа будет и проще писать программу и лучше работать
 

nicelight

Member
Делайте на луа будет и проще писать программу и лучше работать
Lua это еще один уровень програмного кода. на мой взгляд не лучший вариант, если планируется потом развивать проект. Можно будет утонуть в дебагинге)
 

nikolz

Well-known member
Lua это еще один уровень програмного кода. на мой взгляд не лучший вариант, если планируется потом развивать проект. Можно будет утонуть в дебагинге)
-----------------------------------
Вы это предполагаете, или есть опыт разработки на Луа?
----------------------------------
Я например пишу на луа и на СИ не только для ESP.
Могу сравнивать сложность отладки и решения задач.
--------------------------
Кроме того, андулино порождает код на порядок больше СИ.
Но значительно хуже в отладке по сравнению с Луа.
----------------------------------
Поэтому полагаю что андулино хорошо там, где нет луа и СИ.
-------------------------------
Например, для ESP на луа я подключил все датчики которые нашел на али,
с выводом по UDP на графический интерфейс на компе (тоже написал специально для ESP на луа) примерно за 5 дней.
------------------------------------
А вот софт на ESP для оптического спектрометра написал на СИ, так как необходимо было реализовать скорость управления на уровне мГц.
---------------------------------------
А Вы за сколько времени подключаете датчики на андулино?
 

nicelight

Member
-----------------------------------
....
А Вы за сколько времени подключаете датчики на андулино?
На андулино не проблема ни подключить датчики ни серверок сконфигурировать за час.
Просто в силу философии андулино, там кодинг сделан максимально удобным для не разработчиков \ не инженеров, но в итоге пораждается куча костылей и косяков побочных.
С луа не работал. Просто понимаю, что это язык выше этажом, чем Си;
а многоэтажные проекты иногда порождают непредвиденные дырки в переходах между этажами.
Есть ли у Вас опыт диммирования пассивной нагрузки 220В с детектором перехода через ноль в сети 220В по внешнему прерыванию на ESP, синициализированному на языке LUA ?
 

nicelight

Member
Есть ли у Вас опыт диммирования пассивной нагрузки 220В с детектором перехода через ноль в сети 220В по внешнему прерыванию на ESP, синициализированному на языке LUA ?
проще говоря, нужно яркостью лампы накала рулить с еспшки.)
 

nikolz

Well-known member
На андулино не проблема ни подключить датчики ни серверок сконфигурировать за час.
Просто в силу философии андулино, там кодинг сделан максимально удобным для не разработчиков \ не инженеров, но в итоге пораждается куча костылей и косяков побочных.
С луа не работал. Просто понимаю, что это язык выше этажом, чем Си;
а многоэтажные проекты иногда порождают непредвиденные дырки в переходах между этажами.
Есть ли у Вас опыт диммирования пассивной нагрузки 220В с детектором перехода через ноль в сети 220В по внешнему прерыванию на ESP, синициализированному на языке LUA ?
---------------------------------------
ардулино - это некий процессорно-независимый язык программирования , а качество его трансляции в коды конкретного микропроцессора определяется качеством созданных энтузиастами библиотек.
-----------------------------------
Луа - это виртуальная машина - интерпретатор алгоритмического языка портированного на ESP .
Как всякий алгоритмический язык, луа позволяет очень компактно написать и отладить алгоритм. Для создания программ нужен лишь редактор текста ( в отличии от андулино - где монстр-среда)
если подключаете датчик, интерфейс которого есть в nodemcu, то на луа это 5 строк .
Готовых примеров много.
-----------------------------------------------
проще говоря, нужно яркостью лампы накала рулить с еспшки.)
Задача управления осветительными или нагревательными приборами - это немного более сложная задача,
чем чтение температуры или давления.
Эту задачу я не доделал , так как не было силовой части, но лампой управлял.
 

nikolz

Well-known member

nikolz

Well-known member
вообще-то на СИ можно измерять период по прерываниям до 20 кгц. На 50 гц (20000 мкс) погрешность 15 мкс, мертвая зона управления 5 мкс. Т е управлять можно с погрешностью 0.1%
 
Никто так и не разобрался с внешними прерываниями?
Делаю шлюз с датчиков 433Мгц в интернет
Подцепил библиотеку RCswich. Если HTTP сервер не запущен, все хорошо, если запущен, то постоянная перезагрузка по WDT
WatchDog Timer. HTTP сервер вешает ESP. Проблема с библиотекой Сервера HTTP.
В общем, WDT - таймер, контролирующий зависание процессора. Если процессор завис, WDT даёт команду на перезагрузку.
 

nikolz

Well-known member
возможно, что у вашего сервера есть цикл в котором он слушает и этот цикл очень долгий.
Сделайте тоже самое что я написал выше, либо сделайте запуск сервера по таймеру.
Либо измените логику устройства. Зачем Вы помещаете сервер на устройстве?
Сервер - это сборщик данных и логичнее его размещать вне устройств.
устройства - это поставщики данных. Они должны быть клиентами.
 
Сверху Снизу