フォト
無料ブログはココログ

MyList

« 勉強会 | トップページ | レバレッジ時間術 »

2015年11月 4日 (水)

IchigoJam(8) <8x8LED>

IchigoJamだけでダイナミック表示ができたので8x8マトリクスLEDを点けてみた。

Ichigo8x8led

 IchigoJamの出力ポートはOUT1~OUT11の11本しかないので、OUT1~OUT8をマトリクスLEDのR1~R8に接続して、カラム側は74HC138(3-8Decoder)を使ってOUT9~OUT11でC1~C8をドライブする。R1~R8は0Ωに(直結)した。LEDが点灯する数によって明るさが違う。

 C1~C7を駆動する74HC138の出力は負論理なので、例えば入力が"101"ならば出力Y4に"L"が出力される。したがってR1~R7は正論理で駆動すればよい。

 例えば、2列目に「○●○●●○●○」(C1→C8、○ON、●OFF)のパターンを表示する場合、OUT #2A5 とする。

 とりあえずテストプログラムを書いてみた。4つのパターンで点灯する。

  1. 順に点灯
  2. 渦巻き
  3. ランダム
  4. 反射
1 '8x8LED TEST
10 GOSUB 1000
20 GOSUB 100: GOSUB 200: GOSUB 300: GOSUB 400
30 FOR Z=0 TO 4
40  R=RND(4): R=(R+1)*100: GOSUB R
50 NEXT
90 END

100 'ALL LED ZigZag
100 FOR Y=0 TO 7
110  IF Y%2=0 T=0: E=7: S=1 ELSE T=7: E=0: S=-1
120  FOR X=T TO E STEP S
130   GOSUB 900
140  NEXT
150 NEXT
160 RETURN

200 'Spilal
200 X=0:
210 FOR A=0 TO 3: B=7-A
220  FOR Y=A TO B: GOSUB 900: NEXT
230  FOR X=X+1 TO B : GOSUB 900: NEXT
240  FOR Y=Y-1 TO A STEP -1: GOSUB 900: NEXT
250  IF A<3 FOR X=X-1 TO A+1 STEP -1: GOSUB 900: NEXT
260 NEXT 
270 RETURN

300 'Random
300 FOR P=0 TO 63
310  R=RND(63): Y=R/8: X=R%8: GOSUB 900
320 NEXT
330 RETURN

400 'Reflect
400 A=1: B=2: X=3: Y=4
410 FOR P=0 TO 63
420  GOSUB 900
430  X=X+A: Y=Y+B
440  IF X<0 X=0: A=RND(2): A=A+1: GOTO 460
450  IF 7<X X=7: A=-A
460  IF Y<0 Y=0: B=RND(2): B=B+1: GOTO 480
470  IF 7<Y Y=7: B=-B
480 NEXT
490 RETURN

900 'LED(X,Y) ON
900 OUT (X<<8)|(1<<Y): WAIT 5: RETURN

1000 'Initialize
1000 FOR I=8 TO 11: OUT I,0: NEXT
1100 RETURN
LIST

 

Ichigo8x8ledtest

↑リンク先に Ichigo8x8LEDtest.avi (999.2K)

↑はLEDの同時点灯数1個だから簡単だ。結構簡単にできたので 気をよくして、パターンを表示させてみた。

1 '8x8LED display
2 'NOV. 2015/ Yoshi
10 GOSUB 1000: GOSUB 1200

100 'Main loop
100 I=I+1: J=(I&7): D=(I&T)>>5: OUT (J<<8)|[D+J]: IF I&#1FF=0 GOSUB 500
110 GOTO 100

500 'button
500 IF BTN()=0 B=0: RETURN
510 'ELSE
510  P=P+1: IF P=2 P=0
520  IF P=0 T=#3E0: GOTO 540
530  IF P=1 T=#700: GOTO 540
540  IF B=0 B=1: BEEP: ELSE END
550 RETURN

1000 'Initialize
1000 CLV: VIDEO 0
1010 V=60: N=V: P=1: S=0: T=#700
1020 OUT 8,0: OUT 9,0: OUT 10,0: OUT 11,0
1030 CLT
1100 RETURN

1200 'Bit pattern
1200 LET [0],#00,#03,#0F,#1C,#F8,#F0,#0C,#03
1210 LET [8],#00,#3C,#7E,#FF,#81,#C3,#7E,#3C
1220 LET [16],#00,#46,#8F,#9F,#B9,#F9,#F1,#62
1230 LET [24],#00,#FF,#FF,#FF,#18,#18,#FF,#FF
1240 LET [32],#00,#00,#81,#FF,#FF,#FF,#81,#00
1250 LET [40],#00,#88,#58,#7C,#3F,#7C,#58,#88
1300 RETURN
LIST

1200行から1250行までが表示パターン。

例えば、1200行は、配列[0]~[7]に"Y"のパターンを格納している。

