マイクロビット(e_14)MAX7219 8x8LEDマトリックスディスプレイ
MAX7219
LED-Driver MAX7219 を搭載した8x8LEDマトリックスディスプレイモジュールを使ってみようと思います。
以下が8x8LEDモジュールの外観です。
下図はデータシートのMAX7219の参考例です。7セグメントLEDのドライバーに使うのが一般的なようですが、8x8LEDマトリックスのドライバーとしても使えます。
MAX7219 のデータシートをみると5.0V動作なので、micro:bitから電源供給ができません。別途、DC 5V電源が必要です。そのためレベルコンバータを介しての通信になります。MAX7219はSPI通信に対応しているそうです。(少し違うみたいですが)詳細はデータシートを参照してください。
接続例
micro:bitとの接続は以下のようにしました。外部の5V電源を使用します。MAX7219のCS(Chip-Select)用に、micro:bitのPin6をデジタルモード出力で使います。レベルコンバータを介して、micro:bitのSCK、MOSI、Pin6を各々MAX7219のCLK、DIN、CSと接続します。
※データシートでは、MAX7221がCS、MAX7219はLOADと記載されています。
※micro:bitのピン配置図は「https://tech.microbit.org/hardware/edgeconnector/」からの引用です。
実体配線の写真です。
「04.9」と表示されている物は5Vの外部電源です。
MAX7219の概要
データシートのタイムチャートを見るとCSが’L’でMAX7219を選択し、CS=’L’の間でCLK(Serial-Clock)に合わせてDIN(Serial-Data Input)されるようです。
そのため、CS信号はmicro:bitのPin6からデジタル出力で作成します。※CS:チップセレクト
データの送信は以下の形式になっています。ADDRESSと記載されていますがコマンドのアドレスと思った方が分かりやすいです。
例えば、
ShutdownModeを実行するには、下図のアドレスマップから0x0cのレジスタに’0’を書込みます。’1’を書込むとNormalModeになります。
Digit 0は8x8LED-Matrixの場合は1列目になります。0x01に0x0fを書込むと0b00001111で下4つが点灯します。
各コマンドの詳細はデータシートで確認ください。
初期化
データシートから初期起動時には、制御レジスタがリセット、シャットダウンモード、1桁(1行)のスキャン、デコードなし、最小の輝度 の状態になるようです。
そのため、「シャットダウンモード>ノーマルモード」「1行スキャン>8行スキャン」にする必要があります。
初期化の送信データは以下のようにしました。
(0x09,0), # (09)no decode for digit7-0
(0x0b,7), # (11)scan limit display digits 0~7
(0x0f,0), # (15)displaytest OFF normal
(0x0c,1), # (12)normal(0:shutdown)
spi.write(bytearray([command, data])) で送ります。
実行例
一列から順次点灯して全点灯>一列から順次消灯して全消灯>2列目に0xccで点灯するスクリプトを以下のように作成しました。
from microbit import *
# MAX7219 SPI test CS >> LOAD
CS=pin8
CS.write_digital(1)
def dig_init(): # 初期化
ini_dat=[
(0x09,0), # (09)no decode for digit7-0
(0x0b,7), # (11)scan limit display digits 0~7
(0x0f,0), # (15)displaytest OFF normal
(0x0c,1), # (12)normal(0:shutdown)
]
for i in ini_dat:
wr_spi(i[0],i[1])
sleep(5)
def wr_spi(cmd,data): # コマンド書込み
buf=bytearray(2)
buf[0]=cmd # アドレス
buf[1]=data # 書込むデータ
CS.write_digital(0) # CS=’L'にして使用しているMAX7291を有効にする
spi.write(buf) # 書込む
CS.write_digital(1) # CS=’H'にして送信終、シフト
return
#spi.init(baudrate=1000000, bits=8, mode=0, sclk=pin13, mosi=pin15, miso=pin14)
spi.init() # SPIの初期化
dig_init() # MAX7291の初期化を実行
digi=0
for i in range(8): # 1列づづ点灯
digi=digi+1
wr_spi(digi,0xff)
sleep(200)
sleep(1000)
digi=0
for i in range(8): # 1列づづ消灯
digi=digi+1
wr_spi(digi,0x00)
sleep(200)
sleep(1000)
wr_spi(2,0xcc) # 2列目に0b11001100で点灯
sleep(2000)
wr_spi(2,0x00) # 2列目を消灯
実行結果
>>> %Run 1206_max7219_spi_tes_0b.py
>>>
初期化 > 1列点灯
2列点灯 > 4列点灯
全点灯 >(省略)左列から消灯 > 全消灯 > 2列目0Xcc(0b11001100)点灯
まとめ
micro:bitのSPIを用いてLED-Driver MAX7219を搭載した8x8LEDマトリックの点灯ができました。機会があれば8x8LEDの多段なども試して見たいと思います。