• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Помехозащищенность выносной кнопки

hc2hunter

Member
Кода увы нет, использую как всегда прошивку готовую, от WiFi-IOT. :(
Но тут я пробовал уже перебрать все возможные варианты сборок на разных SDK, и даже пробовал на базе RTOS. Глюк всегда одинаков. И больше похож на схемотехнический, нежели программный.

Да, было с самого начала.
Блок питания электроники использую на +5. Менял совершенно на другой, и другого типа, не помогло. На выходе него перед регулятором 3.3 поставил электролит на 1500 мкФ 16в, не отразилось на работе вообще никак.

Честно говоря, что это именно глюк связанный с ADC я недавно обнаружил. Поначалу грешил на свою бешеную нагрузку в виде ТЭНа и насоса.
Потом случайно наткнулся прямо "на столе", что глюк воспроизводим вовсе без нагрузки...

Кстати, сами герконы подключены обычной UTP. Это не ошибка? Взял обычную витушку 8-ку и выделил в ней 3 пары под геркончики, ну и протянул до бака.
Витуха примерно метр получилась.
 

nikolz

Well-known member
Кода увы нет, использую как всегда прошивку готовую, от WiFi-IOT. :(
Но тут я пробовал уже перебрать все возможные варианты сборок на разных SDK, и даже пробовал на базе RTOS. Глюк всегда одинаков. И больше похож на схемотехнический, нежели программный.

Да, было с самого начала.
Блок питания электроники использую на +5. Менял совершенно на другой, и другого типа, не помогло. На выходе него перед регулятором 3.3 поставил электролит на 1500 мкФ 16в, не отразилось на работе вообще никак.

Честно говоря, что это именно глюк связанный с ADC я недавно обнаружил. Поначалу грешил на свою бешеную нагрузку в виде ТЭНа и насоса.
Потом случайно наткнулся прямо "на столе", что глюк воспроизводим вовсе без нагрузки...

Кстати, сами герконы подключены обычной UTP. Это не ошибка? Взял обычную витушку 8-ку и выделил в ней 3 пары под геркончики, ну и протянул до бака.
Витуха примерно метр получилась.
понимаю в чужой монастырь со своим уставом не ходят,
но я бы измерил количество воды в бочке емкостным датчиком и не использовал ацп.
---------------
АЦП используется в работе WiFi и возможно вы некорректно его используете.
использую АЦП лишь для измерения напряжения питания, в самом начале программы.
 

hc2hunter

Member
понимаю в чужой монастырь со своим уставом не ходят,
но я бы измерил количество воды в бочке емкостным датчиком и не использовал ацп.
---------------
АЦП используется в работе WiFi и возможно вы некорректно его используете.
использую АЦП лишь для измерения напряжения питания, в самом начале программы.
Да нет, отчего же не ходят... Я вполне лоялен к любой критике и советам, не являясь глубоким специалистом в микроэлектронике.
Расскажите, пожалуйста, про емкостной датчик и что использовать тогда вместо АЦП? Несколько Gpio IN ?

А как используется АЦП в работе WiFi и зачем так сделано?
И как можно использовать АЦП некорректно? Я подобрал резисторы так, чтобы на нем ни при каких обстоятельствах не появлялось напряжение выше 0,92в, да и номиналы взял, чтобы токи были поменьше.
В солнечной станции (другой проект) по аналогичному принципу у меня прекрасно работает АЦП и меряет напряжение на аккумуляторе 18650.

Тут я допускаю, что какая-то статика попадает на АЦП. Но какая? И можно ли как-то предохраниться, поставив, скажем, какие-то доп. ёмкости на вход АЦП?


Вообще, пока я решил проблему очень грубо и тупо...
Взял и вставил проверку на значение АЦП=1024. Как только такая фигня случается - делаю reboot()
 

nikolz

Well-known member
Да нет, отчего же не ходят... Я вполне лоялен к любой критике и советам, не являясь глубоким специалистом в микроэлектронике.
Расскажите, пожалуйста, про емкостной датчик и что использовать тогда вместо АЦП? Несколько Gpio IN ?

А как используется АЦП в работе WiFi и зачем так сделано?
И как можно использовать АЦП некорректно? Я подобрал резисторы так, чтобы на нем ни при каких обстоятельствах не появлялось напряжение выше 0,92в, да и номиналы взял, чтобы токи были поменьше.
В солнечной станции (другой проект) по аналогичному принципу у меня прекрасно работает АЦП и меряет напряжение на аккумуляторе 18650.

Тут я допускаю, что какая-то статика попадает на АЦП. Но какая? И можно ли как-то предохраниться, поставив, скажем, какие-то доп. ёмкости на вход АЦП?


Вообще, пока я решил проблему очень грубо и тупо...
Взял и вставил проверку на значение АЦП=1024. Как только такая фигня случается - делаю reboot()
некорректно используется АЦП не аппаратно а программно.
Возможно у вас все нормально, программы же нет.
Кроме того не понятно зачем у вас АЦП используется если измеряете три точки с помощью герконов
т е схема дискретная почему бы не читать код герконов
 

hc2hunter

Member
Кроме того не понятно зачем у вас АЦП используется если измеряете три точки с помощью герконов
т е схема дискретная почему бы не читать код герконов
Да, идея верная. Сходу наверное я просто не додумался до нее и теперь просто GPIO экономлю...
Их ведь не так много, а смотрите что получается:
gpio0 - датчик температуры воды
gpio2 - лампочка-индикатор состояния/работы девайса
gpio1,3 - под SPI отдан, на них висит BME280 и дисплей
gpio4,5 - кнопки принудительного включения реле насоса и тэна
gpio 12,13 - сами реле
gpio 14,15 - логические gpio, используются во встроенном в прошивке интерпретаторе как статусные пины. Кроме того gpio15 он вообще как input не очень... Он же определяет тип загрузки девайса и обычно висит на земле через резистор.

вот и остается только ADC...
я могу, конечно, высвободить от кнопок gpio4,5 , а сами кнопки переделать как раз через ADC (аналоговые кнопки).
и опять же где гарантия не нарваться на этот странный глюк?
 

nikolz

Well-known member
Да, идея верная. Сходу наверное я просто не додумался до нее и теперь просто GPIO экономлю...
Их ведь не так много, а смотрите что получается:
gpio0 - датчик температуры воды
gpio2 - лампочка-индикатор состояния/работы девайса
gpio1,3 - под SPI отдан, на них висит BME280 и дисплей
gpio4,5 - кнопки принудительного включения реле насоса и тэна
gpio 12,13 - сами реле
gpio 14,15 - логические gpio, используются во встроенном в прошивке интерпретаторе как статусные пины. Кроме того gpio15 он вообще как input не очень... Он же определяет тип загрузки девайса и обычно висит на земле через резистор.

вот и остается только ADC...
я могу, конечно, высвободить от кнопок gpio4,5 , а сами кнопки переделать как раз через ADC (аналоговые кнопки).
и опять же где гарантия не нарваться на этот странный глюк?
Вы посмотрите на форуме, я рассказывал как кучу кнопок подключить к одному пину.
Можно и ваши герконы включить по такому же принципу.
Прикиньте сколько пинов у вас освободится.
Но придется делать прогу чтения кнопок и чтения герконов
 

nikolz

Well-known member
относительно глюка.
расскажите подробнее что и как и когда
возможно будет понятно в чем проблема
 

hc2hunter

Member
относительно глюка.
расскажите подробнее что и как и когда
возможно будет понятно в чем проблема
Да вот вообще никаких нюансов...
Снимаю девайс, несу на стол. Включаю. Соответственно, к нему ничего не подключено вообще.
Сбоку корпуса торчит колодочка 6 штырьков (на 3 датчика). Схемка выше. 3 пина - земля, 3 пина - датчики. Вон в положении MAX как раз черный джампер на фото.
насос блок управления.jpg
Просто замыкаю их отверточкой или пинцетом. На экране соответственно он у меня рисует сколько "воды в баке". Обрабатывает данные каждую секунду.

И в один прекрасный момент опс... и он постоянно думает что у него ADC=1024 (максимум воды). В этот момент он перестает пинговаться. Хотя автономно работает по-прежнему прекрасно. Можно, например, включать кнопками реле. Дисплей тоже видно что отрисовывается. Меняется температура с датчиков, аптайм... Но на ADC (датчики уровня воды) уже не реагирует никак...

-----

Буду признателен, если ткнете носом с ссылочку, где вы подключали к одному GPIO несколько кнопок.
Написать подпрограмму я в принципе тоже могу, т.к. в прошивке WiFi-IOT есть интересная фича - интерпретатор. Некий встроенный язык команд, чтобы можно было писать свои скрипты и запускать их с определенным интервалом. Именно через интерпретатор я обрабатываю датчики, отрисовываю на экран бачок с водой, и ребучу модуль если вдруг случается ADC=1024.
 

nikolz

Well-known member
Да вот вообще никаких нюансов...
Снимаю девайс, несу на стол. Включаю. Соответственно, к нему ничего не подключено вообще.
Сбоку корпуса торчит колодочка 6 штырьков (на 3 датчика). Схемка выше. 3 пина - земля, 3 пина - датчики. Вон в положении MAX как раз черный джампер на фото.
Посмотреть вложение 7447
Просто замыкаю их отверточкой или пинцетом. На экране соответственно он у меня рисует сколько "воды в баке". Обрабатывает данные каждую секунду.

И в один прекрасный момент опс... и он постоянно думает что у него ADC=1024 (максимум воды). В этот момент он перестает пинговаться. Хотя автономно работает по-прежнему прекрасно. Можно, например, включать кнопками реле. Дисплей тоже видно что отрисовывается. Меняется температура с датчиков, аптайм... Но на ADC (датчики) уже не реагирует никак...


Буду признателен, если ткнете носом с ссылочку, где вы подключали к одному GPIO несколько кнопок.
Написать подпрограмму я в принципе тоже могу, т.к. в прошивке WiFi-IOT есть интересная фича - интерпретатор. Некий встроенный язык команд, чтобы можно было писать свои скрипты и запускать их с определенным интервалом. Именно через интерпретатор я обрабатываю датчики, отрисовываю на экран бачок с водой, и ребучу модуль если вдруг случается ADC=1024.
про это будем думать.
------------------
пока расскажу про емкостной датчик. Упрощенно
---------------------
я делал датчик для измерения заполнения бутылки
сам датчик элементарный
два провода(пластины) изолированных.
между ними промежуток
это конденсатор
между проводами у нас есть вещество с диэлектрическими свойствами
для воздуха это 1 для воды это 81
погружая в воду мы изменяем объем пространства между проводами заполненный воздухом
в результате емкость меняется
измеряем ее и получаем количество воды в бутылке, пластиковой бочке
если бочка железная то надо один провод.
Примерно так
 

hc2hunter

Member
в результате емкость меняется
измеряем ее и получаем количество воды в бутылке, пластиковой бочке
если бочка железная то надо один провод.
Эм... да. Все понятно. Но куда сгружать данные о емкости? Опять же ADC нужен?
Или из нескольких GPIOIN городить дискретную шаговую логику типа 0,1,2,3 ?
 

nikolz

Well-known member
Эм... да. Все понятно. Но куда сгружать данные о емкости? Опять же ADC нужен?
Или из нескольких GPIOIN городить дискретную шаговую логику типа 0,1,2,3 ?
емкость измеряется через пин
путем измерения либо периода либо частоты (зависит от реализации метода)
 

nikolz

Well-known member
относительно вашего глюка
у вас ESP всегда активно?
можете сделать прошивку с отключенным wifi заблокировать передачу и подключение.
и повторить свой эксперимент с включением герконов
 

hc2hunter

Member
Да, ESP работает пожизненно. Спящие режимы не используются.
В принципе могу в самой прошивке сделать "WiFi disable". Тогда она останется наедине с собой )))

