Здравствуйте, разбираю пример из UDK проект gpio16_led
Адаптирую проект для диммирования лампочки.
Схема отсюда ESP8266 Projects: P3 - WIFI Mains Power Dimmer / Switch with CBDBv2
Код:
Проблемы:
1) зависает при попытке запустить прерывания, потом WDT сбрасывает, и так пока не заработает норлмально, в среднем и 5 попыток включается нормально 1 раз.
вывод UART
[off]
[/off]
2) Когда все таки заработало нормально, Периодически лампа начинает моргать, вызвано тем что проц не посылает почему-то сигнал о включении лампочки.
Данные осциллографа - P_20160701_150728.jpg (пс. не вставляется картинка)\
Видео - V_20160701_152528.mp4
видно как моргает в начале и в конце
3) Подскажите как мне передать параметр в колбек таймера, пытался не получилось, чтобы сделать один колбек для 2 таймеров с параметром включения или выключения, вместо 2х функций как сейчас. Спасибо!
Адаптирую проект для диммирования лампочки.
Схема отсюда ESP8266 Projects: P3 - WIFI Mains Power Dimmer / Switch with CBDBv2
Код:
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "os_type.h"
#include "user_interface.h"
#include "driver/uart.h"
#include "driver/gpio16.h"
extern int ets_uart_printf(const char *fmt, ...);
int (*console_printf)(const char *fmt, ...) = ets_uart_printf;
extern uint8_t pin_num[GPIO_PIN_NUM];
#define GPIO_ZERO_PIN 1 // GPIO5
#define GPIO_LAMP_PIN 2 // GPIO4
#define USE_US_TIMER
#define LAMP_GPIO_DELAY 20 // microseconds
const char *gpio_type_desc[] =
{
"GPIO_PIN_INTR_DISABLE (DISABLE INTERRUPT)",
"GPIO_PIN_INTR_POSEDGE (UP)",
"GPIO_PIN_INTR_NEGEDGE (DOWN)",
"GPIO_PIN_INTR_ANYEDGE (BOTH)",
"GPIO_PIN_INTR_LOLEVEL (LOW LEVEL)",
"GPIO_PIN_INTR_HILEVEL (HIGH LEVEL)"
};
LOCAL os_timer_t lamp_timer;
void lamp_timer_cb (void *arg){
gpio_write(GPIO_LAMP_PIN, 0);
}
void ICACHE_FLASH_ATTR intr_callback(unsigned pin, unsigned level) {
gpio_write(GPIO_LAMP_PIN, 1);
os_timer_disarm(&lamp_timer);
os_timer_setfn(&lamp_timer, (os_timer_func_t *)lamp_timer_cb, (void *)0);
ets_timer_arm_new(&lamp_timer, LAMP_GPIO_DELAY, 0, 0);
}
void init_done(void)
{
GPIO_INT_TYPE gpio_type;
// Set Wifi softap mode
wifi_station_disconnect();
wifi_station_set_auto_connect(0);
wifi_set_opmode(SOFTAP_MODE);
if (set_gpio_mode(GPIO_LAMP_PIN, GPIO_PULLDOWN, GPIO_OUTPUT)) {
console_printf("GPIO%d set GPIO_OUTPUT mode\r\n", pin_num[GPIO_LAMP_PIN]);
} else {
console_printf("Error: GPIO%d not set GPIO_OUTPUT mode\r\n", pin_num[GPIO_LAMP_PIN]);
}
gpio_write(GPIO_LAMP_PIN, 0);
gpio_type = GPIO_PIN_INTR_POSEDGE;
if (set_gpio_mode(GPIO_ZERO_PIN, GPIO_PULLUP, GPIO_INT)) {
console_printf("GPIO%d set interrupt mode\r\n", pin_num[GPIO_ZERO_PIN]);
if (gpio_intr_init(GPIO_ZERO_PIN, gpio_type)) {
console_printf("GPIO%d enable %s mode\r\n", pin_num[GPIO_ZERO_PIN], gpio_type_desc[gpio_type]);
gpio_intr_attach(intr_callback);
} else {
console_printf("Error: GPIO%d not enable %s mode\r\n", pin_num[GPIO_ZERO_PIN], gpio_type_desc[gpio_type]);
}
} else {
console_printf("Error: GPIO%d not set interrupt mode\r\n", pin_num[GPIO_ZERO_PIN]);
}
}
void user_rf_pre_init(void){}
void user_init(void) {
system_timer_reinit();
system_init_done_cb(init_done);
}
1) зависает при попытке запустить прерывания, потом WDT сбрасывает, и так пока не заработает норлмально, в среднем и 5 попыток включается нормально 1 раз.
вывод UART
[off]
Код:
ets Jan 8 2013,rst cause:2, boot mode:(
ets Jan 8 2013,rst cause:1, boot mode:(3,7)
load 0x40100000, len 26668, room 16
tail 12
chksum 0x25
ho 0 tail 12 room 4
load 0x3ffe8000, len 996, room 12
tail 8
chksum 0x63
load 0x3ffe83e8, len 668, room 0
tail 12
chksum 0x43
csum 0x43
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 enable GPIO_PIN_INTR_POSEDGE (UP)¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 enable GPIO_PIN_INTR_POSEDGE (UP) mod¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 enable GPIO_PIN_INTR_POSEDGE (UP) ¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 enable GPIO_PIN_INTR_P¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 enable GPI¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 ena¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode [B]// в этом моменте зависает[/B]
¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode[B] // в этом моменте зависает[/B]
¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
G¢@*r…ÄP±µ±Kít¥dr×.@éù.©Ñª¡Ko8a /tµ$v'áêÉ*±T±±±©©ÄP«¯±@íù*±…¢ünzA¬‰8xºvA,P%!ù(¡‡(A¬¡{~An êÉ*±R·*±±@j|±C©µù*±¢ünzAl )ém~±T[!ù(P±+tÇmX@j|½Å*µù*±‰ønzA¬‰8xºvA,T[ár§(±Õ¢ü
SDK ver: 1.5.0 compiled @ Nov 27 2015 13:37:51
phy ver: 484, pp ver: 9.5
mode : softAP(1a:fe:34:a1:4a:1a)
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
GPIO4 set GPIO_OUTPUT mode
GPIO5 set interrupt mode
GPIO5 enable GPIO_PIN_INTR_POSEDGE (UP) mode [B]// сдесь код сработал корректно[/B]
2) Когда все таки заработало нормально, Периодически лампа начинает моргать, вызвано тем что проц не посылает почему-то сигнал о включении лампочки.
Данные осциллографа - P_20160701_150728.jpg (пс. не вставляется картинка)\
Видео - V_20160701_152528.mp4
видно как моргает в начале и в конце
3) Подскажите как мне передать параметр в колбек таймера, пытался не получилось, чтобы сделать один колбек для 2 таймеров с параметром включения или выключения, вместо 2х функций как сейчас. Спасибо!