Digital Pin

Digital pin to cyfrowe wyprowadzenie mikrokontrolera, które może pracować jako wejście albo wyjście logiczne. W Arduino taki pin odczytuje albo wystawia dwa stany: LOW i HIGH. Nie mierzy płynnie napięcia jak wejście analogowe, tylko porównuje poziom na pinie z progami logicznymi mikrokontrolera.

W klasycznym Arduino Uno z mikrokontrolerem ATmega328P piny cyfrowe pracują zwykle z logiką 5 V. Dla innych płytek poziom HIGH może oznaczać 3,3 V, dlatego przed połączeniem modułów trzeba sprawdzić napięcie pracy obu układów.

Co to jest digital pin?

Digital pin jest linią I/O, czyli wejścia-wyjścia. W trybie wejścia mikrokontroler odczytuje stan logiczny z zewnętrznego układu. W trybie wyjścia wymusza stan niski albo wysoki na pinie.

Tryb Co robi pin? Typowy przypadek
INPUT Odczytuje stan logiczny. Wejście ma wysoką impedancję. sygnał z czujnika, przycisk z rezystorem zewnętrznym
OUTPUT Wymusza stan LOW albo HIGH. LED przez rezystor, wejście tranzystora, sygnał sterujący
INPUT_PULLUP Odczytuje wejście z włączonym wewnętrznym rezystorem podciągającym. przycisk zwierający pin do masy

Progi logiczne HIGH i LOW

Stan HIGH na wejściu nie musi oznaczać idealnych 5 V. Mikrokontroler ma progi przełączania. Dla ATmega328P, zasilanego w zakresie 2,7-5,5 V, typowe warunki wejść cyfrowych opisuje się tak:

V_{\mathrm{IL}}\le 0{,}3V_{CC} V_{\mathrm{IH}}\ge 0{,}6V_{CC}

Dla zasilania 5 V daje to orientacyjnie: LOW do około 1,5 V i HIGH od około 3,0 V. Zakres między tymi wartościami nie jest dobrym miejscem pracy wejścia, bo może powodować niepewny odczyt.

Zasilanie mikrokontrolera LOW, maks. HIGH, min. Zakres niepewny
V_{CC}=5\ \mathrm{V} około 1,5 V około 3,0 V 1,5-3,0 V
V_{CC}=3{,}3\ \mathrm{V} około 1,0 V około 2,0 V 1,0-2,0 V

Jak działa wejście, wyjście i pull-up?

W uproszczeniu pin I/O ma bufor wejściowy, sterownik wyjściowy, wewnętrzny rezystor podciągający oraz diody ochronne do zasilania i masy. Szczegóły zależą od mikrokontrolera, ale sama logika jest podobna: pin może być odczytywany, sterowany albo pozostawiony w stanie wysokiej impedancji.

          VCC
           |

[pull-up]

| pin ───────+────> bufor wejściowy ──> odczyt HIGH/LOW | sterownik wyjściowy HIGH / LOW | GND

Uproszczony model pinu cyfrowego: wejście odczytuje poziom logiczny, wyjście wymusza stan, a pull-up ustala wejście w stanie wysokim, gdy nic innego go nie wymusza.

Przykład konfiguracji:

pinMode(8, OUTPUT);
pinMode(7, INPUT_PULLUP);

Stan wyjścia ustawia się funkcją digitalWrite():

digitalWrite(8, HIGH);
digitalWrite(8, LOW);

Stan wejścia odczytuje się funkcją digitalRead():

int stan = digitalRead(7);

Przy INPUT_PULLUP logika przycisku jest często odwrócona: puszczony przycisk daje HIGH, a wciśnięty przycisk zwierający pin do masy daje LOW.

Limity prądowe pinu cyfrowego

Pin cyfrowy ma ograniczoną wydajność prądową. Dla ATmega328P absolutne maksimum wynosi 40 mA na pin I/O, ale nie jest to wartość projektowa do normalnej pracy. Bezpieczniej przyjmować około 20 mA na pin albo mniej, zwłaszcza gdy jednocześnie pracuje kilka wyjść.

Wartość Dla ATmega328P / Arduino Uno Znaczenie
ok. 20 mA praktyczny limit projektowy na pin rozsądna wartość dla prostych LED i sygnałów
40 mA absolutne maksimum na pin I/O granica z datasheetu, nie cel projektowy
200 mA absolutne maksimum dla pinów VCC/GND ogranicza sumaryczny prąd całego układu

Dla LED 10 mA zasilanej z 5 V i spadkiem około 2 V rezystor szeregowy wynosi:

R=\frac{5\ \mathrm{V}-2\ \mathrm{V}}{0{,}01\ \mathrm{A}}=300\ \Omega

Typowa wartość 330 Ω obniży prąd poniżej 10 mA i zostawi zapas dla pinu.

Digital pin a PWM

PWM na pinie cyfrowym nie tworzy prawdziwego napięcia analogowego. Pin przełącza się między LOW i HIGH, a zmienia się tylko wypełnienie impulsów.

Średnie napięcie przebiegu PWM można oszacować tak:

U_{\mathrm{sr}}\approx D\cdot U_{\mathrm{HIGH}}

gdzie D oznacza wypełnienie od 0 do 1. Przy D=0{,}5 i U_{\mathrm{HIGH}}=5\ \mathrm{V} średnia wynosi około 2,5 V, ale elektrycznie pin nadal przełącza się cyfrowo między 0 V i 5 V.

Typowe pomyłki przy pinach cyfrowych

Pierwsza pomyłka to przekroczenie prądu pinu. Jeżeli wyjście ma zasilić silnik, cewkę przekaźnika, dłuższą taśmę LED albo inne obciążenie powyżej kilkunastu miliamperów, potrzebny jest tranzystor, MOSFET, driver albo gotowy moduł wykonawczy. Pin mikrokontrolera powinien wtedy sterować wejściem drivera, a nie prądem obciążenia.

Druga pomyłka to pływające wejście. Pin ustawiony jako INPUT, ale niepodłączony do jednoznacznego poziomu logicznego, może losowo odczytywać HIGH albo LOW. Rozwiązaniem jest rezystor podciągający, rezystor ściągający albo tryb INPUT_PULLUP.

Trzecia pomyłka to łączenie logiki 5 V z układem 3,3 V bez sprawdzenia tolerancji wejść. Wyjście 5 V może być poprawnym HIGH dla Arduino Uno, ale może uszkodzić wejście mikrokontrolera lub modułu pracującego wyłącznie z logiką 3,3 V.

Podsumowanie

Digital pin to linia logiczna, której zachowanie zależy od trybu pracy, progów V_{\mathrm{IL}} i V_{\mathrm{IH}}, napięcia zasilania oraz limitu prądowego mikrokontrolera. W dobrze zaprojektowanym układzie wejście nie może pływać, wyjście nie powinno pracować blisko absolutnego maksimum prądowego, a PWM trzeba rozumieć jako szybkie przełączanie, nie jako prawdziwe wyjście analogowe.

Źródła i materiały