class Pin – I/O-pinnen aansturen

Een pin-object wordt gebruikt om I/O-pinnen aan te sturen (ook bekend als GPIO - general-purpose input/output). Pin-objecten worden gewoonlijk geassocieerd met een fysieke pin die een uitgangsspanning kan leveren en ingangsspanningen kan uitlezen. De Pin-klasse heeft methoden om de modus van de pin in te stellen (IN, OUT, enz.) en methoden om het digitale logische niveau op te vragen en in te stellen. Voor analoge aansturing van een pin, zie de ADC-klasse.

Een pin-object wordt geconstrueerd met behulp van een identifier die ondubbelzinnig een bepaalde I/O-pin specificeert. De toegestane vormen van de identifier en de fysieke pin waarnaar de identifier verwijst zijn poortspecifiek. Mogelijkheden voor de identifier zijn een integer, een string of een tuple met poort- en pinnummer.

Gebruiksmodel:

from machine import Pin

# create an output pin on header pin P0
p0 = Pin("P0", Pin.OUT)

# set the value low then high
p0.value(0)
p0.value(1)

# create an input pin on header pin P2, with a pull-up resistor
p2 = Pin("P2", Pin.IN, Pin.PULL_UP)

# read and print the pin value
print(p2.value())

# reconfigure P0 in input mode with a pull-down resistor
p0.init(p0.IN, p0.PULL_DOWN)

# install an IRQ callback
p0.irq(lambda p: print(p))

Constructors

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

Toegang tot het pin-randapparaat (GPIO-pin) dat is geassocieerd met de gegeven id. Als er aanvullende argumenten in de constructor worden opgegeven, worden deze gebruikt om de pin te initialiseren. Alle instellingen die niet worden gespecificeerd, blijven in hun vorige toestand.

De argumenten zijn:

  • id is verplicht en kan een willekeurig object zijn. Mogelijke waardetypen zijn: int (een interne Pin-identifier), str (een Pin-naam) en tuple (paar van [poort, pin]).

  • mode specificeert de pinmodus, die een van de volgende kan zijn:

    • Pin.IN - De pin is geconfigureerd voor invoer. Bekeken als uitgang bevindt de pin zich in een hoge-impedantietoestand.

    • Pin.OUT - De pin is geconfigureerd voor (normale) uitvoer.

    • Pin.OPEN_DRAIN - De pin is geconfigureerd voor open-drain-uitvoer. Open-drain-uitvoer werkt op de volgende manier: als de uitgangswaarde op 0 is ingesteld, is de pin actief op een laag niveau; als de uitgangswaarde 1 is, bevindt de pin zich in een hoge-impedantietoestand. Niet alle poorten implementeren deze modus, en sommige doen dit mogelijk alleen op bepaalde pinnen.

    • Pin.ALT - De pin is geconfigureerd om een alternatieve functie uit te voeren, die poortspecifiek is. Voor een pin die op deze manier is geconfigureerd zijn andere Pin-methoden (behalve Pin.init()) niet van toepassing (het aanroepen ervan leidt tot een ongedefinieerd of hardwarespecifiek resultaat). Niet alle poorten implementeren deze modus.

    • Pin.ALT_OPEN_DRAIN - Hetzelfde als Pin.ALT, maar de pin is geconfigureerd als open-drain. Niet alle poorten implementeren deze modus.

    • Pin.ANALOG - De pin is geconfigureerd voor analoge invoer, zie de ADC-klasse.

  • pull specificeert of de pin een (zwakke) pull-weerstand heeft aangesloten, en kan een van de volgende zijn:

    • None - Geen pull-up- of pull-down-weerstand.

    • Pin.PULL_UP - Pull-up-weerstand ingeschakeld.

    • Pin.PULL_DOWN - Pull-down-weerstand ingeschakeld.

  • value is alleen geldig voor de modi Pin.OUT en Pin.OPEN_DRAIN en specificeert de initiële uitgangswaarde van de pin indien opgegeven, anders blijft de toestand van het pin-randapparaat ongewijzigd.

  • drive specificeert het uitgangsvermogen van de pin en kan een van de volgende zijn: Pin.DRIVE_0, Pin.DRIVE_1, enz., oplopend in stuurkracht. De daadwerkelijke stroomstuurcapaciteiten zijn poortafhankelijk. Niet alle poorten implementeren dit argument.

  • alt specificeert een alternatieve functie voor de pin en de waarden die het kan aannemen zijn poortafhankelijk. Dit argument is alleen geldig voor de modi Pin.ALT en Pin.ALT_OPEN_DRAIN. Het kan worden gebruikt wanneer een pin meer dan één alternatieve functie ondersteunt. Als slechts één alternatieve pinfunctie wordt ondersteund, is dit argument niet vereist. Niet alle poorten implementeren dit argument.

