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.