AE3 OLED Breakout

AE3 OLED Breakout yhdistää OpenMV AE3 -kortin 128 × 128 RGB OLED -näyttöön, 5-suuntaiseen ohjaussauvaan ja 10-nastaiseen ARM SWD -liittimeen mahdollistaen itsenäisen esikatselun, yksinkertaisen syötteen ja JTAG/SWD-virheenkorjauksen.

AE3 OLED Breakout

Täydellinen datalehti, kuvat ja tilaustiedot löytyvät AE3 OLED Breakout -tuotesivulta.

Kohokohdat

  • 128 × 128 RGB OLED -näyttöä ohjaa SSD1351-ohjain SPI:n kautta.

  • AS90R 5-suuntainen ohjaussauva keskellä olevalla painikkeella, tuotuna ulos P4/P5 I²C -väylälle.

  • Reset-painike ja palautuskytkin secure-enclave-UART-yhteyttä varten.

  • OLED-irrotuskytkin, jolla näyttö voidaan sähköisesti irrottaa SPI-väylästä.

  • Kaksi Qwiic-liitintä samalla P4/P5 I²C -väylällä.

  • ARM 10-nastainen Cortex Debug -liitin SWD/JTAG-virheenkorjaukseen.

  • Neljä maadoituskoukun testipistettä.

Muista

Neljä kulmassa olevaa M1.6-kiinnitysreikää, joiden avulla breakoutin voi pultata koteloon tai kiinnikkeeseen.

Nastaviittaus

Kaikki breakoutin AE3-signaalit otetaan AE3:n pohjassa olevasta B2B-liittimestä ja tuodaan ulos kahteen sivunastaliittimeen — P0P5 yhdellä puolella ja P6P9 toisella — molemmat 3,3 V:n referenssillä. Kunkin nastan täydellinen vaihtoehtoisten toimintojen luettelo löytyy OpenMV AE3 -sivulta; breakout käyttää nastoja seuraavasti:

Nasta

Referenssi

AE3-ominaisuudet

Breakoutin käyttö

P0

3,3 V

SPI0 MOSI / I2C2 SCL / UART4 TX / TIM0 T1 / PDM D3

OLED SPI MOSI

P1

3,3 V

SPI0 MISO / I2C2 SDA / UART4 RX / TIM0 T0

vapaa

P2

3,3 V

SPI0 SCLK / LPI2C SDA / UART5 TX / TIM1 T1

OLED SPI SCLK

P3

3,3 V

SPI0 SS / LPI2C SCL / UART5 RX / TIM1 T0 / PDM C3

OLED SPI CS

P4

3,3 V

I2C1 SCL / UART1 TX / TIM2 T1 / PDM C0 / CAN TX

Ohjaussauva / Qwiic I²C SCL

P5

3,3 V

I2C1 SDA / UART1 RX / TIM2 T0 / PDM D0 / CAN RX

Ohjaussauva / Qwiic I²C SDA

RESET

3,3 V

NRST

Paina kortilla olevaa RESET-painiketta tai vedä GND:hen nollataksesi AE3:n

P6

3,3 V

I2C1 SDA / UART3 CTS / TIM9 T0

vapaa

P7

3,3 V

I2C1 SCL / UART3 RTS / TIM9 T1

OLED RESET

P8

3,3 V

I3C SDA / UART3 RX / TIM5 T0 / ADC ch S10

OLED DC (rekisterin valinta)

P9

3,3 V

I3C SCL / UART3 TX / TIM5 T1 / ADC ch S11

Ohjaussauva IRQ (aktiivinen alhaalla tilan muuttuessa)

3,3 V:n linja

Syöttää virran OLED-näytölle, ohjaussauvan laajentimelle ja Qwiic-laitteille

GND-linja

Yhteinen maa

Muista

Palautuskytkin kääntää AE3:n sisäistä USB-multiplekseriä: AE3:n omat USB-nastat irrotetaan USB-C-portista, ja niiden tilalle portille kytketään secure-enclave-UART:iin liitetty USB-sarjamuunnin. Kun kytkin on päällä, isäntäpuolen Alif-työkalut voivat keskustella secure enclaven kanssa ja ohjelmoida AE3:n käynnistyslataimen uudelleen. Jätä kytkin pois päältä normaalia käyttöä varten, jotta USB-C-portti toimii AE3:n USB-porttina.

