Witam. Mam problem z przerwaniem, które samo się alarmuje bez powodu.
Przerwanie to obsługuje encoder, podłączony jest do pinu D4, jako wciśnięcie knoba (kręcenie na pinach D3 i D5). Biblioteka Encoder. Wszystko działało dobrze do momentu, kiedy dołączyłem działanie wifi w trybie STA. Po wywaleniu tego kodu problem nie ustąpił, dopatrzyłem się, że esp pomimo wywalenia kodu nadal się łączy z zapamiętaną siecią, więc skompilowałem kod z linijką wifi.mode(OFF), a następnie znów mój kod. Moduł przestał się łączyć, ale dalej przerwanie alarmowane jest prawdopodobnie "co klatkę"(b. szybki spam na serial monitorze). W przerwaniu żadnego obciążenia nie ma, jedna linijka zmieniająca wartość zmiennej globalnej typu uint8_t - tyle. Przełączenie przerwania na inny pin sprawia, że nie działa ono wcale. Mam prostą funkcję, która liczy "klatki" i normalnie jest to blisko 500 000 na sekundę, ale jak dołączę do tego obsługę encodera (sprawdzanie co klatkę czy nastąpiła zmiana stanu, a następnie ignorowanie sprawdzanie jeśli nie minelo 50ms (debouncing) i ponowne sprawdzenie stanu po szumach) to spada do wartości konsolowej, czyli 30fps.
Próbowałem zewnętrzny pullup 10kilo, dołaczyłem kondensator 1000uF, odłączyłem encoder od pinu, bez zmian. Sprawdziłem nawet za pomocą arduino, pinu analogowego i kreślarki w arduino IDE (prowizoryczny oscyloskop) jak wygląda stan pinu D4 na esp i jest ok, jak wcisnę encoder spada na ok. 60 (ok.0.29V) a jak puszczę to stan pinu trzyma się na jednym poziomie bez nawet specjalnych szumów na ok 680(3.32V) (arduino na 5V).
Co może być przyczyną ew. jakie jeszcze dane potrzebne.
Przerwanie to obsługuje encoder, podłączony jest do pinu D4, jako wciśnięcie knoba (kręcenie na pinach D3 i D5). Biblioteka Encoder. Wszystko działało dobrze do momentu, kiedy dołączyłem działanie wifi w trybie STA. Po wywaleniu tego kodu problem nie ustąpił, dopatrzyłem się, że esp pomimo wywalenia kodu nadal się łączy z zapamiętaną siecią, więc skompilowałem kod z linijką wifi.mode(OFF), a następnie znów mój kod. Moduł przestał się łączyć, ale dalej przerwanie alarmowane jest prawdopodobnie "co klatkę"(b. szybki spam na serial monitorze). W przerwaniu żadnego obciążenia nie ma, jedna linijka zmieniająca wartość zmiennej globalnej typu uint8_t - tyle. Przełączenie przerwania na inny pin sprawia, że nie działa ono wcale. Mam prostą funkcję, która liczy "klatki" i normalnie jest to blisko 500 000 na sekundę, ale jak dołączę do tego obsługę encodera (sprawdzanie co klatkę czy nastąpiła zmiana stanu, a następnie ignorowanie sprawdzanie jeśli nie minelo 50ms (debouncing) i ponowne sprawdzenie stanu po szumach) to spada do wartości konsolowej, czyli 30fps.
Próbowałem zewnętrzny pullup 10kilo, dołaczyłem kondensator 1000uF, odłączyłem encoder od pinu, bez zmian. Sprawdziłem nawet za pomocą arduino, pinu analogowego i kreślarki w arduino IDE (prowizoryczny oscyloskop) jak wygląda stan pinu D4 na esp i jest ok, jak wcisnę encoder spada na ok. 60 (ok.0.29V) a jak puszczę to stan pinu trzyma się na jednym poziomie bez nawet specjalnych szumów na ok 680(3.32V) (arduino na 5V).
Co może być przyczyną ew. jakie jeszcze dane potrzebne.