3.4. Pini și periferice

Un pin este cel mai simplu periferic de pe MCU: un singur fir care conectează cipul la lumea exterioară. Fiecare interacțiune cu hardware-ul real – aprinderea unui LED, citirea unui comutator, măsurarea unei tensiuni, trimiterea de octeți pe o linie serială – trece în cele din urmă prin unul sau mai mulți pini.

3.4.1. Moduri ale pinilor

Un pin este configurat într-unul din câteva moduri înainte de a face ceva util:

  • Pin.IN – intrare. Pinul observă tensiunea aplicată din exterior și o raportează ca 0 (coborât) sau 1 (ridicat).

  • Pin.OUT – ieșire. Pinul se forțează singur fie la tensiunea de alimentare (1), fie la masă (0), astfel încât componentele externe să vadă acea tensiune.

  • Pin.OPEN_DRAIN – ieșire care poate doar să tragă linia la nivel coborât. Pentru a urca la nivel ridicat, pinul eliberează (lasă în gol) și un rezistor de pull-up extern ridică linia. Folosit pentru magistralele partajate unde mai multe dispozitive pot forța aceeași linie.

Intrările pot activa opțional un rezistor de pull intern care garantează un nivel definit atunci când nimic extern nu forțează pinul:

Constructorul preia id, mode și pull ca argumente poziționale:

from machine import Pin

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

3.4.2. Funcții alternative

Majoritatea pinilor au o funcție alternativă pe lângă rolul lor de GPIO. Un singur pad fizic de pe cip poate fi:

Alte periferice (magistrale seriale suplimentare, temporizatoare și așa mai departe) revendică, de asemenea, pini specifici; proiectantul cipului conectează fiecare bloc hardware la un set fix de pad-uri. ADC eșantionează doar pinii direcționați către multiplexorul său; un UART transmite pe singurul pin la care este conectat semnalul său TX.

Notă

Camerele OpenMV etichetează pinii conectorului extern de la P0 la P9 (variază ușor în funcție de placă). Care pin poartă care funcție alternativă este specific plăcii; consultați referința rapidă OpenMV Cam pentru tabel.

3.4.3. Variații între plăci

Câteva detalii variază în funcție de placă și ar trebui întotdeauna verificate în referința rapidă, în loc să fie presupuse de la o altă placă:

  • Toleranța la tensiune. Unele camere au pini de I/O toleranți la 5 V (un semnal de 5 V poate fi aplicat direct fără deteriorare); altele își rulează I/O la 3,3 V sau 1,8 V și necesită un convertor de nivel pentru orice semnal peste această valoare. Conectarea unei surse de 5 V la un pin netolerant poate deteriora cipul.

  • Referința ADC. Tensiunea pe care ADC o tratează ca scală completă depinde de alimentarea de I/O a plăcii. read_u16() returnează întotdeauna 0..65535, dar tensiunea pe care o reprezintă 65535 este oricare ar fi referința plăcii.

  • Capacitatea de curent. Un pin GPIO poate furniza sau absorbi un curent limitat – de obicei zeci de miliamperi. Suficient pentru un LED mic printr-un rezistor; insuficient pentru un motor, un buzzer sau orice sarcină inductivă. Recurgeți la un driver extern (tranzistor, MOSFET, punte H) pentru orice este mai solicitant.

Referința rapidă OpenMV Cam oferă valorile exacte pentru fiecare placă.