Az E-bay kínálatában kapható számkijelző modul két darab 3641AH típusú kijelzőjét egy MAX7219 típusú IC hajtja meg, ami az SPI buszon kerestül írható. A modul nyolc számjegyet tud megjeleníteni, melyekhez egy-egy tizedespont is tartozik.
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_showbcddigits.py programot mutatjuk be, ami egy 8 számjegyű, hétszegmenses kijelzőt 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
import random
from adafruit_max7219 import bcddigits
spi = busio.SPI(board.B13, MOSI=board.B15)
cs = digitalio.DigitalInOut(board.B12)
leds = bcddigits.BCDDigits(spi, cs, nDigits=8)
A MAX7219 IC inicializálása a _bcddigits.py állományban található:
def init_display(self) -> None:
for cmd, data in (
(_SHUTDOWN, 0), # Kijelzés letiltása
(_DISPLAYTEST, 0), # Normál mód beállítása
(_SCANLIMIT, 7), # Minden számjegy kijelzése
(_DECODEMODE, (2**self._ndigits) - 1), # Minden számjegy dekódolva
(_SHUTDOWN, 1), # Kijelzés engedélyezése
):
self.write_cmd(cmd, data)
Az alábbi parancsokkal bármikor újrainicializálhatjuk a MAX7219 IC-t és a kijelzőt:
leds.init_display()
leds.brightness(5)
leds.clear_all()
leds.show()
Minimálisra állítjuk a fényerőt és lekapcsoljuk az összes LED-et.
# clear display and dim 0
leds.brightness(0)
leds.clear_all()
leds.show()
Megjelenítünk egy nyolcjegyű számot (jobbra igazítva), ami egyelőre halványan látszik.
# place 8-digit number on display
value = 12345678
leds.show_str(0, "{:8}".format(value))
leds.show()
Fokozatosan növeljük a fényerőt
# increase the brightness slowly
for i in range(16):
leds.brightness(i)
time.sleep(0.5)
Kiíratjuk a -HELP-90 szöveget
leds.brightness(7)
# show "-HELP-90" on display
leds.show_str(6, "90") # show 90 starting at position 6
leds.set_digit(0, 10) # show - at position 0
leds.set_digit(1, 12) # show H at position 1
leds.set_digit(2, 11) # show E at position 2
leds.set_digit(3, 13) # show L at position 3
leds.set_digit(4, 14) # show P at position 4
leds.set_digit(5, 10) # show - at position 5
leds.show()
Sorban felvillantjuk a tizedespontokat
leds.clear_all()
leds.brightness(5)
# light up the dots
for i in range(8):
leds.show_dot(i, 1)
leds.show()
time.sleep(0.5)
leds.show_dot(i, 0)
leds.show()
Kiírunk két tiedest is tartalmazó számot
leds.clear_all()
leds.brightness(5)
# set two 4-digit numbers with decimals
leds.show_str(0, " 72.5")
leds.show_str(4, "-10.8")
leds.show()
Kiírunk egy négyjegyű számot, a baloldali "térfélen"
leds.brightness(10)
leds.clear_all()
# show a 4 character numeric string
leds.show_str(0, "1234")
leds.show()