class Pin – upravljanje I/O pinovima

Objekt pin koristi se za upravljanje I/O pinovima (poznatim i kao GPIO - opći ulaz/izlaz). Objekti pin obično su povezani s fizičkim pinom koji može davati izlazni napon i čitati ulazne napone. Klasa pin ima metode za postavljanje načina rada pina (IN, OUT, itd.) i metode za dohvaćanje i postavljanje digitalne logičke razine. Za analogno upravljanje pinom pogledajte klasu ADC.

Objekt pin konstruira se pomoću identifikatora koji jednoznačno određuje određeni I/O pin. Dopušteni oblici identifikatora i fizički pin na koji se identifikator preslikava ovise o portu. Mogući oblici identifikatora su cijeli broj, niz znakova ili torka s brojem porta i pina.

Model korištenja:

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))

Konstruktori

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

Pristupa periferiji pina (GPIO pin) povezanoj s danim id. Ako su u konstruktoru dani dodatni argumenti, oni se koriste za inicijalizaciju pina. Sve postavke koje nisu navedene ostat će u prethodnom stanju.

Argumenti su:

  • id je obavezan i može biti proizvoljan objekt. Mogući tipovi vrijednosti su: int (interni identifikator pina), str (naziv pina) i tuple (par [port, pin]).

  • mode određuje način rada pina, koji može biti jedan od:

    • Pin.IN - Pin je konfiguriran za ulaz. Ako se promatra kao izlaz, pin je u stanju visoke impedancije.

    • Pin.OUT - Pin je konfiguriran za (normalan) izlaz.

    • Pin.OPEN_DRAIN - Pin je konfiguriran za izlaz s otvorenim odvodom (open-drain). Open-drain izlaz radi na sljedeći način: ako je izlazna vrijednost postavljena na 0, pin je aktivan na niskoj razini; ako je izlazna vrijednost 1, pin je u stanju visoke impedancije. Ne implementiraju svi portovi ovaj način rada, a neki ga mogu implementirati samo na određenim pinovima.

    • Pin.ALT - Pin je konfiguriran za obavljanje alternativne funkcije, koja ovisi o portu. Za pin konfiguriran na takav način sve druge metode klase Pin (osim Pin.init()) nisu primjenjive (njihovo pozivanje dovest će do nedefiniranog ili hardverski specifičnog rezultata). Ne implementiraju svi portovi ovaj način rada.

    • Pin.ALT_OPEN_DRAIN - Isto kao Pin.ALT, ali je pin konfiguriran kao open-drain. Ne implementiraju svi portovi ovaj način rada.

    • Pin.ANALOG - Pin je konfiguriran za analogni ulaz, pogledajte klasu ADC.

  • pull određuje ima li pin priključen (slab) pull otpornik, i može biti jedan od:

    • None - Nema pull-up ni pull-down otpornika.

    • Pin.PULL_UP - Pull-up otpornik omogućen.

    • Pin.PULL_DOWN - Pull-down otpornik omogućen.

  • value je valjan samo za načine rada Pin.OUT i Pin.OPEN_DRAIN i određuje početnu izlaznu vrijednost pina ako je dana, u protivnom stanje periferije pina ostaje nepromijenjeno.

  • drive određuje izlaznu snagu pina i može biti jedan od: Pin.DRIVE_0, Pin.DRIVE_1, itd., rastuće po jačini upravljanja. Stvarne sposobnosti upravljanja strujom ovise o portu. Ne implementiraju svi portovi ovaj argument.

  • alt određuje alternativnu funkciju za pin, a vrijednosti koje može poprimiti ovise o portu. Ovaj argument je valjan samo za načine rada Pin.ALT i Pin.ALT_OPEN_DRAIN. Može se koristiti kada pin podržava više od jedne alternativne funkcije. Ako je podržana samo jedna alternativna funkcija pina, ovaj argument nije potreban. Ne implementiraju svi portovi ovaj argument.

Kao što je gore navedeno, klasa Pin omogućuje postavljanje alternativne funkcije za određeni pin, ali ne određuje nikakve daljnje operacije nad takvim pinom. Pinovi konfigurirani u načinu rada alternativne funkcije obično se ne koriste kao GPIO, već njima upravljaju druge hardverske periferije. Jedina operacija podržana na takvom pinu je ponovna inicijalizacija, pozivanjem konstruktora ili metode Pin.init(). Ako se pin koji je konfiguriran u načinu rada alternativne funkcije ponovno inicijalizira s Pin.IN, Pin.OUT ili Pin.OPEN_DRAIN, alternativna funkcija bit će uklonjena s pina.

