3.4. Pin e periferiche

Un pin è la periferica più semplice dell’MCU: un singolo filo che collega il chip al mondo esterno. Ogni interazione con l’hardware reale – pilotare un LED, leggere un interruttore, misurare una tensione, inviare byte su una linea seriale – passa in ultima analisi attraverso uno o più pin.

3.4.1. Modalità dei pin

Un pin viene configurato in una di poche modalità prima di poter fare qualcosa di utile:

  • Pin.IN – ingresso. Il pin osserva la tensione applicata dall’esterno e la riporta come 0 (basso) o 1 (alto).

  • Pin.OUT – uscita. Il pin si porta da solo alla tensione di alimentazione (1) o a massa (0), in modo che i componenti esterni vedano quella tensione.

  • Pin.OPEN_DRAIN – uscita che può solo abbassare la linea. Per portarla alta, il pin si rilascia (resta flottante) e un resistore di pull-up esterno solleva la linea. Usato per bus condivisi in cui più dispositivi possono pilotare la stessa linea.

Gli ingressi possono facoltativamente abilitare un resistore di pull interno che garantisce un livello definito quando nulla di esterno pilota il pin:

Il costruttore accetta id, mode e pull come argomenti posizionali:

from machine import Pin

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

3.4.2. Funzioni alternate

La maggior parte dei pin ha una funzione alternata oltre al proprio ruolo GPIO. Un singolo pad fisico sul chip può essere:

Anche altre periferiche (ulteriori bus seriali, timer e così via) occupano pin specifici; il progettista del chip collega ogni blocco hardware a un insieme fisso di pad. L’ADC campiona solo i pin instradati al suo multiplexer; una UART trasmette sull’unico pin a cui è collegato il suo segnale TX.

Nota

Le OpenMV cam etichettano i pin del connettore esterno da P0 a P9 (varia leggermente a seconda della scheda). Quale pin svolge quale funzione alternata dipende dalla scheda; consulta la guida rapida della OpenMV Cam per la tabella.

3.4.3. Variazioni tra schede

Alcuni dettagli variano a seconda della scheda e dovrebbero sempre essere verificati nella guida rapida anziché essere dati per scontati a partire da un’altra scheda:

  • Tolleranza di tensione. Alcune cam hanno pin di I/O tolleranti a 5 V (un segnale a 5 V può essere applicato direttamente senza danni); altre fanno funzionare il proprio I/O a 3,3 V o 1,8 V e richiedono un level shifter per qualsiasi segnale superiore. Collegare una sorgente a 5 V a un pin non tollerante può danneggiare il chip.

  • Riferimento dell’ADC. La tensione che l’ADC tratta come fondo scala dipende dall’alimentazione di I/O della scheda. read_u16() restituisce sempre 0..65535, ma la tensione rappresentata da 65535 è qualunque sia il riferimento della scheda.

  • Capacità di pilotaggio. Un pin GPIO può erogare o assorbire una corrente limitata – tipicamente decine di milliampere. Sufficiente per un piccolo LED tramite un resistore; non sufficiente per un motore, un cicalino o qualsiasi carico induttivo. Ricorri a un driver esterno (transistor, MOSFET, ponte H) per qualsiasi cosa più impegnativa.

La guida rapida della OpenMV Cam fornisce i valori esatti per ciascuna scheda.