[0][1][2][3][4][5][6][7]
・ ○ ○ ・ ・ ・ ・ ○ 01h
・ ○ ○ ・ ・ ・ ・ ○ 02h
・ ・ ○ ○ ・ ・ ○ ・ 04h
・ ・ ○ ○ ○ ・ ○ ・ 08h
・ ・ ・ ○ ○ ○ ・ ・ 10h
・ ・ ・ ・ ○ ○ ・ ・ 20h
・ ・ ・ ・ ○ ○ ・ ・ 30h
・ ・ ・ ・ ○ ○ ・ ・ 40h
00 03 0F 1C F8 F0 0C 03

のように格納してある。

 メインループ(100行110行)を、どれだけ速く書くかでチラつきかたが変わってくる。(もう少し速くなるかも) 効果があるのは行数を減らすことだった。

Ichigo8x8leddisp

↑リンク先に Ichigo8x8LEDdisp.avi (900.5K)

 さすがにチラつくなあ。ビデオではわからないけどLEDの点灯数で明るさが違うのが、はっきり分かる。

メインループを早くするアイディア

  • 74HC138(3-8Decoder)でなく74HC4017(JohnsonCounter)を使う
  • 配列アクセスをPOKEに変える

くらいかなあ。

 タイマー割り込みが欲しい。


 


最近の投稿】【最近のCPUボード】【最近のIchigoJam】【2017の投稿】【2016の投稿】【2015の投稿

« 勉強会 | トップページ | レバレッジ時間術 »

CPUボード」カテゴリの記事

IchigoJam」カテゴリの記事

プログラミング」カテゴリの記事

コメント

通りすがりの物です。
8x8のLEDマトリックスの動作面白いと思いました。
ドライブ方法はよく使われるダイナミック点灯方式だと思いますが、LED1個1個しか点灯させないのであれば、74138と74238を1個ずつ使えばI/Oポートが空くと思います。

プログラムがめんどくさくなりますが、縦横全て1LEDのみの点灯で1表示64回点灯させれば、文字なんかも表示できるのではないでしょうか??
そうすれば、明るさが均一になるかと・・・・

744017をお考えのようですが、Up/DownカウンターIC・UpカウンターICは如何でしょうか??
すぐに型番が出てこないのが、申し訳ないのですけど・・・
人それぞれ好みがありますから、お節介は程々にしておきます。

最後に、私もichigojamには興味があり(特にBasicだから)、2キット購入したのですが、色々あってまだ組み立てていません。
今後のプログラミングの参考にさせて頂きます。 m(_ _)m

 

通りすがりさんはじめまして。

74138と74238を使うと6bitで表示できるのですが、1画面分を64回のOUT命令で表示すると、1画面分の表示に時間がかかりすぎて8x8のイメージとして見えないのではないかと思います。

明るさを均一にするには抵抗を入れると良いのですが横着をしています。
点灯するLEDの数に応じて点灯時間を変えると明るさが均一になるのですがBASICではチラつきが増えそうです。

お返事有難う御座います。 

またお節介ですが・・・
R1~R8(0Ω)をCRD(5~15mA)にしても、明るさは均一にならないでしょうか??
LEDの点灯数にあわせて点灯時間を調整するのは、プログラムが複雑になると思いますから、ハードで解決する方が楽だとは思うのです。

訂正:
マトリックスLEDの点灯方式は、7セグLEDダイナミック表示(点灯)方式と同じと思いますので、7セグのコモンの方には0Ωで、非コモンの方にCRDを入れれば、明るさが一定する気がします。

あと気になったのが、R1~R8(0Ω)と回路図はなっていますが、一般的な赤色LEDはVfは2.5vなので15mA:56Ω/10mA:82Ω/5mA:160Ωにした方が、マトリックスLEDをいためないと思います。せめて75Ωくらいを入れた方が・・・

-------

現在、正月に子供用玩具のプレゼントとして、IchigoJamを勉強中です。
改めて、プログラミングの参考にさせて頂きます。

私は、PICしか使っていなくて、ほとんどPIC Basicでのプログラミング経験しかありません。
なので、IchigoJam Basicにスゴく興味を持ちました。
あと最近、PICAXEもBasicなので今まで使っていたPIC Basicより使いやすい事を願って、デモボードを自作する予定です。

8/14/20&18&28/40ピン用の3種類を作成予定です。 40ピンは秋月電子さんではまだ取り扱っていないので、当分は8~28ピンで勉強ですね!!

最後まで読んで頂きまして有難う御座いました。

pc_net_spさん

CRDを使うと明るさは均一になると思います。ハードで実現するかソフトで実現するか考えるのは楽しいですね。BASICだと処理が間に合わなくなるのでハードで実現するしかないことが多いです。

R1~R8はLPC1114の出力抵抗(≒100Ω)と74HC139の出力抵抗(≒33Ω)をあてにしています。
https://yoshi-s.cocolog-nifty.com/cpu/2015/10/ichigojam7-9771.html
に書いています。よろしければご覧ください。

PIC AEXのマニュアルをざっと見たのですがIchigoJamよりずいぶん高機能ですね。
IchigoJamはビデオ出力も1chipで済ませてるのでキーボードとテレビを繋ぐとすぐ使えますが、PIC AEXはパソコンが必要なんですね。このあたりは、目的次第ということでしょうか。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: IchigoJam(8) <8x8LED>:

« 勉強会 | トップページ | レバレッジ時間術 »