Muista

OLED-kytkimen on oltava päällä, jotta OLED toimii — se ohjaa virtaa näytölle ja kytkee OLED-ohjausnastat (P0, P2, P3, P7, P8) AE3:n GPIO:hon. Kun kytkin on pois päältä, vain P4, P5 ja P9 pysyvät kytkettyinä. Kytkimen nykyinen tila näkyy ohjaussauvan laajentimessa bittinä 0x40 — laajentimen raaka nastalukema on alhaalla, kun kytkin on päällä.

Qwiic-liittimet

Breakoutilla on kaksi Qwiic 4-nastaista JST-SH 1,0 mm -liitintä, jotka jakavat saman P4/P5 I²C -väylän kortilla olevan ohjaussauvan laajentimen kanssa, joten lisättävien Qwiic-laitteiden on vältettävä ohjaussauvan laajentimen osoitetta (0x63).

Nasta

Signaali

1

GND

+3,3 V

2

3

SDA (P5)

4

SCL (P4)

JTAG-liitin

Breakoutilla oleva 10-nastainen 1,27 mm ARM Cortex Debug -liitin on kytketty suoraan AE3:n SWD/JTAG-linjoihin. Kaikki signaalit ovat 1,8 V:n referenssillä — käytä tasonsiirtoanturia tai sellaista, jonka kohdejännite seuraa VCC_REF-arvoa (nasta 1).

Nasta

Signaali

1

VCC_REF (+1,8 V)

+3,3 V

TMS (SWDIO)

3

+1,8 V

4

TCK (SWCLK)

5

GND

6

TDO (SWO)

7

avain (ei nastaa)

8

TDI

9

GND

10

DEBUG_RST_N (JTAG/virheenkorjauksen nollaus — erillinen järjestelmän NRST:stä)

Käyttö

Ohjaa OLED-näyttöä display.SPIDisplay -luokan kautta SSD1351 -ohjainilmentymällä. Suoratoista kameran kehyksiä 128 × 128 -näytölle:

import csi
import time
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))

lcd = display.SPIDisplay(width=128, height=128,
                         controller=display.SSD1351())
clock = time.clock()

while True:
    clock.tick()
    lcd.write(csi0.snapshot(),
              hint=image.CENTER | image.SCALE_ASPECT_KEEP)
    print(clock.fps())

Lue 5-suuntaista ohjaussauvaa pakastetun pca9674a.PCA9674A -ajurin kautta. Laajennin asettaa P9:n aktiiviseksi tilan muuttuessa, joten kytke IRQ-takaisinkutsu, joka lukitsee uuden painiketilan. Painikkeet ovat aktiivisia alhaalla laajentimessa; alla oleva koodi XOR-operoi lukeman 0xFF:llä, joten asetettu bitti state-muuttujassa tarkoittaa painettua:

Bitti

Suunta

0x01

Ohjaussauva oikealle

0x02

Ohjaussauva ylös

0x04

Ohjaussauva vasemmalle

0x08

Ohjaussauva alas

0x10

Ohjaussauvan keskipainallus

0x40

OLED-kytkin (asetettu state-muuttujaan, kun OLED on päällä)

import csi
import time
import display
from pca9674a import PCA9674A
from machine import I2C

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))

lcd = display.SPIDisplay(width=128, height=128,
                         controller=display.SSD1351())
clock = time.clock()

state = 0
cursor_x = 0
cursor_y = 0

def read_expander(pin):
    global exp, state
    # Buttons are active‑low on the expander; XOR for active‑high bits.
    state = exp.read() ^ 0xFF

exp = PCA9674A(I2C(1), irq_pin="P9", callback=read_expander)

def update_cursor():
    global cursor_x, cursor_y
    if state & 0x01:  cursor_x += 2     # Right
    if state & 0x02:  cursor_y -= 2     # Up
    if state & 0x04:  cursor_x -= 2     # Left
    if state & 0x08:  cursor_y += 2     # Down
    if state & 0x10:                    # Centre
        cursor_x = 0
        cursor_y = 0

while True:
    clock.tick()
    update_cursor()
    lcd.write(csi0.snapshot(), x=cursor_x, y=cursor_y,
              x_scale=128 / 400, y_scale=128 / 400)
    print(clock.fps())