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

AC Dimmer 220 на Wemos D1 R2 (esp8266)

enjoynering

Well-known member
Если использовать чип с определителем нуля внутри то надо использовать алгоритм с неравномерным пропуском импульсов( алгоритм Брезенхема).
Алгоритм Брезенхема для регулирования мощности
все верно. если не использовать Алгоритм Брезенхема, то возникает ситуация когда вы посылаете о-о-очень короткие импульсы на открытие и они попадают на переход нуля, а если еще кратные 50гц то вообще труба. отсюда и мерцания.

некоторые тупо задержку ставят тем самым гарантируют, что из перехода одной полу-волны в другую хоть раз да сработает. я такое осуждаю
Код:
analogWrite(pinFan, 2);
delayMicroseconds(6700); //(1 / 50hz) / 3 = 6700, за один период напряжение проходит через ноль 3 раза
 
Последнее редактирование:

alxnovo

New member
Сегодня RoboDyn прислан новость, что они выложили библиотеку на ГитХабе для своего модуля димера AC Light Dimmer Module, правда, только для Arduino

 

homemonster

New member
Вот код:
/**************

* ---------------------- OUTPUT & INPUT Pin table ---------------------

* +---------------+-------------------------+-------------------------+
* | ESP8266 | D1(IO5), D2(IO4), | D0(IO16), D1(IO5), |
* | | D5(IO14), D6(IO12), | D2(IO4), D5(IO14), |
* | | D7(IO13), D8(IO15), | D6(IO12), D7(IO13), |
* | | | D8(IO15) |
* +---------------+-------------------------+-------------------------+

*/

#include <RBDdimmer.h>//

//#define USE_SERIAL SerialUSB //Serial for boards whith USB serial port
#define USE_SERIAL Serial
#define outputPin D6
#define zerocross D5 // for boards with CHANGEBLE input pins

dimmerLamp dimmer(outputPin, zerocross); //initialase port for dimmer for ESP8266, ESP32, Arduino due boards

int outVal = 0;

void setup() {
USE_SERIAL.begin(9600);
dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)
}

void loop()
{
outVal = map(analogRead(0), 1, 1024, 100, 0); // analogRead(analog_pin), min_analog, max_analog, 100%, 0%);
USE_SERIAL.println(outVal);
dimmer.setPower(outVal); // name.setPower(0%-100%)
}
Выдает это в порт:
00:37:45.290 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
00:37:45.359 -> ⸮g⸮ISR not in IRAM!
00:37:45.428 ->
00:37:45.428 -> User exception (panic/abort/assert)
00:37:45.481 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
00:37:45.539 ->
00:37:45.539 -> Abort called
00:37:45.574 ->
00:37:45.574 -> >>>stack>>>
00:37:45.574 ->
00:37:45.574 -> ctx: cont
00:37:45.609 -> sp: 3ffffed0 end: 3fffffc0 offset: 0000
00:37:45.643 -> 3ffffed0: feefeffe feefeffe feefeffe feefeffe
00:37:45.677 -> 3ffffee0: 000000fe 00000000 00000000 00000000
00:37:45.745 -> 3ffffef0: 00000000 00000000 00000000 00ff0000
00:37:45.814 -> 3fffff00: 5ffffe00 5ffffe00 00000020 00000000
00:37:45.850 -> 3fffff10: 00000002 0000000e 0000000e 40202056
00:37:45.919 -> 3fffff20: 4010072e 3ffef454 3ffef43c 40202068
00:37:45.954 -> 3fffff30: 0000001c 00002580 0000000e 402025b9
00:37:46.022 -> 3fffff40: 00000000 40203075 ffffffff 00000001
00:37:46.056 -> 3fffff50: feefeffe 00000001 3ffee5ec 3ffee654
00:37:46.125 -> 3fffff60: 3fffdad0 00000000 0000000e 40202668
00:37:46.159 -> 3fffff70: 00000000 feefeffe feefeffe 4020125d
00:37:46.194 -> 3fffff80: 00002580 0000001c 3ffee35c 40201296
00:37:46.261 -> 3fffff90: 3fffdad0 00000000 3ffee614 40201042
00:37:46.294 -> 3fffffa0: feefeffe feefeffe feefeffe 40201c5c
00:37:46.362 -> 3fffffb0: feefeffe feefeffe 3ffe84ec 40101029
00:37:46.396 -> <<<stack<<<


Правильно я понимаю, что не будет с вемосом этот код работать, потому как ISR у него нет?
Благодарю!
 

homemonster

New member
Вопрос решен, Откатился на 2.4.2...
Или нужно объявить тип функции... void ICACHE_RAM_ATTR function(); но какой?
 

evgen555666

New member
Вопрос решен, Откатился на 2.4.2...
Или нужно объявить тип функции... void ICACHE_RAM_ATTR function(); но какой?
в библиотеке есть функция
isr_ext()
вот там надо чтоб было вот так

JavaScript:
void ICACHE_RAM_ATTR isr_ext()
{
    for (int i = 0; i < current_dim; i++ )
        if (dimState[i] == ON)
        {
            zeroCross[i] = 1;
        }
}
 
Сверху Снизу