Tryb konfiguracji i reset układu - soft1.8.2

Awatar użytkownika
Espablo
Posty: 1465
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontaktowanie:

wt sty 24, 2017 10:33 pm

Witam
Chciałem mieć w module V2 z tego wątku viewtopic.php?f=24&t=340 dodatkową opcję. Wymyśliłem sobie, że układ ma 2 przekaźniki, 2 wejścia typu BUTTON-SWITCH, 1 - config, 1 - DS18B20 oraz 2 wejścia typu SENSOR.
Przekaźniki działają, przyciski działają w 2 ustawieniach BUTTON i SWITCH prawidłowo, wejścia SENSOR działają prawidłowo, odczyt temperatury prawidłowy.

Problem jest z przyciskiem konfiguracji. Jedno z wejść SENSOR jest na tym samym GPIO4, na którym znajduje się przycisk konfiguracji. Dla tego też konfiguracja jest na stałe w trybie SWITCH, czyli naciskamy x 10 w ciągu 5s. W momencie kiedy układ powinien wejść w tryb konfiguracji resetuje się.
W Putty wygląda jakby serwer dhcp startował dwa razy, potem występuje jakby przepełnienie stosu i układ się resetuje.
cfg_mode.jpg
cfg_mode.jpg (61.31 KiB) Przejrzano 2188 razy
Zauważyłem jeszcze jedno, że układ da się wprowadzić w tryb konfiguracji w momencie podłączania do sieci, podobne zjawisko zaobserwował @Zybi w module ZAMELA. Opisał je tutaj viewtopic.php?f=11&t=411&start=90#p7416.
Mogę bez problemu uruchomić tryb konfiguracji naciskając przedtem reset, a potem 10x CONFIG, lub można to zrobić wciskając 10x CONFIG - układ sam się zresetuje i jeszcze raz 10x CONFIG.

W definicji płytek mam następujące ustawienia:

Kod: Zaznacz cały

#define B_RELAY1_PORT		5
#define B_RELAY2_PORT    	13

#define B_CFG_PORT        	4

#define B_BTN1_PORT		14
#define B_BTN2_PORT		12

#define B_SENSOR_PORT1     	4
#define B_SENSOR_PORT2     	16

#define DS18B20
#define TEMPERATURE_CHANNEL 	2

Kod: Zaznacz cały