Metode

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

Ponovno inicijalizira pin pomoću danih parametara. Bit će postavljeni samo oni argumenti koji su navedeni. Ostatak stanja periferije pina ostat će nepromijenjen. Pojedinosti o argumentima potražite u dokumentaciji konstruktora.

Vraća None.

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

Ova metoda omogućuje postavljanje i dohvaćanje vrijednosti pina, ovisno o tome je li argument x naveden ili ne.

Ako je argument izostavljen, ova metoda dohvaća digitalnu logičku razinu pina, vraćajući 0 ili 1 što odgovara signalima niskog odnosno visokog napona. Ponašanje ove metode ovisi o načinu rada pina:

  • Pin.IN - Metoda vraća stvarnu ulaznu vrijednost trenutno prisutnu na pinu.

  • Pin.OUT - Ponašanje i povratna vrijednost metode su nedefinirani.

  • Pin.OPEN_DRAIN - Ako je pin u stanju ‘0’, tada su ponašanje i povratna vrijednost metode nedefinirani. U protivnom, ako je pin u stanju ‘1’, metoda vraća stvarnu ulaznu vrijednost trenutno prisutnu na pinu.

Ako je argument naveden, ova metoda postavlja digitalnu logičku razinu pina. Argument x može biti bilo što što se pretvara u boolean. Ako se pretvori u True, pin se postavlja u stanje ‘1’, u protivnom se postavlja u stanje ‘0’. Ponašanje ove metode ovisi o načinu rada pina:

  • Pin.IN - Vrijednost se pohranjuje u izlazni međuspremnik pina. Stanje pina se ne mijenja, ostaje u stanju visoke impedancije. Pohranjena vrijednost postat će aktivna na pinu čim se promijeni u način rada Pin.OUT ili Pin.OPEN_DRAIN.

  • Pin.OUT - Izlazni međuspremnik odmah se postavlja na danu vrijednost.

  • Pin.OPEN_DRAIN - Ako je vrijednost ‘0’, pin se postavlja u stanje niskog napona. U protivnom se pin postavlja u stanje visoke impedancije.

Pri postavljanju vrijednosti ova metoda vraća None.

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

Objekti pin su pozivni. Metoda poziva pruža (brzu) prečicu za postavljanje i dohvaćanje vrijednosti pina. Ekvivalentna je Pin.value([x]). Pogledajte Pin.value() za više pojedinosti.

on() None

Postavlja pin na izlaznu razinu „1”.

off() None

Postavlja pin na izlaznu razinu „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

Konfigurira rukovatelj prekida koji će biti pozvan kada je izvor okidanja pina aktivan. Ako je način rada pina Pin.IN, tada je izvor okidanja vanjska vrijednost na pinu. Ako je način rada pina Pin.OUT, tada je izvor okidanja izlazni međuspremnik pina. U protivnom, ako je način rada pina Pin.OPEN_DRAIN, tada je izvor okidanja izlazni međuspremnik za stanje ‘0’ i vanjska vrijednost pina za stanje ‘1’.

Argumenti su:

  • handler je neobavezna funkcija koja se poziva kada se prekid okine. Rukovatelj mora primati točno jedan argument, a to je instanca Pin.

  • trigger konfigurira događaj koji može generirati prekid. Moguće vrijednosti su:

    • Pin.IRQ_FALLING prekid na padajućem rubu.

    • Pin.IRQ_RISING prekid na rastućem rubu.

    Ove vrijednosti mogu se kombinirati operatorom OR kako bi se okinule na više događaja.

  • priority postavlja razinu prioriteta prekida. Vrijednosti koje može poprimiti ovise o portu, ali više vrijednosti uvijek predstavljaju više prioritete.

  • wake odabire način rada napajanja u kojem ovaj prekid može probuditi sustav. Nije podržano ni na jednom OpenMV portu; ostavite na zadanoj vrijednosti.

  • hard ako je istinito, koristi se hardverski prekid. To smanjuje kašnjenje između promjene pina i pozivanja rukovatelja. Rukovatelji hardverskih prekida ne smiju alocirati memoriju; pogledajte Pisanje rukovatelja prekidima. Ne podržavaju svi portovi ovaj argument.

