円形の文字盤基板に、マイコン内蔵フルカラーLED(PL9823-F5)を60個並べて、時計を作ってみました。
動画はこちら。
【IchigoJam】Ichigo 60 Clock
文字盤は専用基板を作りました。
IchigoJamが1個ではLEDを34個までしか制御できないので、文字盤上にLPC1114を2個置いて、LEDを30個ずつ制御しています。
時刻制御は外付けの別のIchigoJamです。
時計モジュールから現在時刻を読み込んで、どのLEDを光らせるかのコマンドを文字盤のICへ送っています。
実は基板の回路がちょっと間違っていたので、修正した次バージョンの基板を発注しています。基板データの公開は後ほど。※Ver.2の基板データを下↓に公開しました。
将来4K版ファームウェア1.4が出れば、60個のLED全部を制御できそうなので、文字盤のLPC1114は要らなくなるかもしれません。
それよりも、60連のLEDを使った方が楽かな…?
www.switch-science.com
(9/27追記)Ver.2基板
改良したVer.2基板を作りました。回路修正と、基板の中心に穴を空けてCDケースに入るようにしました。さすがにフタは閉まりませんが…
さっちゃん、CDデビュー!(^_^)
基板データ
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
(C) 2019 Shiro Saito (https://www.ichigojaman.jp)
プログラム
外付け親機
どのLEDを光らせるかのコマンドは、文字コード1文字で送っています。
32(特殊コードからずらす)+色(赤=0、緑=1、青=2)×60+LED番号(0~59)
なお文字コード255を送ると、全LEDが消灯します。
10 @ARUN:'*Ichigo 60 Clock 20 CLV:UART 1:CLS 30 WAIT 60 40 ?CHR$(255):WAIT 6 50 GSB @TIMEREAD 60 GSB @HPN:GSB @MPN:GSB @SPN 70 I=H:N=M:T=S 80 @LOOP 90 GSB @TIMEREAD 100 IF T!=S GSB @SPR 110 IF N!=M GSB @MPR 120 IF I!=H GSB @HPR 130 I=H:N=M:T=S 140 GOTO @LOOP 150 @HPR 160 D=32+120+(I%12)*5:?CHR$(D):WAIT 6 170 @HPN 180 D=32+120+(H%12)*5:?CHR$(D):WAIT 6 190 RTN 200 @MPR 210 D=32+60+N:?CHR$(D):WAIT 6 220 @MPN 230 D=32+60+M:?CHR$(D):WAIT 6 240 RTN 250 @SPR 260 D=32+T:?CHR$(D):WAIT 6 270 @SPN 280 D=32+S:?CHR$(D):WAIT 6 290 RTN 300 @TIMEREAD 310 POKE #700,0 320 IF I2CR(#68,#700,1,#701,7) ERR 330 X=PEEK(#703) 340 H=X>>4*10+X&15 350 X=PEEK(#702) 360 M=X>>4*10+X&15 370 X=PEEK(#701) 380 S=X>>4*10+X&15 390 RTN
文字盤子機
受信した点灯/消灯コマンドはXOR処理をしていて、消灯しているLEDへコマンドが来たら点灯、点灯しているLEDへ来たら消灯します。
子機1:LED0~29
10 @ARUN:'*Ichigo 60 Clock-C00 20 CLV:UART 2,1:VIDEO 0:CLS 30 ?"*Ichigo 60 Clock-C00" 40 [99]=80:[100]=50:[101]=150 50 GSB @LEDCLR 60 WAIT 60 70 @LOOP 80 K=INKEY():IF !K CONT 90 ?"#";K 100 IF K=255 GSB @LEDCLR:GOTO @LOOP 110 K=K-32 120 IF K<0 GOTO @LOOP 130 C=K/60 140 L=K%60 150 ?"C=";C;" L=";L 160 IF L>29 GOTO @LOOP 170 GSB @LEDXOR 180 GOTO @LOOP 190 @LEDCLR 200 [0]=0:COPY #801,#800,179 210 WS.LED 30 220 RTN 230 @LEDXOR 240 M=C+L*3 250 D=[99+C] 260 [M]=[M]^D 270 WS.LED 30 280 RTN
子機2:LED30~59
10 @ARUN:'*Ichigo 60 Clock-C30 20 CLV:UART 2,1:VIDEO 0:CLS 30 ?"*Ichigo 60 Clock-C30" 40 [99]=80:[100]=50:[101]=150 50 GSB @LEDCLR 60 WAIT 60 70 @LOOP 80 K=INKEY():IF !K CONT 90 ?"#";K 100 IF K=255 GSB @LEDCLR:GOTO @LOOP 110 K=K-32 120 IF K<0 GOTO @LOOP 130 C=K/60 140 L=K%60 150 ?"C=";C;" L=";L 160 IF L<30 GOTO @LOOP 170 GSB @LEDXOR 180 GOTO @LOOP 190 @LEDCLR 200 [0]=0:COPY #801,#800,179 210 WS.LED 30 220 RTN 230 @LEDXOR 240 M=C+(L-30)*3 250 D=[99+C] 260 [M]=[M]^D 270 WS.LED 30 280 RTN
なお、基板上のLPC1114にUSBシリアルをつないでファーム書き換えやプログラム転送をする時は、もう片方のLPC1114のRESET端子をGNDへ落としてリセットしておいてください。そうしないと、1番のICへ書きこんでいるつもりが、実は2番のICの方だった…ということが起こります。基板上で電源やシリアル信号が両方のICへ並列につながっているので。