3.4. Pinnen en randapparaten

Een pin is het eenvoudigste randapparaat op de MCU: een enkele draad die de chip met de buitenwereld verbindt. Elke interactie met echte hardware – een led aansturen, een schakelaar uitlezen, een spanning meten, bytes verzenden over een seriële lijn – verloopt uiteindelijk via een of meer pinnen.

3.4.1. Pinmodi

Een pin wordt geconfigureerd in een van enkele modi voordat hij iets nuttigs doet:

  • Pin.IN – invoer. De pin observeert de spanning die er van buitenaf op wordt gezet en rapporteert die als 0 (laag) of 1 (hoog).

  • Pin.OUT – uitvoer. De pin stuurt zichzelf aan naar ofwel de voedingsspanning (1) ofwel de massa (0), zodat externe componenten die spanning zien.

  • Pin.OPEN_DRAIN – uitvoer die de lijn alleen laag kan trekken. Om hoog te gaan laat de pin los (gaat zwevend) en tilt een externe pull-up-weerstand de lijn op. Gebruikt voor gedeelde bussen waar meerdere apparaten dezelfde lijn kunnen aansturen.

Invoeren kunnen optioneel een interne pull-weerstand inschakelen die een gedefinieerd niveau garandeert wanneer niets externs de pin aanstuurt:

De constructor neemt id, mode en pull als positionele argumenten:

from machine import Pin

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

3.4.2. Alternatieve functies

De meeste pinnen hebben naast hun GPIO-rol een alternatieve functie. Een enkele fysieke pad op de chip kan zijn:

Andere randapparaten (verdere seriële bussen, timers, enzovoort) claimen ook specifieke pinnen; de chipontwerper bedraadt elk hardwareblok aan een vaste set pads. De ADC bemonstert alleen pinnen die naar zijn multiplexer zijn geleid; een UART zendt op de ene pin waaraan zijn TX-signaal is bedraad.

Notitie

OpenMV-cams labelen de externe-connectorpinnen P0 tot P9 (varieert licht per board). Welke pin welke alternatieve functie draagt, is bordspecifiek; zie de OpenMV Cam-snelreferentie voor de tabel.

3.4.3. Bordvariaties

Enkele details variëren per board en moeten altijd worden gecontroleerd tegen de snelreferentie in plaats van te worden aangenomen op basis van een ander board:

  • Spanningstolerantie. Sommige cams hebben 5 V-tolerante I/O-pinnen (een 5 V-signaal kan rechtstreeks worden aangelegd zonder schade); andere draaien hun I/O op 3,3 V of 1,8 V en vereisen een level shifter voor elk signaal daarboven. Een 5 V-bron aansluiten op een niet-tolerante pin kan de chip beschadigen.

  • ADC-referentie. De spanning die de ADC als volledige schaal behandelt, hangt af van de I/O-voeding van het board. read_u16() geeft altijd 0..65535 terug, maar de spanning die 65535 voorstelt, is wat de referentie van het board ook maar is.

  • Aanstuurvermogen. Een GPIO-pin kan een beperkte stroom leveren of opnemen – doorgaans tientallen milliampère. Genoeg voor een kleine led via een weerstand; niet genoeg voor een motor, een zoemer of enige inductieve belasting. Grijp naar een externe driver (transistor, MOSFET, H-brug) voor alles wat zwaarder is.

De OpenMV Cam-snelreferentie geeft de exacte getallen per board.