• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Таймеры

ART_HA

Member
Вроде как проясняется.
Насколько я понял, once - присутствует в версии 1.0 Ticker, а в актуальной версии 4.4 его уже нет.
Потому я в описании once и не смог найти.
И вряд ли только в этом отличие версий, там и авторы-то вроде как разные...
Если есть минутка, гляньте плиз приложенный файл. Я прав?
 

Вложения

aZholtikov

Active member
Вроде как проясняется.
Насколько я понял, once - присутствует в версии 1.0 Ticker, а в актуальной версии 4.4 его уже нет.
Потому я в описании once и не смог найти.
И вряд ли только в этом отличие версий, там и авторы-то вроде как разные...
Если есть минутка, гляньте плиз приложенный файл. Я прав?
Да. Это 2 разные библиотеки.
Первая (с once) - использует для работы "родные" функции Espressif NON-OS SDK. На "ядре" так сказать.
Вторая - чья-то поделка. Работает с помощью millis и micros с отчетом времени в loop. Ни о какой точности речи не идет.
 

enjoynering

Well-known member
Я пользуюсь ticker (идет в составе Arduino ESP8266). Отличная штука, но есть ограничение на количество тикеров (64 шт, но это не точно) и максимальное время (чуть больше 1.5 часа). Второе ограничение поборол написанием своего велосипеда. Вот два проекта где все написано на них (в loop() ничего нет) - MatrixClock и tthRelay. Так же есть пример опроса энкодера через тикер в моей библиотеке RotaryEncoder
 

ART_HA

Member
Спасибо, вроде всё получается.
Кстати, я воткнул все-таки вывод на порт в обработчики прерываний, потому как вроде бы
все возможные проблемы в этом случае связаны с работой WiFi, а он у меня в этой ветке программы отключен.
По осциллографу джиттер удовлетворительный, причем заметен по спаду импульса, а он меня не так волнует, как фронт.

Попутный вопрос, чтобы новую тему не открывать.
Насколько я понял, выходы у ESP8266 можно включать в режиме "открытый сток". А какое максимальное напряжение в этом режиме допускается?
В документации ничего по этому поводу не нашел...:(
 

aZholtikov

Active member
Насколько я понял, выходы у ESP8266 можно включать в режиме "открытый сток". А какое максимальное напряжение в этом режиме допускается?
В документации ничего по этому поводу не нашел...:(
Нашел интересную статейку по этому поводу. Возможно пригодится.
 

ART_HA

Member
Статейка действительно очень интересная. А ведь мне и надо всего лишь подать на базу эмиттерного повторителя 5В вместо 3.3В.
Уж больно соблазнительно... Рискнуть что ли?
 

aZholtikov

Active member
Статейка действительно очень интересная. А ведь мне и надо всего лишь подать на базу эмиттерного повторителя 5В вместо 3.3В.
Уж больно соблазнительно... Рискнуть что ли?
А то! А если что - претензию лично ГД Espressif. ;-)
 

ART_HA

Member
Рискну.
Потому как местный магазин на вемосы приличную скидку объявил. Цена конечно сильно не али, но уж больно вся схема упрощается.
 

enjoynering

Well-known member
Я даже с работающим wifi в ticker вывожу в serial порот. Знаю что, это не рекомендуется, но если сообщение не большое (60..150) символов, то на скорости 115200 у меня проблем с wifi и watchdog не было.

ESP8266 легко периваривает 5в, но есть нюанс. Главное ограничить ток (с помощью включённого последовательно с портом резистора) чтобы не пробило защитный диод внутри порта.
 

enjoynering

Well-known member
Больше всего падений наблюдается от ticker + i2c (который у ESP8266 софтовый bit bang). Пока лечу добавлением всех критически функций обращения к i2c в IRAM.
 

ART_HA

Member
ESP8266 легко периваривает 5в, но есть нюанс. Главное ограничить ток (с помощью включённого последовательно с портом резистора) чтобы не пробило защитный диод внутри порта.
И на какой максимальный ток рассчитывать? Не более 20мА?
 

ART_HA

Member
Зачем последовательно с выходом включать резистор, когда с открытым стоком сопротивление резистора подтяжки к 5В и так ток очень сильно ограничивает?
 

ART_HA

Member
В итоге (резистор от +5В с USB номиналом 2,2к):
Порты D1, D2, D3, D5 и D7 в схеме с открытым стоком функционируют нормально.
Остальные косячат, но по схеме видно почему.
 

enjoynering

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

ART_HA

Member
Я не об этом.
Например D4 и D6 снижают напряжение до 3В, а D8 - до 4В.
Особенности платы D1 mini.
 

ART_HA

Member
Поставил в тело программы АЦП и... получил абракадабру, очень похожую на конфликт прерываний с Ticker.
Правильно ли я понимаю, что analog.Read(A0) использует программное прерывание, и если да, то как изменить его приоритет?
Подозреваю, что аппаратное прерывание по однократному запуску таймера1 имеет высокий приоритет, а вот программные прерывания
по окончанию работы таймеров 1 и 2 и прерывание с АЦП по приоритетам равнозначны.
В данной задаче скорость работы АЦП для меня совершенно некритична, и WiFi тоже не запущен.
Попробовал по аналогии с WiFi поставить в тело программы delay(10), и заработало нормально, за исключением края диапазона.
В крайнем случае такое решение проблемы использовать можно, но уж слишком он ИМХО колхозный.
Нет ли более цивилизованного решения?
 

aZholtikov

Active member
Поставил в тело программы АЦП и... получил абракадабру, очень похожую на конфликт прерываний с Ticker.
Правильно ли я понимаю, что analog.Read(A0) использует программное прерывание, и если да, то как изменить его приоритет?
Подозреваю, что аппаратное прерывание по однократному запуску таймера1 имеет высокий приоритет, а вот программные прерывания
по окончанию работы таймеров 1 и 2 и прерывание с АЦП по приоритетам равнозначны.
В данной задаче скорость работы АЦП для меня совершенно некритична, и WiFi тоже не запущен.
Попробовал по аналогии с WiFi поставить в тело программы delay(10), и заработало нормально, за исключением края диапазона.
В крайнем случае такое решение проблемы использовать можно, но уж слишком он ИМХО колхозный.
Нет ли более цивилизованного решения?
Не видя самого кода трудно сказать.
analog.Read(A0) в обработчике события таймера?
 
Сверху Снизу