/*

void supla_esp_board_gpio_init(void) {
		

	supla_input_cfg[0].type = supla_esp_cfg.Button1Type == BTN_TYPE_SWITCH ? INPUT_TYPE_SWITCH : INPUT_TYPE_BUTTON;
	supla_input_cfg[0].gpio_id = B_BTN1_PORT;
	supla_input_cfg[0].flags = INPUT_FLAG_PULLUP;
	supla_input_cfg[0].relay_gpio_id = B_RELAY1_PORT;
	supla_input_cfg[0].channel = 0;

	supla_input_cfg[1].type = supla_esp_cfg.Button2Type == BTN_TYPE_SWITCH ? INPUT_TYPE_SWITCH : INPUT_TYPE_BUTTON;
	supla_input_cfg[1].gpio_id = B_BTN2_PORT;
	supla_input_cfg[1].flags = INPUT_FLAG_PULLUP;
	supla_input_cfg[1].relay_gpio_id = B_RELAY2_PORT;
	supla_input_cfg[1].channel = 1;

	supla_input_cfg[2].type = INPUT_TYPE_SENSOR;
	supla_input_cfg[2].gpio_id = B_SENSOR_PORT1;
	supla_input_cfg[2].channel = 3;
	
	supla_input_cfg[3].type = INPUT_TYPE_SENSOR;
	supla_input_cfg[3].gpio_id = B_SENSOR_PORT2;
	supla_input_cfg[3].channel = 4;

	supla_input_cfg[4].type = INPUT_TYPE_SWITCH;
	supla_input_cfg[4].gpio_id = B_CFG_PORT;
	supla_input_cfg[4].flags = INPUT_FLAG_PULLUP | INPUT_FLAG_CFG_BTN;
	supla_input_cfg[4].channel = 4;

	// ---------------------------------------
    	supla_relay_cfg[0].gpio_id = B_RELAY1_PORT;
	supla_relay_cfg[0].flags = RELAY_FLAG_RESET;
    	supla_relay_cfg[0].channel = 0;

    	supla_relay_cfg[1].gpio_id = B_RELAY2_PORT;
	supla_relay_cfg[1].flags = RELAY_FLAG_RESET;
   	supla_relay_cfg[1].channel = 1;
}

void supla_esp_board_set_channels(TDS_SuplaRegisterDevice_B *srd) {

	srd->channel_count = 5;

	srd->channels[0].Number = 0;
	srd->channels[0].Type = SUPLA_CHANNELTYPE_RELAY;
	srd->channels[0].FuncList = SUPLA_BIT_RELAYFUNC_LIGHTSWITCH \
						| SUPLA_BIT_RELAYFUNC_POWERSWITCH\
						| SUPLA_BIT_RELAYFUNC_CONTROLLINGTHEGATEWAYLOCK \
						| SUPLA_BIT_RELAYFUNC_CONTROLLINGTHEGATE \
						| SUPLA_BIT_RELAYFUNC_CONTROLLINGTHEGARAGEDOOR \
						| SUPLA_BIT_RELAYFUNC_CONTROLLINGTHEDOORLOCK;
	srd->channels[0].Default = SUPLA_CHANNELFNC_LIGHTSWITCH;
	srd->channels[0].value[0] = supla_esp_gpio_relay_on(B_RELAY1_PORT);

	srd->channels[1].Number = 1;
	srd->channels[1].Type = srd->channels[0].Type;
	srd->channels[1].FuncList = srd->channels[0].FuncList;
	srd->channels[1].Default = srd->channels[0].Default;
	srd->channels[1].value[0] = supla_esp_gpio_relay_on(B_RELAY2_PORT);

	srd->channels[2].Number = 2;
	srd->channels[2].Type = SUPLA_CHANNELTYPE_THERMOMETERDS18B20;
	srd->channels[2].FuncList = 0;
	srd->channels[2].Default = 0;

	srd->channels[3].Number = 3;
	srd->channels[3].Type = SUPLA_CHANNELTYPE_SENSORNC;
	srd->channels[3].FuncList = 0;
	srd->channels[3].Default = 0;
	srd->channels[3].value[0] = 0;

	srd->channels[4].Number = 4;
	srd->channels[4].Type = srd->channels[3].Type;
	srd->channels[4].FuncList = 0;
	srd->channels[4].Default = 0;
	srd->channels[4].value[0] = 0;

	supla_get_temperature(srd->channels[2].value);

}

void supla_esp_board_send_channel_values_with_delay(void *srpc) {

		supla_esp_channel_value_changed(0, supla_esp_gpio_relay_on(B_RELAY1_PORT));
		supla_esp_channel_value_changed(1, supla_esp_gpio_relay_on(B_RELAY2_PORT));
		supla_esp_channel_value_changed(2, gpio__input_get(B_SENSOR_PORT1));
		supla_esp_channel_value_changed(3, gpio__input_get(B_SENSOR_PORT2));

}
Zastanawia mnie jeszce jedno. Wejścia typu SENSOR (zwierane do GND) reagują zdecydowanie lepiej po dodaniu np tak jak u mnie flagi pull-up

Kod: Zaznacz cały

supla_input_cfg[3].flags = INPUT_FLAG_PULLUP;
Dodanie tej flagi nie ma jednak wpływu na uruchomienie trybu konfiuracji - cały czas jest to samo :cry:
Moduł ESP-12F przed każdy wgraniem nowego softu czyszczony jest esptool-em. Wszystko działa tylko ten tryb konfiguracji jest upierdliwy :| :roll:
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
https://github.com/Espablo
Zybi
Posty: 1443
Rejestracja: ndz cze 26, 2016 4:24 pm

wt sty 24, 2017 10:47 pm

@Espablo, mój opis problemu dotyczy zupełnie innego przypadku.
Awatar użytkownika
Espablo
Posty: 1465
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontaktowanie:

wt sty 24, 2017 10:50 pm

Zybi pisze:
wt sty 24, 2017 10:47 pm
@Espablo, mój opis problemu dotyczy zupełnie innego przypadku.
Tak, wiem o tym. Napisałem tylko , że mój problem jest podobny do tego, który opisywałeś.
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
https://github.com/Espablo
Zybi
Posty: 1443
Rejestracja: ndz cze 26, 2016 4:24 pm

wt sty 24, 2017 10:57 pm

W module bramowym mamy GPIO skonfigurowane najpierw jako wyjście do sterownia diodą, a po uzyskaniu połączenia to samo GPIO konfigurowane jest wejście do czujnika otwarcia, ale nie jest to w tym samym czasie.

spróbuj tak:

#define B_RELAY1_PORT 16
#define B_RELAY2_PORT 13

#define B_CFG_PORT 0

#define B_BTN1_PORT 14
#define B_BTN2_PORT 12

#define B_SENSOR_PORT1 4
#define B_SENSOR_PORT2 5

#define DS18B20
#define TEMPERATURE_CHANNEL 2


ta funkcja jest wyłączona w 1.8.2
void supla_esp_board_send_channel_values_with_delay(void *srpc)
Awatar użytkownika
Espablo
Posty: 1465
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontaktowanie:

wt sty 24, 2017 11:10 pm

Zybi pisze:
wt sty 24, 2017 10:57 pm
W module bramowym mamy GPIO skonfigurowane najpierw jako wyjście do sterownia diodą, a po uzyskaniu połączenia to samo GPIO konfigurowane jest wejście do czujnika otwarcia, ale nie jest to w tym samym czasie.
No OK, ale ja mogę właśnie włączyć tryb konfiguracji w momencie gdy układ próbuje podłączyć się do sieci. Czyli teoretycznie w tym momencie GPIO jest ustawione jako OUT.
Zybi pisze:
wt sty 24, 2017 10:57 pm
spróbuj tak:

#define B_CFG_PORT 0
Nie da rady, ponieważ fizycznie ten przycisk jest w PCB-V2 podłączony do GPIO4 i musi być:

Kod: Zaznacz cały

#define B_CFG_PORT        	4
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
https://github.com/Espablo
Zybi
Posty: 1443
Rejestracja: ndz cze 26, 2016 4:24 pm

wt sty 24, 2017 11:19 pm

Jeżeli chcesz to "wpasować" w PCB-V2 to faktycznie nie masz manewru
Awatar użytkownika
Espablo
Posty: 1465
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontaktowanie:

wt sty 24, 2017 11:22 pm

Zybi pisze:
wt sty 24, 2017 11:19 pm
Jeżeli chcesz to "wpasować" w PCB-V2 to faktycznie nie masz manewru
No właśnie, chcę to uruchomić na V2 i GPIO muszą pozostać zdefiniowane w ten sposób. :(
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
https://github.com/Espablo
Awatar użytkownika
Espablo
Posty: 1465
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontaktowanie:

śr sty 25, 2017 6:46 pm

Znalazłem rozwiązanie :D
Trzeba dodać tutaj https://github.com/SUPLA/supla-core/blo ... onn.c#L853

Kod: Zaznacz cały

os_timer_disarm(&supla_iterate_timer);
Soft który przygotowywałem jest opisany tutaj viewtopic.php?f=9&t=1922#p7582
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
https://github.com/Espablo
ODPOWIEDZ