3.4. Piny i urządzenia peryferyjne

Pin to najprostsze urządzenie peryferyjne na MCU: pojedynczy przewód łączący układ ze światem zewnętrznym. Każda interakcja z rzeczywistym sprzętem – sterowanie diodą LED, odczyt przełącznika, pomiar napięcia, wysyłanie bajtów linią szeregową – ostatecznie przebiega przez jeden lub więcej pinów.

3.4.1. Tryby pinu

Pin jest konfigurowany w jeden z kilku trybów, zanim zacznie robić cokolwiek użytecznego:

  • Pin.IN – wejście. Pin obserwuje napięcie przyłożone do niego z zewnątrz i raportuje je jako 0 (niski) lub 1 (wysoki).

  • Pin.OUT – wyjście. Pin sam steruje sobą, ustawiając się albo na napięcie zasilania (1), albo na masę (0), aby zewnętrzne komponenty widziały to napięcie.

  • Pin.OPEN_DRAIN – wyjście, które może jedynie ściągać linię w stan niski. Aby przejść w stan wysoki, pin zwalnia linię (pozostawia ją w stanie pływającym), a zewnętrzny rezystor podciągający podnosi linię. Stosowane do współdzielonych magistral, na których wiele urządzeń może sterować tą samą linią.

Wejścia mogą opcjonalnie włączyć wewnętrzny rezystor podciągający, który gwarantuje określony poziom, gdy nic z zewnątrz nie steruje pinem:

Konstruktor przyjmuje id, mode i pull jako argumenty pozycyjne:

from machine import Pin

led    = Pin("P0", Pin.OUT)
button = Pin("P1", Pin.IN, Pin.PULL_UP)

3.4.2. Funkcje alternatywne

Większość pinów ma funkcję alternatywną oprócz swojej roli GPIO. Pojedyncze fizyczne pole lutownicze na układzie może być:

Inne urządzenia peryferyjne (kolejne magistrale szeregowe, liczniki czasu itd.) również zajmują określone piny; projektant układu łączy każdy blok sprzętowy ze stałym zestawem pól lutowniczych. ADC próbkuje tylko piny doprowadzone do swojego multipleksera; UART nadaje na tym jednym pinie, do którego jest podłączony jego sygnał TX.

Informacja

Kamery OpenMV oznaczają piny złącza zewnętrznego od P0 do P9 (różni się to nieco w zależności od płytki). To, który pin pełni którą funkcję alternatywną, zależy od płytki; tabelę zawiera skrócona dokumentacja OpenMV Cam.

3.4.3. Różnice między płytkami

Kilka szczegółów różni się w zależności od płytki i należy je zawsze sprawdzać w skróconej dokumentacji, zamiast zakładać na podstawie innej płytki:

  • Tolerancja napięciowa. Niektóre kamery mają piny I/O tolerujące 5 V (sygnał 5 V można podać bezpośrednio bez uszkodzenia); inne pracują z I/O na poziomie 3,3 V lub 1,8 V i wymagają konwertera poziomów dla każdego sygnału powyżej tej wartości. Podłączenie źródła 5 V do pinu nietolerującego takiego napięcia może uszkodzić układ.

  • Napięcie odniesienia ADC. Napięcie, które ADC traktuje jako pełną skalę, zależy od zasilania I/O płytki. read_u16() zawsze zwraca 0..65535, ale napięcie, które reprezentuje 65535, odpowiada napięciu odniesienia danej płytki.

  • Wydajność prądowa. Pin GPIO może źródłować lub pochłaniać ograniczony prąd – zazwyczaj dziesiątki miliamperów. Wystarczy to dla małej diody LED z rezystorem; nie wystarczy dla silnika, brzęczyka ani jakiegokolwiek obciążenia indukcyjnego. Do czegokolwiek cięższego sięgnij po zewnętrzny sterownik (tranzystor, MOSFET, mostek H).

Skrócona dokumentacja OpenMV Cam podaje dokładne wartości dla każdej płytki.