0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MachiKania type Pで赤色ドットマトリクスLED 8x8を使う

Posted at

はじめに

手元にある秋月電子通商の購入した赤色ドットマトリクスLED 8x8ドット OSL641501-ARAをMachiKania type Pで動かしてみました。

検証環境

以下の環境でプログラムの作成と検証を行ないました。

接続

Raspberry Pi Picoと赤色ドットマトリクスLED 8x8ドットの接続は入門MachiKaniaの43ページを参考にMachiKaniaのOUT8L、OUT8H命令を使用しやすいように次のように接続しました。

列方向のピンは左端をbit7〜0のMSBに、右端をLSBとなるよう接続し、行方向のピンは一番上をbit8〜15のLSBに、一番下をMSBとなるように接続しました。この接続でMachiKaniaのOUT8L命令で点灯するLEDの列の位置を、OUT8H命令で点灯するLEDの行の位置を指定できるようになります。

実際の配線は次のように接続しました。

8x8LEDピン Pico MachiKaniaのI/Oビット
5 GP28 bit15
2 GP27 bit14
7 GP26 bit13
1 GP22 bit12
12 GP21 bit11
8 GP20 bit10
14 GP9 bit9
9 GP8 bit8
13 GP7 bit7
3 GP6 bit6
4 GP5 bit5
10 GP4 bit4
6 GP3 bit3
11 GP2 bit2
15 GP1 bit1
16 GP0 bit0

8x8 LEDのピンは位置は秋月電子通商の赤色ドットマトリクスLED 8×8ドット OSL641501-ARAに掲載されているデータシートに記載されていものを元にしています。

電流制限抵抗に150Ωの抵抗器を行側(カソード側)のピン(1、2、5、7、8、9、12、14)に接続しています。

LEDとピン、MachiKaniaのI/O bitとの対応を図に示します。

8x8LED.png

LEDの点灯

LEDを点灯させるには点灯したいLEDが接続されている行をロー(0)に、列をハイ(1)にします。たとえば、左上のLEDを点灯する場合は列方向ではbit7をハイ(1)、bit6〜0をロー(0)にします。また、行方向ではbit8をロー(0)、bit9〜15をハイ(1)にします。

出力するデータは次の値になります。

  • bit 7〜0 = 1000 0000 = $80
  • bit 15〜8 = 1111 1110 = $FE

bit15〜8の値を得るために点灯する行番号と$FFとの排他的論理和でも得られます。

OUT8L $80
OUT8H $01 XOR $FF

LEDを左から右、右から左へ点灯する

5行目のLEDの点灯を左から右へ、右から左へ移動するプログラムを示します。

LEDの点灯を左から右へ移動するには左端を点灯するデータ$80を1ビットずつ右へシフトしながら出力します。
逆方向は右端を点灯するデータ$01を1ビットずつ左へシフトして出力します。
LEDを点灯する行は5ビット目をローにした値は、1110 1111=EFをbit8〜15に出力します。

REM 左端を点灯するデータ
D=$80
REM 上から5行目だけを点灯する
OUT8H $10 XOR $FF
FOR I=1 TO 8
  OUT8L D
  D=D>>1
  DELAYMS 200
NEXT

REM 右端を点灯するデータ
D=$01
FOR I=1 TO 8
  OUT8L D
  D=D<<1
  DELAYMS 200
NEXT

ASCIIテーブルの文字を表示する

入門MachiKaniaの43ページのタイマ割り込みを利用したコードを利用して8x8 LEDにASCII文字を順に表示するコードは次のとおりです。

ASCIIコードからシステムフォントのデータをタイマ割り込みルーチンで順に取り出してLEDへ出力しています。タイマ割り込みルーチンは1ミリ秒ごとに実行されるので繰り返しLEDに文字のデータを出力し続けることでLEDに文字が表示され続けることになります。

ASC8x8.BAS
SETIMER 1000
INTERRUPT TIMER,ISRTMR
B=0

REM ASCII文字を順に取得
FOR I=$21 TO $7E
  A=SYSTEM(103)+I*8
  DELAYMS 500
NEXT

DO:IDLE:LOOP

END

REM タイマ割り込みルーチン:文字データを取得し、LEDへ出力
LABEL ISRTMR
  OUT8L 0
  OUT8H (1<<B) XOR $FF
  OUT8L PEEK(A+B)
  B=(B+1) AND 7
RETURN

IMG_2551.jpeg

さいごに

赤色ドットマトリクスLED 8x8ドットとRaspberry Pi Picoの接続と転送するデータとの関係がうまく整理できず、なかなか正しい表示ができなかったが何とか整理できて正しく表示できるようになりました。
文字をスクロールして表示する方法を考えたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?