Witam,
mam problem, który umyka mojemu zrozumieniu. Chodzi o mikrokontroler XMEGA32A4U-AU
W moim programie używam opcji uśpienia oraz wybudzenia pinem 1 portu A.
Moja funkcja usypiająca wygląda następująco:
Czego brakuje? Pull-upa oczywiście, bo wybranie LEVEL (druga opcją jest BOTHEDGES) aktywowane jest ciągłym stanem niskim na pinie. Pull-up był, ale przestałem mu ufać, gdy w pierwszej wersji płytki wydawał się nie mieć efektu. Wstawiłem więc na płytce rezystor 10k (więc dość silny pull-up) między VCC a wyjście z pinu. Zresztą w trakcie resetu (a taki wykonywany jest po wybudzeniu) pin by właśnie pływał, więc chciałem tego uniknąć.
Niestety po takim uśpieniu wystarczy włączyć metr dalej lutownicę do gniazdka, lub upuścić poduszkę na panele (zgaduję, że generuje się wtedy jakieś drobne zakłócenie wywołane elektrostatycznością) i mikrokontroler się wybudza...
Jak to możliwe, jeżeli mam fizycznie wstawiony pull-up (mierzyłem na pinie napięcie, jest 3.3V), wstawiałem również w programie dodatkowo, ale nic to nie zmieniło, a port zachowuje się, jakby "pływał". Układ zasilany bateryjnie, raczej nie szaleją po nim żadne zakłócenia, pobiera jakieś 2mA po wyłączeniu.
Nie daje mi to spokoju, chociaż rozwiązałem to w programie, wprowadzając w zasadzie debouncing:
Po wybudzeniu odczekuję milisekundę i sprawdzam ponownie stan przycisku, jeżeli nie jest naciśnięty to mikrokontroler idzie z powrotem spać. W zasadzie to działa, ale wolałbym wiedzieć skąd się bierze to dziwne zachowanie, bo może mi się potem w najmniej oczekiwanym momencie zemścić.
Z góry dziękuję za odpowiedzi
mam problem, który umyka mojemu zrozumieniu. Chodzi o mikrokontroler XMEGA32A4U-AU
W moim programie używam opcji uśpienia oraz wybudzenia pinem 1 portu A.
Moja funkcja usypiająca wygląda następująco:
Kod: C / C++
Czego brakuje? Pull-upa oczywiście, bo wybranie LEVEL (druga opcją jest BOTHEDGES) aktywowane jest ciągłym stanem niskim na pinie. Pull-up był, ale przestałem mu ufać, gdy w pierwszej wersji płytki wydawał się nie mieć efektu. Wstawiłem więc na płytce rezystor 10k (więc dość silny pull-up) między VCC a wyjście z pinu. Zresztą w trakcie resetu (a taki wykonywany jest po wybudzeniu) pin by właśnie pływał, więc chciałem tego uniknąć.
Niestety po takim uśpieniu wystarczy włączyć metr dalej lutownicę do gniazdka, lub upuścić poduszkę na panele (zgaduję, że generuje się wtedy jakieś drobne zakłócenie wywołane elektrostatycznością) i mikrokontroler się wybudza...
Jak to możliwe, jeżeli mam fizycznie wstawiony pull-up (mierzyłem na pinie napięcie, jest 3.3V), wstawiałem również w programie dodatkowo, ale nic to nie zmieniło, a port zachowuje się, jakby "pływał". Układ zasilany bateryjnie, raczej nie szaleją po nim żadne zakłócenia, pobiera jakieś 2mA po wyłączeniu.
Nie daje mi to spokoju, chociaż rozwiązałem to w programie, wprowadzając w zasadzie debouncing:
Kod: C / C++
Po wybudzeniu odczekuję milisekundę i sprawdzam ponownie stan przycisku, jeżeli nie jest naciśnięty to mikrokontroler idzie z powrotem spać. W zasadzie to działa, ale wolałbym wiedzieć skąd się bierze to dziwne zachowanie, bo może mi się potem w najmniej oczekiwanym momencie zemścić.
Z góry dziękuję za odpowiedzi
