Az 1088AS típusű 8x8-as LED mátrixnál a sorkiválasztó vonalak a katódokat közösítik. Multiplex kijelzést igényel, egyidejűleg legfeljebb egy sor, vagy egy oszlop lehet aktív. Az E-bay kínálatában kapható modulnál egy MAX7219 típusú IC hajtja meg a LED-eket, ami az SPI buszon kerestül írható.
Az IC tárolja a LED-ek állapotát és automatikusan frissíti a kijelzést, korlátoza a LED-ek áramát és digitálisan szabályozza a LED-ek fényerejét (PWM) 15 fokozatban.
Szoftveres meghajtó: Adafruit CircuitPython MAX7129 programkönyvtár
A programkönyvtárhoz mintapéldákat is mellékeltek. Most a max7219_simpletest.py programot mutatjuk be, ami egy 8x8-as LED mátrixot vezérel.
Mielőtt tovább lépnénk, ellenőrizük, hogy csatlakoztatva van-e a CircuitPython kártyánk!
import os
print("Running CircuitPython release", os.uname().release, "on board", os.uname().machine)
Running CircuitPython release 7.2.5 on board stm32f411ce-blackpill-with-flash with STM32F411CE
Az stm32f411ce-blackpill-with-flash kártya esetén az SPI2 csatornát fogjuk használni (az SPI1 csatorna foglalt a flash memória kezelésére). A CE kiválasztó jel elvileg bármelyik digitális kimeneten kiadható, de itt a szokásos módon az SPI2 csatorna NSS2 kivezetését használjuk fel (B12 tüske).
Inicializálásnál először az SPI csatornát konfiguráljuk, majd ezt kigészítjük egy CE vezrlő digitális kimenettel, s ezeken keresztül vezéreljük a Matrix8x8 objektumot.
import time
import board
import digitalio
import busio
from adafruit_max7219 import matrices
spi = busio.SPI(board.B13, MOSI=board.B15)
cs = digitalio.DigitalInOut(board.B12)
matrix = matrices.Matrix8x8(spi, cs)
A MAX7219 IC inicializálása (a matrices.py állományban található):
def init_display(self) -> None:
for cmd, data in (
(_SHUTDOWN, 0), # Lekapcsolja a kijelzést
(_DISPLAYTEST, 0), # Normál módba kapcsol
(_SCANLIMIT, 7), # Minden számjegyet/pontsort megjelenít
(_DECODEMODE, 0), # Nincs BCD->7SEG dekódolás
(_SHUTDOWN, 1), # Kijelzés újraengedélyezés
):
self.write_cmd(cmd, data)
Az alábbi parancsokal bármikor újra alapállapotba állíthatjuk az IC-t és a kijelzőt.
matrix.init_display()
matrix.fill(False)
matrix.show()
Tesztelés gyanánt kapcsoljunk fel minden LED-et
print("Minden LED-et felkapcsolunk")
matrix.fill(True)
matrix.show()
time.sleep(0.5)
Minden LED-et felkapcsolunk
Kapcsoljuk le a LED-eket!
print("Minden LED-et lekapcsolunk")
matrix.fill(False)
matrix.show()
time.sleep(0.5)
Minden LED-et lekapcsolunk
Az I ♥ felirat megjelenítése nyolc lépésben:
minta = [0xFF, 0x00, 0x30, 0x48, 0x90, 0x90, 0x48, 0x30]
for i in range(8):
matrix.write_cmd(i+1,minta[i]) # Regisztercímek: 1-7
time.sleep(1.0)
Egy oszlop kivilágítása és görgetése
# one column of leds lit
for i in range(8):
matrix.pixel(1, i, 1)
matrix.show()
time.sleep(0.5)
# now scroll the column to the right
for j in range(8):
matrix.scroll(1, 0)
matrix.show()
time.sleep(0.5)
Szöveg megjelenítése karakterenként. Itt most az "Adafruit" szó betűit jelenítjük meg egyenként.
A megjelenítést a matrix.text(char, x, y) tagfüggvény hívásával végezzül, ahol:
# show a string one character at a time
adafruit = "Adafruit"
for char in adafruit:
matrix.fill(0)
matrix.text(char, 0, 0)
matrix.show()
time.sleep(1.0)
Az utolsó betűt balra kigörgetjük a kijelzőről. A gorgetés a scroll(dx,dy) metódussal végezhető:
matrix.scroll(-1,0) - görgetés balra
matrix.scroll(1,0) - görgetés jobbra
matrix.scroll(0,-1) - görgetés felfelé
matrix.scroll(0,1) - görgetés lefelé
Megjegyzés: Ha nem töröljük a szélső sort, annak tartalma másolódik görgetéskor. Az alábbi példában ez azért nem okoz gondot, mert a jobb szélen található oszlop eleve csupa nullát tartalmaz, s balra görgetünk.
# scroll the last character off the display
for i in range(8):
matrix.scroll(-1,0)
matrix.show()
time.sleep(0.5)
Szöveg görgetése fényújság-szerűen. Itt most a "Hobbielektronika" szót görgetjük.
# scroll a string across the display
mytext = "Hobbielektronika"
for pixel_position in range(len(mytext) * 8):
matrix.fill(0)
matrix.text(mytext, -pixel_position, 0)
matrix.show()
time.sleep(0.25)