Ova metoda vraća objekt povratnog poziva.

Sljedeće metode su proširenja osnovnog Pin API-ja. Grupirane su prema dostupnosti na portovima.

Metode dostupne na svim OpenMV portovima

low() None

Postavlja pin na izlaznu razinu „0”. Alias za off().

high() None

Postavlja pin na izlaznu razinu „1”. Alias za on().

samo mimxrt + alif

toggle() None

Mijenja stanje izlaznog pina – prebacuje „0” u „1” ili obratno. Nije izloženo na STM32 (koristite value(not value()) ako vam ovo treba na STM32).

samo STM32

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

Dohvaća ili postavlja način rada pina. Pojedinosti o argumentu mode potražite u dokumentaciji konstruktora.

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

Dohvaća ili postavlja stanje pull pina. Pojedinosti o argumentu pull potražite u dokumentaciji konstruktora.

Konstante

Konstante u nastavku koriste se za konfiguriranje objekata Pin putem konstruktora, init() i irq(). Grupirane su prema dostupnosti na portovima.

Konstante dostupne na svim OpenMV portovima

IN: int

Način rada pina: digitalni ulaz visoke impedancije.

OUT: int

Način rada pina: push-pull digitalni izlaz. Alias za OUT_PP na STM32.

OPEN_DRAIN: int

Način rada pina: open-drain izlaz. Upravljanje s 0 povlači liniju nisko; upravljanje s 1 otpušta je u visoku impedanciju.

PULL_UP: int

Omogućuje interni pull-up otpornik na pinu.

PULL_DOWN: int

Omogućuje interni pull-down otpornik na pinu.

IRQ_FALLING: int

Proslijedite u irq() za okidanje na padajućem rubu.

IRQ_RISING: int

Proslijedite u irq() za okidanje na rastućem rubu.

samo STM32

ALT: int

Način rada pina: alternativna funkcija (push-pull). Koristite s alt= za odabir periferne funkcije na koju se pin usmjerava. Alias za AF_PP.

ALT_OPEN_DRAIN: int

Način rada pina: alternativna funkcija (open-drain). Alias za AF_OD.

ANALOG: int

Način rada pina: analogni ulaz – digitalni ulazno/izlazni međuspremnik je odspojen tako da pinom može upravljati ADC kanal.

AF_PP: int

Push-pull način rada alternativne funkcije (ista vrijednost kao ALT).

AF_OD: int

Open-drain način rada alternativne funkcije (ista vrijednost kao ALT_OPEN_DRAIN).

OUT_PP: int

Push-pull izlazni način rada (ista vrijednost kao OUT).

OUT_OD: int

Open-drain izlazni način rada (ista vrijednost kao OPEN_DRAIN).

PULL_NONE: int

Onemogućuje interni pull-up / pull-down otpornik na pinu.

samo mimxrt

PULL_UP_47K: int

Omogućuje interni pull-up otpornik od ~47 kΩ.

PULL_UP_22K: int

Omogućuje interni pull-up otpornik od ~22 kΩ.

PULL_HOLD: int

Omogućuje funkciju zadržavanja stanja (bus-keeper) pločice – pin zadržava svoju trenutnu logičku razinu umjesto da plovi.

DRIVE_OFF: int

Onemogućuje izlazni upravljač pina.

DRIVE_0: int

Postavka najniže jačine upravljanja (najviša serijska impedancija) – referenca R0 (~150 Ω pri 3,3 V / 260 Ω pri 1,8 V).

DRIVE_1: int

Jačina upravljanja jedan korak iznad DRIVE_0.

DRIVE_2: int

Jačina upravljanja dva koraka iznad DRIVE_0.

DRIVE_3: int

Jačina upravljanja tri koraka iznad DRIVE_0 (zadano za izlazne pinove).

DRIVE_4: int

Jačina upravljanja četiri koraka iznad DRIVE_0.

DRIVE_5: int

Jačina upravljanja pet koraka iznad DRIVE_0.

DRIVE_6: int

Postavka najjače jačine upravljanja.