Но и вернуть к жизни видимо придется уже только перепрошивкой... Или изобрести какую-нибудь фигню, чтобы WiFi включался как-то через нажатие какой-нибудь кнопки )
 

hc2hunter

Member
Да, ESP работает пожизненно. Спящие режимы не используются.
В принципе могу в самой прошивке сделать "WiFi disable". Тогда esp останется наедине с собой )))

wifi.PNG

Но и вернуть к жизни видимо придется уже только перепрошивкой... Или изобрести какую-нибудь фигню, чтобы WiFi включался как-то через нажатие какой-нибудь кнопки )

В принципе, уже написал подробное письмо изобретателю прошивки МаксуMS. Может что-то ответит путное...
 

hc2hunter

Member
В общем, ответил мне создатель прошивки WiFi-IOT.
Пишет, что работа WiFi зависит от ADC программным образом (заложено в SDK), а ADC в свою очередь зависит от калибровки. Поэтому дополнительно при прошивке модуля рекомендуется зашивать калибровочную таблицу, цитирую из документации:
Прошивка файла ESP INIT DATA
Рекомендуется прошить в модуль файл esp_init_data_default.bin с калибровками по умолчанию, эти настройки влияют на работу wifi и adc. В большинстве случаев модули работают корректно без этого файла. Последние SDK могут вообще не запускаться без данного файла.

