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

Нужна помощь Аппаратный таймер

alexsk

New member
Всем привет!

Собираю wi-fi диммер для ламп накаливания. Если кто не в курсе, то основная задача, генерировать короткий (~40 микросекунд) импульс раз в 10 миллисекунд (при прохождении синусоиды через ноль) с задержкой 500-9000 микросекунд. Очевидно, что нормальное решение на таймерах. В качестве концепта сделал реализацию на os_timer - в целом работает, но точности таймера явно не хватает (задержки гуляют с разбросом в 500-2500 микросекунд), из-за чего есть заметное мерцание ламп.

Попробовал перевести на аппаратный таймер (пример взял отсюда: GitHub - Theb-1/ESP8266-wifi-light-dimmer ), в итоге калбэк таймера не вызывается никогда. Код hw_timer полностью взял из примера, в setup() инициализирую аппаратный таймер так же как в примере:
Код:
setup ()
{
...
  hw_timer_init(NMI_SOURCE, 0);
  hw_timer_set_func(dimTimerISR);
...
}
В обработчике перехода через ноль вызываю hw_timer_arm(dimDelay), по аналогии с примером, но dimTimerISR никогда не вызывается.

Подскажите, в чем может быть проблема? Если это поможет, могу выложить полный код скетча. Платка, с которой эксперементирую - esp01.

И более общий вопрос: я не совсем понимаю, как устроен порт esp sdk для Arduino IDE. В документации sdk упомянаются функции работы с аппаратным таймером, но из скетча Arduino IDE они по какой-то причине не доступны и их нужно реализовать - содержимое hw_timer.с для меня выглядит как магия. Есть ли где-нибудь описание того, как это работает и почему нельзя напрямую обращаться к espressif sdk? Или как это правильно делать?
 

Сергей_Ф

Moderator
Команда форума
@nikolz
Так в тех hw_timer.h и hw_timer.c именно это и написано. Зачем это к себе в код вставлять?
@alexsk
У меня подозрение, что дело в инициализации.
hw_timer_init(NMI_SOURCE, 0)
Вы уверены, что это то что вам нужно?
 

alexsk

New member
Внимательно посмотрел на код, нашел в чем проблема. С таймером не связано. Исправил, все отлично заработало. Спасибо)
 

Гриша37

New member
Внимательно посмотрел на код, нашел в чем проблема. С таймером не связано. Исправил, все отлично заработало. Спасибо)
Доброго времени суток! Тоже заинтересовался эти примером, не могли бы вы пояснить в чем все таки была проблема?
 
Последнее редактирование:
Сверху Снизу