SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

時計シールド

IchigoJam/IchigoDakeに差して時計を表示する拡張基板です。
上田のクラブで「時計を作りたい」という子が何人かいたので、簡単にはんだ付けして作れる基板を目指して開発しました。
紹介動画はこちら。

www.youtube.com


7セグメントLED×6個で、時:分:秒を表示します。

回路図


10進カウンタIC・4026を内蔵した7セグメントLEDを使って、簡単な回路にしています。
時、分、秒それぞれ2個1組の7セグメントLEDへ、クロックパルスを送ると+1ずつカウントアップします。リセットパルスを送ると「00」にリセットされます。

クロックパルス リセットパルス
OUT1 OUT2
OUT3 OUT4
OUT5 OUT6

例えば秒表示は、

OUT 1,1:OUT 1,0

で、+1カウントアップします。

OUT 2,1:OUT 2,0

で、リセットされて「00」表示になります。
カウンタICが値を保持して数字を表示するので、プログラム側で面倒なダイナミック表示などをしなくて済みます。

基板データ

*同じ基板を3枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2023 Shiro Saito (https://www.ichigoaman.jp)

時計プログラム

  • 実行すると、時・分を聞かれるので数字で入力します。
  • 画面と7セグメントLEDに時計が表示されます。
10 '*CLOCK SHIELD
20 CLV:VIDEO 3:CLS
30 OUT 2,1:OUT 2,0
40 OUT 4,1:OUT 4,0
50 OUT 6,1:OUT 6,0
60 INPUT "H=",H
70 INPUT "M=",M
80 CLS:CLT
90 @SETM
100 IF M=0 GOTO @SETH
110 FOR A=1 TO M
120 OUT 3,1:OUT 3,0
130 NEXT
140 @SETH
150 IF H=0 GOTO @LOOP
160 FOR A=1 TO H
170 OUT 5,1:OUT 5,0
180 NEXT
190 @LOOP
200 T=TICK()
210 IF T%60=0 GSB @CHGS
220 IF T%3600=0 GSB @CHGM
230 LC 0,0
240 ?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2)
250 WAIT 1
260 GOTO @LOOP
270 @CHGS
280 OUT 1,1:OUT 1,0
290 S=S+1
300 IF S<60 RTN
310 OUT 2,1:OUT 2,0
320 S=0
330 RTN
340 @CHGM
350 OUT 3,1:OUT 3,0
360 OUT 2,1:OUT 2,0
370 M=M+1:CLT
380 IF M<60 RTN
390 OUT 4,1:OUT 4,0
400 M=0:H=H+1
410 OUT 5,1:OUT 5,0
420 IF H>23 H=0:OUT 6,1:OUT 6,0
430 RTN

IchigoJam内部のタイマーで時計を動かしているので、あまり精確ではありません。
RTC(時計モジュール)を付けて時刻を読み取るようにすると、もっと精確な時計になるでしょう。
RTCモジュールについて詳しくはこちら。

最後に

今回の基板は、要は「2個×3組の7セグメントLEDで数字を表示する基板」です。
プログラム次第で、時計以外にもいろいろな用途に使えます。

両用LEDマトリックス基板+ベース基板

8×8のLEDマトリックスを光らせる基板です。
IchigoJam/IchigoDakeに差してプログラムで光らせることもできますし、ベース基板に差してマイコン無しで光らせることもできます。
紹介動画はこちら。

www.youtube.com

LEDマトリックス基板


IchigoJam/IchigoDakeに差して、プログラムで光らせることができます。

回路図


IchigoJam/IchigoDakeのOUT1~8で横8列のデータ出力、OUT9~11で3to8デコーダーIC・74138を制御して行方向のスキャンをしています。
この基板は以前作った「LEDマトリックススキャン」とほぼ同じです。

基板データ

