machine — functies met betrekking tot de hardware¶
De machine-module bevat specifieke functies met betrekking tot de hardware op een bepaald board. De meeste functies in deze module bieden directe en onbeperkte toegang tot en controle over hardwareblokken in een systeem (zoals CPU, timers, bussen, enz.).
Geheugentoegang¶
De module biedt drie subscriptable objecten voor ruwe geheugentoegang. Elk gedraagt zich als een ijle array geïndexeerd op byte-adres: value = memN[addr] leest, memN[addr] = value schrijft. Het adres is altijd een byte-adres, ongeacht de toegangsbreedte.
- machine.mem8¶
Subscriptable 8-bits geheugentoegang.
mem8[addr]leest eenintin het bereik 0-255 uit de byte opaddr;mem8[addr] = valueschrijft de onderste 8 bits vanvalue.addrmoet uitgelijnd zijn op 1 byte (elk adres).
- machine.mem16¶
Subscriptable 16-bits (halfword) geheugentoegang.
mem16[addr]leest eenintin het bereik 0-65535;mem16[addr] = valueschrijft de onderste 16 bits.addrmoet uitgelijnd zijn op 2 bytes.
- machine.mem32¶
Subscriptable 32-bits (word) geheugentoegang.
mem32[addr]leest eenintin het bereik 0-0xFFFFFFFF;mem32[addr] = valueschrijft de onderste 32 bits.addrmoet uitgelijnd zijn op 4 bytes.
Voorbeeldgebruik (registers zijn specifiek voor een STM32H7-microcontroller – op de OpenMV Cam H7 / H7 Plus / Pure Thermal is de headerpin P0 verbonden met PB15):
import machine
from micropython import const
GPIOB = const(0x58020400)
GPIO_BSRR = const(0x18)
GPIO_IDR = const(0x10)
# set P0 (PB15) high via the GPIOB bit-set/reset register
machine.mem32[GPIOB + GPIO_BSRR] = 1 << 15
# read P0 (PB15) directly out of the GPIOB input-data register
value = (machine.mem32[GPIOB + GPIO_IDR] >> 15) & 1
Diverse functies¶
- machine.unique_id() bytes¶
Geeft een
bytes-object terug met een unieke identifier voor dit board. De waarde wordt uitgelezen uit de hardware van de MCU (doorgaans het in de fabriek geprogrammeerde serienummer van het apparaat), dus deze is stabiel over herstarts en verschilt van board tot board.De lengte hangt af van de MCU-familie – 12 bytes op STM32, 8 bytes op de mimxrt- en alif-ports. Als je applicatie een ID met vaste lengte nodig heeft, slice of hash dan de teruggegeven waarde.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Meet de breedte van een enkele puls op
pinen geeft de duur ervan terug in microseconden.pinmoet als digitale ingang geconfigureerd zijn.pulse_levelis de te timen pulspolariteit:1voor een hoge puls,0voor een lage puls.De functie werkt in twee fasen. Eerst, als de pin nog niet op
pulse_levelstaat, wacht deze tot de pin overgaat naarpulse_level(het begin van de puls). Vervolgens meet deze de tijd dat de pin oppulse_levelblijft voordat deze weer terugschakelt (het einde van de puls). De gemeten tijd wordt teruggegeven in microseconden.timeout_usbegrenst elke fase onafhankelijk (dus een worst-case aanroep duurt tot2 * timeout_us). Bij een timeout geeft de functie een negatieve waarde terug die aangeeft welke fase de timeout veroorzaakte:-2– timeout bij het wachten op de stijgende flank (de pin bereikte nooitpulse_level).-1– timeout bij het wachten op de dalende flank (de puls was langer dantimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Verstuurt data door middel van bit-banging op de gespecificeerde pin. Het argument encoding specificeert hoe de bits worden gecodeerd, en timing is een encoding-specifieke timingspecificatie.
De ondersteunde encodings zijn:
0voor “high low”-pulsduurmodulatie. Hiermee worden 0- en 1-bits verzonden als getimede pulsen, te beginnen met de meest significante bit. De timing moet een viertal nanoseconden zijn in het formaat(high_time_0, low_time_0, high_time_1, low_time_1). Bijvoorbeeld,(400, 850, 800, 450)is de timingspecificatie voor WS2812 RGB-LED’s op 800kHz.
De timingnauwkeurigheid is hardware-afhankelijk; snellere MCU’s produceren strakkere pulsen (doorgaans tientallen nanoseconden).
Notitie
Zie voor het aansturen van WS2812- / NeoPixel-strips de
neopixel-module voor een API op hoger niveau.
Constanten¶
De onderstaande constanten worden teruggegeven door reset_cause() en geven aan waarom de MCU het laatst is gereset. Beschikbaar op de STM32- en mimxrt-ports; de alif-port (OpenMV Cam AE3) biedt momenteel geen resetoorzaak-constanten en zijn reset_cause() geeft altijd 0 terug.
- machine.PWRON_RESET: int¶
Reset veroorzaakt doordat er voeding op de chip werd aangelegd. STM32- en mimxrt-ports.
- machine.WDT_RESET: int¶
Reset veroorzaakt doordat de watchdog-timer verliep. STM32- en mimxrt-ports.
- machine.SOFT_RESET: int¶
Reset veroorzaakt door
soft_reset()(de Python-interpreter herstartte zonder een hardware-reset). STM32- en mimxrt-ports.
Klassen¶
- class Pin – I/O-pinnen aansturen
- class Signal – externe I/O-apparaten besturen en uitlezen
- class LED – draagbare aansturing van on-board LED
- class ADC – analoog-naar-digitaalconversie
- class PWM – pulsbreedtemodulatie
- class UART – duplex seriële communicatiebus
- class SPI – een Serial Peripheral Interface-busprotocol (controllerzijde)
- class SoftSPI – softwarematig geëmuleerde SPI-bus
- class I2C – een tweedraads serieel protocol
- class SoftI2C – software-geëmuleerde I2C-bus
- class I2CTarget – een I2C-targetapparaat
- class I2S – Inter-IC Sound-busprotocol
- class CAN – Controller Area Network-protocol
- class RTC – real-time clock
- class Timer – virtuele periodieke / one-shot timer
- class WDT – watchdog timer
- class SDCard – SD-/MMC-kaartstuurprogramma
- class Counter – pulsteller
- class Encoder – quadrature-decoder