Zoals hierboven gespecificeerd, staat de Pin-klasse toe om een alternatieve functie voor een bepaalde pin in te stellen, maar specificeert het geen verdere bewerkingen op zo’n pin. Pinnen die in de modus alternatieve functie zijn geconfigureerd, worden gewoonlijk niet als GPIO gebruikt, maar worden in plaats daarvan aangestuurd door andere hardware-randapparaten. De enige bewerking die op zo’n pin wordt ondersteund, is opnieuw initialiseren, door de constructor of de Pin.init()-methode aan te roepen. Als een pin die in de modus alternatieve functie is geconfigureerd opnieuw wordt geïnitialiseerd met Pin.IN, Pin.OUT of Pin.OPEN_DRAIN, wordt de alternatieve functie van de pin verwijderd.

Methoden

init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None

Initialiseer de pin opnieuw met de gegeven parameters. Alleen de argumenten die worden gespecificeerd, worden ingesteld. De rest van de toestand van het pin-randapparaat blijft ongewijzigd. Zie de documentatie van de constructor voor details over de argumenten.

Retourneert None.

value(x: Any = None, /) int | None

Met deze methode kan de waarde van de pin worden ingesteld en opgevraagd, afhankelijk van of het argument x wordt opgegeven of niet.

Als het argument wordt weggelaten, haalt deze methode het digitale logische niveau van de pin op en retourneert 0 of 1 die respectievelijk overeenkomen met lage en hoge spanningssignalen. Het gedrag van deze methode hangt af van de modus van de pin:

  • Pin.IN - De methode retourneert de daadwerkelijke ingangswaarde die momenteel op de pin aanwezig is.

  • Pin.OUT - Het gedrag en de retourwaarde van de methode zijn ongedefinieerd.

  • Pin.OPEN_DRAIN - Als de pin zich in toestand ‘0’ bevindt, zijn het gedrag en de retourwaarde van de methode ongedefinieerd. Anders, als de pin zich in toestand ‘1’ bevindt, retourneert de methode de daadwerkelijke ingangswaarde die momenteel op de pin aanwezig is.

Als het argument wordt opgegeven, stelt deze methode het digitale logische niveau van de pin in. Het argument x kan alles zijn dat naar een boolean wordt geconverteerd. Als het naar True converteert, wordt de pin op toestand ‘1’ gezet, anders wordt deze op toestand ‘0’ gezet. Het gedrag van deze methode hangt af van de modus van de pin:

  • Pin.IN - De waarde wordt opgeslagen in de uitgangsbuffer voor de pin. De toestand van de pin verandert niet, deze blijft in de hoge-impedantietoestand. De opgeslagen waarde wordt actief op de pin zodra deze wordt gewijzigd naar de modus Pin.OUT of Pin.OPEN_DRAIN.

  • Pin.OUT - De uitgangsbuffer wordt onmiddellijk op de gegeven waarde ingesteld.

  • Pin.OPEN_DRAIN - Als de waarde ‘0’ is, wordt de pin op een lage spanningstoestand gezet. Anders wordt de pin op de hoge-impedantietoestand gezet.

Bij het instellen van de waarde retourneert deze methode None.

__call__(x: Any = None, /) int | None

Pin-objecten zijn aanroepbaar. De aanroepmethode biedt een (snelle) snelkoppeling om de waarde van de pin in te stellen en op te vragen. Het is gelijkwaardig aan Pin.value([x]). Zie Pin.value() voor meer details.

on() None

Zet de pin op uitgangsniveau “1”.

off() None

Zet de pin op uitgangsniveau “0”.

irq(handler: Callable[[Pin], None] | None = None, trigger: int = Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority: int = 1, wake: int | None = None, hard: bool = False) None

Configureer een interrupt-handler die wordt aangeroepen wanneer de triggerbron van de pin actief is. Als de pinmodus Pin.IN is, is de triggerbron de externe waarde op de pin. Als de pinmodus Pin.OUT is, is de triggerbron de uitgangsbuffer van de pin. Anders, als de pinmodus Pin.OPEN_DRAIN is, is de triggerbron de uitgangsbuffer voor toestand ‘0’ en de externe pinwaarde voor toestand ‘1’.

De argumenten zijn:

  • handler is een optionele functie die wordt aangeroepen wanneer de interrupt wordt getriggerd. De handler moet precies één argument aannemen, namelijk de Pin-instantie.

  • trigger configureert de gebeurtenis die een interrupt kan genereren. Mogelijke waarden zijn:

    • Pin.IRQ_FALLING interrupt op dalende rand.

    • Pin.IRQ_RISING interrupt op stijgende rand.

    Deze waarden kunnen met OR worden gecombineerd om op meerdere gebeurtenissen te triggeren.

  • priority stelt het prioriteitsniveau van de interrupt in. De waarden die het kan aannemen zijn poortspecifiek, maar hogere waarden vertegenwoordigen altijd hogere prioriteiten.

  • wake selecteert de energiemodus waarin deze interrupt het systeem kan wekken. Niet ondersteund op enige OpenMV-poort; laat op de standaardwaarde staan.

  • hard als dit waar is, wordt een hardware-interrupt gebruikt. Dit verkleint de vertraging tussen de pinverandering en het aanroepen van de handler. Hard-interrupt-handlers mogen geen geheugen toewijzen; zie Interrupt-handlers schrijven. Niet alle poorten ondersteunen dit argument.