*同じ基板を2枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2023 Shiro Saito (https://www.ichigoaman.jp)

材料

だいたい以下の順番ではんだ付けすると作りやすいです。

プログラム1:1文字表示

40行で指定した1文字を、LEDマトリックスに表示します。
※120行のコメント「'」を外すと表示にWAITが入るので、スキャンして表示している様子がよくわかります。

10 '*Matrix Chr
20 CLV:VIDEO 0
30 FOR P=1 TO 11:OUT P,0:NEXT
40 C=ASC("A")
50 A=C*8
60 FOR B=0 TO 7
70 [B]=PEEK(A+B)
80 NEXT
90 @LOOP
100 FOR Z=0 TO 7
110 OUT [Z]+Z<<8
120 'WAIT 10
130 NEXT
140 GOTO @LOOP

プログラム2:文字列表示

40行で指定した文字列を、1文字ずつ表示します。

10 '*Matrix String
20 CLV:VIDEO 0
30 FOR P=1 TO 11:OUT P,0:NEXT
40 S="IchigoJam "
50 @LOOP
60 FOR X=0 TO LEN(S)-1
70 A=PEEK(S+X)*8
80 FOR B=0 TO 7
90 [B]=PEEK(A+B)
100 NEXT
110 CLT
120 @CHR
130 FOR Z=0 TO 7
140 OUT [Z]+Z<<8
150 NEXT
160 IF TICK()<30 GOTO @CHR
170 OUT 0
180 NEXT
190 GOTO @LOOP

プログラム3:文字列フロー表示

40行で指定した文字列を、横に流して表示します。

10 @ARUN:'*Matrix String Flow
20 CLV:VIDEO 0
30 FOR P=1 TO 11:OUT P,0:NEXT
40 S="IchigoJam "
50 @LOOP
60 FOR X=0 TO LEN(S)-1
70 A=PEEK(S+X)*8
80 FOR F=0 TO 7
90 M=128>>F
100 FOR B=0 TO 7
110 D=PEEK(A+B)
120 [B]=([B]<<1)+((D&M)>0)
130 [B]=[B]&255
140 NEXT
150 FOR T=1 TO 10
160 FOR Z=0 TO 7
170 OUT [Z]+Z<<8
180 NEXT
190 NEXT
200 NEXT
210 NEXT
220 GOTO @LOOP

プログラム4:連打ゲーム

実行すると、LEDマトリックスの右上のLEDが光ります。
スペースキーを押すと左へ1個ずつ・縦へ1行ずつ進んでいくので、最後まで64回スペースキーを連打してください。
連打し終わると、画面にタイムが表示されます。

10 '*RENDA64
20 FOR P=1 TO 11
30 OUT P,0
40 NEXT
50 CLT
60 FOR Y=0 TO 7
70 FOR X=0 TO 7
80 OUT Y<<8+1<<X
90 IF !BTN(32) CONT
100 IF BTN(32) CONT
110 NEXT
120 NEXT
130 T=TICK()
140 BEEP 10,30
150 ?T/60;".";T%60/6:CLK

プログラム5:イチリス64

いわゆる落ち物パズルゲームです。表示がちらついてちょっと見づらいですが…

  • 上から落ちてくるブロックを、隙間ができないように積んでいってください。スペースキーを押すと、ブロックが上下反転します。
  • 横1行がそろうと、その行は消えて点数になります。
  • 上までブロックが積み上がるとゲームオーバーです。点数(消せた行数)がドットで表示されます。
1 '*ICHIRIS64
2 CLV:VIDEO0:W=15
3 FORP=1TO11:OUTP,0:NEXT
4 M=RND(4):N=RND(3)+1:IF!(M%2+N%2)M=M/2:N=N/2
5 X=3:Y=9:M=M<<X:N=N<<X:GSB24:IFRGOTO14
6 O=0:K=BTN(28)-BTN(29):IFKGSB19:O=1
7 IFBTN(32)&&MGSB22:O=1
8 GSB30
9 IFOGOTO6
10 G=G+1:IFG<WGOTO6
11 G=0:GSB24:IF!RY=Y-1:GOTO6
12 BEEP40,5:GSB33:FORZ=Y-1TOY:IF[Z]=#FFGSB27:Z=Z-1
13 NEXT:GOTO4
14 BEEP30,30:GSB33:WAIT99:IFS>64S=64
15 FORY=0TO7:[Y]=0:NEXT:IF!SGOTO17
16 FORB=0TOS-1:Y=B/8:[Y]=[Y]+(1<<(B%8)):NEXT
17 GSB30
18 IFBTN(32)RUNELSECONT
19 C=24<<(K*4):IF(M|N)&CRTN
20 D=M<<K:E=N<<K:V=Y:GSB25:IFRRTN
21 X=X+K:M=D:N=E:GSB30:RTN
22 D=N:E=M:V=Y:GSB25:IFRRTN
23 M=D:N=E:GSB30:RTN
24 V=Y-1:D=M:E=N:IFY<2R=1:RTN
25 R=0:IF[V]&D||[V-1]&ER=1
26 RTN
27 [Z]=0:GSB30:S=S+1:BEEP9,9:WAIT30:W=W-(W>1)
28 FORV=ZTO7:[V]=[V+1]:NEXT:[7]=0
29 GSB30:RTN
30 FORB=7TO0STEP-1:C=[B]:IFB=YC=C|M
31 IFB=Y-1C=C|N
32 OUTC+(7-B)<<8:NEXT:RTN
33 [Y-1]=[Y-1]|N:[Y]=[Y]|M:N=0:M=0:RTN

連打ベース基板


LEDマトリックス基板を差すと、連打ゲームが遊べるベース基板です。

回路図

  • ACTIONボタンを押すと、10進カウンタIC・4017のCLOCK端子にH信号が入力され、出力Q0→Q1→Q2→…が順にHになります。Q8がHになると、そのままRESET端子につながっているため、ICがリセットされてカウントがQ0に戻ります。つまりQ0~Q7の8進カウンタとして動いて、それによりLEDマトリックスの横方向に1個ずつLEDが進みます。
  • 4017のQ8出力は、バイナリカウンタIC・4520のCLKA端子にもつながっているので、4520のカウントが1つ進み、LEDマトリックスの行方向に1行LEDが進みます。
  • 4520の行カウントが「0」→「1」→「2」→…と進んで「8」になると、Q3AがHになります。そのH信号が4017のCLK_I端子へ行くため、ACTIONボタンを押しても4017のカウントが進まなくなります。同時にデジタルトランジスタDTC143ELのベース入力もHになるのでトランジスタがONになり、ブザーが鳴りっぱなしになります。
  • RESETボタンを押すと、4017と4520のRESET端子がHになるので、ICにリセットがかかり、最初の状態に戻ります。

基板データ

*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2023 Shiro Saito (https://www.ichigoaman.jp)

遊び方

  • ベース基板のピンソケットに、LEDマトリックス基板のピンヘッダを差します。
  • 電源スイッチをONにします。LEDマトリックスのどれか1個が点灯します。
  • RESETボタンを押すと、右上のLEDが点灯します。
  • 何かしらの合図でスタートして、ACTIONボタンを連打します。(2人で「ヨーイドン!」で始めるといいでしょう)
  • 64回連打するとゴールになり、ブザーがなってカウントが止まります。
  • RESETボタンを押すと元に戻ります。

文字ベース基板


DIPスイッチでLEDを点灯させて、文字やパターンを表示させるベース基板です。

回路図

  • バイナリカウンタIC・4520で行方向をスキャンするのは連打ベース基板と同じです。CLOCK信号はトランジスタ2個の弛張発振回路から入力していて、数10Hzの高速スキャンです。
  • 行方向のスキャン信号は、ピンソケットを介してLEDマトリックス基板へ送るのと同時に、マルチプレクサIC・4051へも送っています。4051の出力X0~X7のうち、指定したどれか1つの行の出力がHになります。
  • 指定した行の8個のDIPスイッチの内、ONになっている列だけが、トランジスタアレイを通してH出力になり、LEDを点灯させます。DIPスイッチの所にダイオードアレイが入っているのは、電流が他の行のDIPスイッチへ回り込んでしまうのを防ぐためです。

基板データ

*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2023 Shiro Saito (https://www.ichigoaman.jp)

材料

だいたい以下の順番ではんだ付けすると作りやすいです。

はんだ付けが終わったら、ICソケットにICをはめます。向きを間違えないようにしてください。

使い方

  • 電源スイッチをONにします。
  • DIPスイッチを操作して、LEDマトリックスを点灯させたい場所をONにしてください。

電子LEDリレー

ロジックIC回路で8個のLED点灯を横へリレーする基板を作ってみました。
紹介動画はこちら。

www.youtube.com


ボタンを押すと、LEDが光って左から右へリレーします。


横に連結すると、続けてリレーできます。

遊び方

  • 電源を入れると、8個のLEDが全部光って、その後消灯します。
  • ボタンを押すと、LEDが光って、左から右へリレーされます。
  • ボリュームを回すと、リレーのスピードが変わります。
  • オプションのピンソケット・ピンヘッダを付けると、横に連結して続けてリレーできます。

回路図


シフトレジスタIC・74HC595でデータをシフトして、LEDを光らせています。

  • トランジスタ2個の弛張発振回路で、シフトクロックを作っています。コンデンサC1への充電電流は可変抵抗器(VR)を通しているので、VRを回すとリレーの速度が変わります。
  • シフトレジスタのシリアル入力はR2でプルアップされているので通常はHで、シフトレジスタの出力もHになります。出力につないだLEDはシンク(吸い込み)回路になっているので、通常は光りません。
  • ボタンが押されるとシリアル入力がLに落ちるので、シフトレジスタの出力がLになってLEDが点灯し、QA→QHへリレーされます。
  • オプションですが、シリアル入力に入力コネクタCN1、QH'出力に出力コネクタCN2を付けられます。複数の基板を横につなげて、基板間でLED点灯をリレーすることができます。

基板データ

*同じ基板を2枚割り付けています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2023 Shiro Saito (https://www.ichigojaman.jp)

材料

以下の順番ではんだ付けすると作りやすいです。

オプションでピンソケットとピンヘッダを付けると、複数の基板を横につないでリレーできます。

最後に

モノタロウのカタログで「LED順送りキット」を見て、「これくらいならカウンタICで簡単に作れるんじゃないか?」と思って作り始めました。
「シフトレジスタにして複数光らせてリレーできるようにしよう」「ボリュームを付けたらスピードを変えられるんじゃないか」などとあれこれ発想が膨らんで、結局何度も基板を作り直しました。

IchigoJamのプログラム


試しにIchigoJamで組んでみました。

  • スペースキーを押すと、LEDが点灯して左から右へリレーされます。
  • カーソルキーの↑と↓を押すと、WAITの数が変わってスピードが変わります。
10 '*LED RELAY
20 CLV:VIDEO 3:CLS
30 W=20
40 @LOOP
50 FOR L=7 TO 1 STEP -1
60 [L]=[L-1]
70 NEXT
80 [0]=BTN(32)
90 LC 0,0
100 FOR L=0 TO 7
110 ?CHR$(232+[L],0);
120 NEXT
130 W=W-BTN(30)+BTN(31)
140 LC 0,2
150 ?"WAIT=";W;" "
160 WAIT W
170 GOTO @LOOP

IchigoJam webではこちら。