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:
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
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\ \OmegaTypowa 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.