Адрес прошивки файла зависит от установленного размера flash памяти:
0x7c000 для 512 kB.
0xfc000 для 1 MB.
0x3fc000 для 4 MB.
0xffc000 для 16 MB.

Так же данные настройки можно загрузить подав GET команду http://[IP]/configinit?def=1 , последние SDK сами прописывают данные настройки.
Правда, по его мнению выскакивание ADC в 1024 это глюк контроллера, не должно такого быть. По поводу того, что на совершенно двух разных контроллерах глюк проявился - разводит руками.

Скажу честно, не пробовал это делать, на старой схеме, где ADC использовал в качестве измерителя уровня воды. Т.к. схему уже переделал на битовую маску по GPIO4-5, а ADC теперь использую для кнопок управления. На столе пока все работает превосходно, сегодня попробую установить контроллер на насос.

Вот схемка измерения воды. Датчики на герконах пришлось ориентировать кого куда - часть поплавками вверх, часть вниз, а то если делать все совсем красиво, то 2-мя gpio никак не отделаться...
схема герконы форум.png
 

=AK=

New member
Последовательно с входным пином (т.е. с пином АЦП) поставьте резистор, скажем, 1к. У вас наносекундные помехи отшибают процессору рога. Ситуация аналогичная той, что у вас былa раньше, но вы, похоже, так ничему и не научились.
 

