以前にIchigoJam用の時計シールド(拡張基板)を作ったのですが、
www.ichigojaman.jp
カウンタIC・4026内蔵の7セグメントLEDが入手できなくなってしまったので、シフトレジスタ内蔵の7セグメントLEDを使ったシールドを新たに作りました。
7セグメントLED×4桁で、時:分を表示できます。
RTCモジュールを載せているので、IchigoJamの電源を切っても正確な時間を保持します。
また、ジョイスティックやボタンも載せているので、それらで設定するアラーム機能なども搭載できます。
回路図
シフトレジスタ・74595を内蔵した7セグメントLEDモジュール×4桁を、IchigoJamのポートにつないでいます。
つなぎ方は以下のとおりです。
OUT1 | 分データ |
---|---|
OUT2 | 分クロック |
OUT3 | 時データ |
OUT4 | 時クロック |
OUT5 | 分~OE(0=表示、1=消灯) |
OUT6 | 時~OE(0=表示、1=消灯) |
OUT8(IN1) | ラッチクロック |
BTN | ボタン(タクトスイッチ) |
LED | LED |
IN2(ANA2) | ジョイスティック垂直方向 |
基板データ
- Fusion PCB用ガーバーデータ(ZIP)(56×80mm)
*この基板データは、CC BYライセンスとします。どうぞご利用ください。
(C) 2025 Shiro Saito (https://www.ichigoaman.jp)
材料
だいたい以下の順番ではんだ付けすると作りやすいです。
最後にRTCモジュールをソケットに差します。時刻バックアップ用にCR2032電池が必要です。プログラム
時刻設定プログラム
以前に福野さんが公開した、RTCモジュールへ時刻を設定するプログラムです。
最初にこのプログラムを使って、RTCモジュールに正確な日時をセットします。
1 'TIME SET 300 P=#707 310 INPUT"Y:20",X:GOSUB400 320 INPUT"M:",X:GOSUB400 330 INPUT"D:",X:GOSUB400 340 X=0:GOSUB400 350 INPUT"H:",X:GOSUB400 360 INPUT"M:",X:GOSUB400 370 INPUT"S:",X:GOSUB400 375 POKE #700,0 380 IF I2CW(#68,#700,1,#701,7) ERR 390 END 400 X=X/10*16+X%10:POKE P,X:P=P-1:RETURN
時計プログラム
基本的な時計プログラムです。7セグメントLEDで時:分を表示します。
モニタでは時:分:秒を表示します。
10 @ARUN:'*CLOCK 20 CLV:VIDEO 3:CLS:CLO 30 [0]=`11111100 40 [1]=`01100000 50 [2]=`11011010 60 [3]=`11110010 70 [4]=`01100110 80 [5]=`10110110 90 [6]=`10111110 100 [7]=`11100100 110 [8]=`11111110 120 [9]=`11110110 130 @LOOP 140 GSB @TREAD 150 GSB @PRTIME 160 WAIT 6 170 GOTO @LOOP 180 @PRTIME 190 D=1:C=2:E=M 200 GSB @PRDIGIT 210 D=3:C=4:E=H 220 GSB @PRDIGIT 230 LC 0:?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2) 240 RTN 250 @PRDIGIT 260 F=[E/10]:GSB @PRSEG 270 F=[E%10]:GSB @PRSEG 280 OUT 8,1:OUT 8,0 290 RTN 300 @PRSEG 310 B=1:FOR I=1 TO 8 320 OUT D,(F&B)>0 330 OUT C,1:OUT C,0 340 B=B<<1 350 NEXT 360 RTN 370 @TREAD 380 POKE#700,0 390 I=I2CR(#68,#700,1,#701,7) 400 H=PEEK(#703):H=H>>4*10+H&15 410 M=PEEK(#702):M=M>>4*10+M&15 420 S=PEEK(#701):S=S>>4*10+S&15 430 RTN
300~360行が7セグメントモジュールで数字を表示する部分です。シフトレジスタ制御なので、データポートに0(消灯)/1(点灯)をセットして、クロックポートにクロックパルスを送って1ビット送信します。それを8回繰り返して、8ビット=数字1桁分のデータをバケツリレー式に送ります。2桁の数字表示データを送ったら、最後にOUT8へラッチクロックを送って(280行)点灯させます。
アラームクロック
基本的な時計プログラムに、アラーム機能を追加しました。
プログラム容量がギリギリなので、かなり圧縮したプログラムになっています。
アラーム設定方法
- 時計表示中にボタンを押すと、アラームセットモードになります。
- 最初に時設定になるので、ジョイスティック上下で数字を設定して、ボタンを押します。
- 次に分設定になるので、ジョイスティック上下で数字を設定して、ボタンを押します。
- アラームを設定すると、モニタ画面に設定したアラーム時:分が表示されます。
- 設定した時刻になるとアラームが鳴ります。ボタンを押すと止まります。
※電源を切るとアラーム設定時刻は消えてしまいます。
※アラームを一度止めると、翌日の同じ時刻には鳴りません。
10 @ARUN:'*ALARM CLOCK 20 CLV:VIDEO3:CLS:CLO 30 [0]=`11111100 40 [1]=`01100000 50 [2]=`11011010 60 [3]=`11110010 70 [4]=`01100110 80 [5]=`10110110 90 [6]=`10111110 100 [7]=`11100100 110 [8]=`11111110 120 [9]=`11110110 130 GSB310:GSB170 140 IFBTN()GSB370 150 IFH=X&&M=Y&&AGSB480 160 WAIT6:GOTO130 170 D=1:C=2:E=M:GSB210 180 D=3:C=4:E=H:GSB210 190 LC 0:?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2) 200 RTN 210 F=[E/10]:GSB250 220 F=[E%10]:GSB250 230 OUT8,1:OUT8,0 240 RTN 250 B=1:FORI=1TO8 260 OUTD,(F&B)>0 270 OUTC,1:OUTC,0 280 B=B<<1 290 NEXT 300 RTN 310 POKE#700,0 320 I=I2CR(#68,#700,1,#701,7) 330 H=PEEK(#703):H=H>>4*10+H&15 340 M=PEEK(#702):M=M>>4*10+M&15 350 S=PEEK(#701):S=S>>4*10+S&15 360 RTN 370 OUT5,1:WAIT30 380 D=3:C=4:E=X:GSB210 390 J=ANA(2):X=X-(J>768)*(X>0)+(J<256)*(X<23) 400 WAIT10:IF!BTN()GOTO380 410 OUT5,0:OUT6,1:WAIT30 420 D=1:C=2:E=Y:GSB210 430 J=ANA(2):Y=Y-(J>768)*(Y>0)+(J<256)*(Y<59) 440 WAIT10:IF!BTN()GOTO420 450 OUT6,0 460 LC0,2:?X;":";Y:A=1 470 RTN 480 A=0:BEEP10,30:WAIT40:IF!BTN()CONT 490 RTN