pvvx, доброй ночи!
Не подскажите еще пару моментов, по работе с GPIO.
Собрал небольшой модуль диммера для отладки, с немного другой схемой отслеживания перехода через 0. вот сама схема.
Модуль диммера подключаю к плате
https://arduino.ua/prod1492-wi-fi-modyl-nodemcu-esp8266
Для чистоты эксперимента решил использовать выводы D1 - для ZCD, D2 - для симистора. Это соответственно выводы GPIO5 и GPIO4
Для подключения к другим выводам сделал следующие изменения в программе:
#define GPIO_PIN4_CFG (*(volatile uint32_t *)0x60000338)
static const int GPIO_OUT = 4; // GPIO4
static const int GPIO_IN = 5; // GPIO5
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5);
GPIO_PIN4_CFG &= ~BIT(2); // normal out (push-pull)
Вопрос вот в чем. В коде который Вы мне дали ранее для выбора режима открытый коллектор или нормальный использовался такой код:
GPIO_PIN2_CFG &= ~BIT(GPIO_OUT); // normal out (push-pull)
Мне непонятно, почему для сброса бита 2 используется такая конструкция ~BIT(GPIO_OUT);
А если мне нужно использовать не 2-й пин, а 4-й? То для изменения режима выхода все равно нужно использовать бит 2?
И еще вопрос, вот осциллограмма управляющего импульса и переходов через 0
Почему-то амплитуда управляющего импульса 1,5 В, а не 3В. Светодиод оптрона подключен напрямую к пину GPIO4. В ранее использовавшейся схему на пине 2 была подтяжка 10к к питанию. Здесь ее тоже нужно было использовать?