hc2hunter

Member
Последовательно с входным пином (т.е. с пином АЦП) поставьте резистор, скажем, 1к.
Ну как не научился... Чему-то учусь постепенно... :(
Но просто от ADC такого симптома не ожидал.

А не просветите, какого рода именно возникновение этих помех в цепи ADC ? Откуда они там берутся. Ведь глюк происходит вовсе не в моменты работы насоса или тэна или щелканья релюшками. А просто так... при срабатывании герконов. Неужели их "дребезг" контактов может ADC доводить до суицида?
 

=AK=

New member
Ну как не научился... Чему-то учусь постепенно... :(
Но просто от ADC такого симптома не ожидал.

А не просветите, какого рода именно возникновение этих помех в цепи ADC ? Откуда они там берутся. Ведь глюк происходит вовсе не в моменты работы насоса или тэна или щелканья релюшками. А просто так... при срабатывании герконов. Неужели их "дребезг" контактов может ADC доводить до суицида?
Механические контакты дребезжат, будь то геркон или пинцет. Создают маломощные помехи очень крутыми фронтами.
 

nikolz

Well-known member
Ну как не научился... Чему-то учусь постепенно... :(
Но просто от ADC такого симптома не ожидал.

А не просветите, какого рода именно возникновение этих помех в цепи ADC ? Откуда они там берутся. Ведь глюк происходит вовсе не в моменты работы насоса или тэна или щелканья релюшками. А просто так... при срабатывании герконов. Неужели их "дребезг" контактов может ADC доводить до суицида?
можно сделать на герконах к одному пину.
Рисовать схему лень.
Нарисуйте сами,
расскажу на пальцах,
как я синтезирую такие схемы.
------------------------------------
Итак начнем.
Идея таких схем состоит в том, что мы коммутируем герконом или кнопкой RC цепочку к пину.
Все герконы подключаются к одному пину, а второй конец каждого геркона через RC цепочку (R параллельно C) подключаем на землю.
для вашего случая все RC цепочки одинаковые
когда бочка заполняется герконы последовательно включаются снизу вверх и наоборот выключаются когда бочка опустошается
В результате к пину подключаются: нет, одна или параллельно две или три или ...надцать RC цепей.
----------------------
В программе мы реализуем следующий алгоритм
Включаем пин на вывод и выводим импульс .
Длительность зависит от величины C .
Для начала хватит 10 мкс.
После этого переключаем пин на ввод и измеряем время от High до Low на пине
Измерять можно прерыванием, либо прямым измерением по циклу.
Для различного числа включенных герконов получите различное время.
можете и десять герконов поставить.
-------------
аналогично делается и с кнопками, но там другая логика так как кнопки включаются одиночно.
Поэтому и схема будет другой, но пин будет один для надцать кнопок.
---------------
Успехов
 

nikolz

Well-known member
можно делать схемы в которых напряжение будет меняться в обратную сторону т е емкость будет заряжаться.
 
Сверху Снизу