Elektronika
Przeczytano 708 razy

Zakłócenia na pinie z przyciskiem w ESP32 S3

Mam do pinu ESP32 S3 podpięty przycisk, który zwiera źródło 3.3V do tego pinu. Problem polega na tym, że nawet kiedy ten
przycisk nie jest wciśnięty, to mikrokontroler w losowych momentach wykrywa na tym pinie logiczne 0 a czasami logiczne 1 (Informację o tym podaję na monitor szeregowy) . Co może być nie tak?

Odpowiedzi (1)


    • Ostatnia wizyta:
    • W serwisie od:
    • 8 pytań
    • 607 odpowiedzi
    • 96.4% pozytywnych ocen od użytkowników

    W tej sytuacji wygląda na to że zapomniałeś dodać układu pull-down. Chodzi o to, że podczas normalnej pracy piny mikrokontrolera
    zbierają zakłócenia z otoczenia, co może właśnie powodować nieprawidłowy odczyt napięcia na pinach i w konsekwencji nieprawidłową interpretację stanu logicznego [ 0-1.67V dla stanu niskiego, 1.68 - 3.3V dla stanu wysokiego ].

    Oto jak wygląda układ pull down, działa to w taki sposób że w momencie kiedy wciskasz przycisk no na pin GPIO podawany jest potencjał źródła, logiczne.
    Kiedy jednak jest rozwarty to na wejściu podawany jest potencjał masy, dzięki czemu mikrokontroler ma niejako "na sztywno wpisane" 0 woltów na tym pinie,
    więc zakłócenia już na to nie mają wpływu.  

    Istnieje także analogiczny układ pull up, gdzie rezystor z przyciskiem są zamienione miejscami. Tutaj w przypadku rozwartego przycisku na port GPIO
    podane zostaje stabilne napięcie źródła, a w przypadku zwarcia - potencjał masy czyli 0V. Działa on odwrotnie to układu pull down.

    Jeśli jednak nie chcesz się bawić we wprowadzenie dodatkowych fizycznych elementów do układu, to problem ten da się też rozwiązać programowo.
    Płytka ta ma wlutowany rezystor, wspólny dla wszystkich pinów GPIO, który można skonfigurować aby działał w układzie pull up lub pull down.
    Jak? Wystarczy przy ustawianiu pinu funkcją pinMode(), podać jako drugi argument makro INPUT_PULLUP [pinMode(pin_ktorego_uzywasz, INPUT_PULLUP].
    Jeśli korzystasz z frameworka ESPIDF to trzeba wywołać funkcję gpio_set_pull_mode(), gdzie pierwszym argumentem jest makro odpowiadające danemu pinowi np. GPIO_NUM_3, a drugim jest tryb w jakim zastosowany zostanie układ podciągający:
    GPIO_PULLUP_ONLY dla układu podciągającego i GPIO_PULLDOWN_ONLY dla układu ściągającego.

Czytaj także:

Oświetlenie LED - zakłócenia
Społeczność

Oświetlenie LED - zakłócenia

Witam, posiadam w kuchni oświetlenie sufitowe w postaci sześciu ma

Więcej
Zakłócenia podczas połączenia bluetooth
Społeczność

Zakłócenia podczas połączenia bluetooth

Gdy chodzę po mieście słuchając muzyki przez słuchawki bluetooth cz

Więcej
W-2.12T na W3.12T PGNIG opinie
Społeczność

W-2.12T na W3.12T PGNIG opinie

PGNiG przerzucił mnie z taryfy W-2.12T na W3.12T. Jaki miesiąc suge

Więcej
Wentylacja mechaniczna w domu – opinie eksperta
Blog

Wentylacja mechaniczna w domu – opinie eksperta

Jakie rodzaje mechanicznej wentylacji są obecnie dostępne na rynku

Więcej
Europejskie cła na samochody z Chin. Oświadczenie dużego producenta
Blog

Europejskie cła na samochody z Chin. Oświadczenie dużego

Komisja Europejska nałożyła cła wyrównawcze na chińskie samochody e

Więcej
KNIPEX – reportaż z pobytu w firmie
Blog

KNIPEX – reportaż z pobytu w firmie

W świecie narzędzi ręcznych, marka KNIPEX jest synonimem jakości i 

Więcej