SSブログ
English Version

PIC24FJ64GAでGAME言語(その6) [PIC]

 Amazon でドットマトリックスLEDモジュールを安く(279円)売っていたので買ってみました ^^
 LED表示制御用ICである MAX7219 を使用したもので arduino であればスケッチを探してくれば制御できそうです。

 しかし、ここは PIC のブログなので PIC24FJ を使って動作確認してみました。
 MAX7219 のマニュアル(日本語版がありました^^)を見ながらお手軽な GAME言語 を使って動作確認しました。
 Tiny Basic interpreter である GAME言語 をPIC上で動作させているのでコンパイルや書込みの手間が要らず、このようにはじめて使うICの動作を確認する場合には大変便利です ^^
 MAX7219 が単機能であることもありますが、一晩で動作確認(ブレッドボード配線、制御信号波形確認、デモプログラム作成)ができました^^
 表示データの作成はエクセルで作成した升目にデザインし、目視しながらHEX化しました(自動変換しようかとも思いましたがマニュアル変換でも効率は殆ど変わらないのでw)

 動作確認時のデモ表示を YouTube にアップしましたのでご覧あれ


 https://youtu.be/7tnAIw-97nw


 ソースは次のとおりです。

 Dot Matrix LED test(GAME言語)
1' Dot Matrix Module MAX7219 test by skyriver 2015/11/07
10 P=& TA=$2C0 LA=$2C4
20 DO=1 CK=2 EN=4
30 LA:0)=0 TA:0)=$F8
40 #=10000
49' write to driver A<-address B<-data
50 Z=A*256+B
60 LA:0)=LA:0)&(~(EN|CK))
70 Y=0,15
80  ;=Z<0 LA:0)=LA:0)|DO
90  ;=Z>=0 LA:0)=LA:0)&~DO
100  LA:0)=LA:0)|CK Z=Z*2 LA:0)=LA:0)&~CK
110 @=Y+1
120 LA:0)=LA:0)|EN
130 ]
999' initialize MAX7219
1000' set no decode mode
1010 A=9 B=0 !=50
1020' set scan limit 0-7
1030 A=11 B=7 !=50
1040' set intencity
1050 A=10 B=4 !=50
1060' set normal operation
1070 A=12 B=1 !=50
1080 ]
1999' write array pattern
2000 A=1,8 B=P:A+Q-1) !=50 @=A+1 ]
2999' pattern data
3000' space,0
3010+ 00 00 00 00 00 00 00 00-00 7E C1 B1 8D 83 7E 00
3020' 1,2
3030+ 00 00 00 82 FF 80 00 00-00 86 C1 A1 91 89 86 00
3040' 3,4
3050+ 00 42 81 81 89 89 76 00-00 30 28 24 22 FF 20 00
3060' 5,6
3070+ 00 4F 89 89 89 89 71 00-00 7E 89 89 89 89 72 00
3080' 7,8
3090+ 00 01 01 C1 31 0D 03 00-00 76 89 89 89 89 76 00
3100' 9,@
3110+ 00 06 89 49 29 19 06 00-7C 82 65 95 F9 82 7C 00
3120' A,B
3130+ 00 FC 12 11 11 12 FC 00-00 FF 89 89 89 89 76 00
3140' C,D
3150+ 00 7E 81 81 81 81 42 00-00 FF 81 81 81 42 3C 00
3160' E,space
3170+ 00 FF 89 89 89 89 81 00-00 00 00 00 00 00 00 00
3180' O,WA
3190+ 00 60 92 7F 12 90 64 08-00 22 1A FF 0A 08 88 70
3200' ri,space
3210+ 00 00 1E 08 00 80 7E 00-00 00 00 00 00 00 00 00
3220' EOD mark
3230+ 5A 5A
6999' hex2bin transfer(nibble)
7000 O=O-"0" ;=O>9 O=O-"A"+"0"+10
7010 ]
7999' set display pattern
8000 R== Q=0
8010 @
8020  ;=R:3)<>"+" R=R+R:0) #=8090
8030  R=R+4
8040  @
8050   O=R:1) !=7000 P:Q)=O*16 O=R:2) !=7000 P:Q)=P:Q)+O
8060   R=R+3 Q=Q+1
8070  @=(R:0)=0)
8080  R=R+1
8090 @=(R:0)=0)
8100 ]
8999' return to first data
9000 Q=0
9010 ;=S=1 S=8 ]
9020 S=1
9030 ]
10000 !=1000 !=8000 F=P(Q/2-1)
10010 S=1 !=9000
10020 @
10030  ;=P(Q/2+4)=F !=9000
10040  ¥=5*S
10050  !=2000
10060  Q=Q+S
10070  @ "" @=(¥=0)
10080 @=(0)

★2015/11/07 追記
 プログラム変更(YouTubeはアップデートしていません)
  • 表示パターンを配列への代入からコメント行への埋め込み方式に変更
  • 表示するパターンを追加
  • スクロール無しとスクロール有りの2方式で交互に表示するようにした

★2015/11/14 追記
 波形も載せておきます(黄色:CLK、紫色:DIN)。
 インタープリタで出力しているので約0.5ms/bitのビットレートです。出力部分をアセンブラで作れば100倍程度にできると思います。
 LEDドライバを多段にカスケード接続する場合は出力部をアセンブラ化した方がよさそうです。
 また、MAX7219の電源電圧は規格にあわせて5Vにしています。

waveform(CLK and DIN)


★2019/03/23 追記
 この記事では7219への書込みをソフトウェアで実現していますが、クロック信号出力付のシリアル通信であるSPIのI/Fを使用して書込みもできるのでPIC内のSPIモジュール機能を使ってもっと簡単で高速に7219への書込みができます。

[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(0)  トラックバック(2) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 2