Deze methode retourneert een callback-object.

De volgende methoden zijn uitbreidingen op de kern-Pin-API. Ze zijn gegroepeerd op poortbeschikbaarheid.

Methoden die op alle OpenMV-poorten beschikbaar zijn

low() None

Zet de pin op uitgangsniveau “0”. Alias van off().

high() None

Zet de pin op uitgangsniveau “1”. Alias van on().

alleen mimxrt + alif

toggle() None

Schakel de uitgangspin om – verander “0” in “1” of vice versa. Niet beschikbaar op STM32 (gebruik value(not value()) als je dit op STM32 nodig hebt).

alleen STM32

mode(mode: int | None = None, /) int
mode(mode: int, /) None

Verkrijg of stel de pinmodus in. Zie de documentatie van de constructor voor details over het mode-argument.

pull(pull: int | None = None, /) int
pull(pull: int, /) None

Verkrijg of stel de pull-toestand van de pin in. Zie de documentatie van de constructor voor details over het pull-argument.

Constanten

De onderstaande constanten worden gebruikt om Pin-objecten te configureren via de constructor, init() en irq(). Ze zijn gegroepeerd op poortbeschikbaarheid.

Constanten die op alle OpenMV-poorten beschikbaar zijn

IN: int

Pinmodus: digitale invoer met hoge impedantie.

OUT: int

Pinmodus: digitale push-pull-uitvoer. Alias van OUT_PP op STM32.

OPEN_DRAIN: int

Pinmodus: open-drain-uitvoer. 0 aansturen trekt de lijn laag; 1 aansturen geeft deze vrij naar hoge impedantie.

PULL_UP: int

Schakel de interne pull-up-weerstand op de pin in.

PULL_DOWN: int

Schakel de interne pull-down-weerstand op de pin in.

IRQ_FALLING: int

Geef door aan irq() om op een dalende rand te triggeren.

IRQ_RISING: int

Geef door aan irq() om op een stijgende rand te triggeren.

alleen STM32

ALT: int

Pinmodus: alternatieve functie (push-pull). Gebruik met alt= om te selecteren naar welke randapparaatfunctie de pin wordt gerouteerd. Alias van AF_PP.

ALT_OPEN_DRAIN: int

Pinmodus: alternatieve functie (open-drain). Alias van AF_OD.

ANALOG: int

Pinmodus: analoge invoer – de digitale invoer-/uitvoerbuffer wordt losgekoppeld zodat de pin door een ADC-kanaal kan worden aangestuurd.

AF_PP: int

Push-pull-modus voor alternatieve functie (zelfde waarde als ALT).

AF_OD: int

Open-drain-modus voor alternatieve functie (zelfde waarde als ALT_OPEN_DRAIN).

OUT_PP: int

Push-pull-uitvoermodus (zelfde waarde als OUT).

OUT_OD: int

Open-drain-uitvoermodus (zelfde waarde als OPEN_DRAIN).

PULL_NONE: int

Schakel de interne pull-up-/pull-down-weerstand op de pin uit.

alleen mimxrt

PULL_UP_47K: int

Schakel een interne pull-up-weerstand van ~47 kΩ in.

PULL_UP_22K: int

Schakel een interne pull-up-weerstand van ~22 kΩ in.

PULL_HOLD: int

Schakel de bus-keeper-/hold-functie van de pad in – de pin houdt zijn huidige logische niveau vast in plaats van te zweven.

DRIVE_OFF: int

Schakel de uitgangsdriver van de pin uit.

DRIVE_0: int

Laagste stuurkrachtinstelling (hoogste serie-impedantie) – de R0-referentie (~150 Ω bij 3,3 V / 260 Ω bij 1,8 V).

DRIVE_1: int

Stuurkracht één stap boven DRIVE_0.

DRIVE_2: int

Stuurkracht twee stappen boven DRIVE_0.

DRIVE_3: int

Stuurkracht drie stappen boven DRIVE_0 (standaard voor uitgangspinnen).

DRIVE_4: int

Stuurkracht vier stappen boven DRIVE_0.

DRIVE_5: int

Stuurkracht vijf stappen boven DRIVE_0.

DRIVE_6: int

Sterkste stuurkrachtinstelling.