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

MyList

« 愚痴を吐く人に、如何に処するか | トップページ | 小さい時から考えてきたこと »

2015年10月19日 (月)

IchigoJam(7) <OUT8~OUT11使用 4桁時計ダイナミック表示>

IchigoJam Ver1.1 beta6 で IN1~IN4をOUT8~OUT11で使えるようになったらしい。

IchigoJam(6) <4桁ダイナミック表示>(2015/10/13) で作った4桁LED時計はVer1.1 beta5で作った。出力ポートがOUT1~OUT7の7本しかなかったので、桁ドライブ用に74HC4017を使った。
 OUT8~OUT11が使えるなら、新たに使えるようななった出力ポートを桁ドライブ用に使用するとちょうどよい。

Ichigojamclockd8

シンプルになった。

 プログラムの変更が少なくなるように、OUT8~OUT11を桁ドライブに使用すると3桁目(OUT10)が点灯しない。?_?)  出力電圧を測ってみると1.7vしか出ていない。配線を間違えたかと確認したが、間違えていない。

 IchigoJamの回路図を眺めたら気がついた。OUT10(IN3)はI2CのSDAだ。I2CバスはOpenDrainでドライブするので、IN3をOUT10で使った場合は当然OD出力となる。(データシートにも書いてある)

 ODは"L"を出力(電流吸込み)できるが、"H"は出力(電流吐出し)できないないので、プルアップ抵抗で"H"にする。
ところが、桁ドライブは電流を吐出さなければならないので、LEDを点灯させることができない。

 カソードコモンの7SegLEDを使おうかとも考えたが、安易に、OUT1~OUT4を桁ドライブに使用して、OUT5~OUT11をセグメントドライブに使用するように変えた。(赤色が変更した行)

1 'IchigoClock / dynamic lighting use OUT8-11
2 'Oct. 2015 / Yoshi
3 GOSUB 700

100 'Main loop
100 T=TICK(): IF BTN()=1 GOSUB 600 ELSE B=0
110  IF R=1 AND V<T GOTO 180
120  IF T<N GOTO 180
130   N=(N+D)&#7FFF: IF N<T THEN R=1 ELSE R=0
140   M=M+1: IF M<60 GOTO 160
150    M=0: H=H+1: IF 24<=H THEN H=0
160   [0]=[10+H/10]|8: [1]=[10+H%10]|4:
165   [2]=[10+M/10]|2: [3]=[10+M%10]|1

170   IF X=1 GOSUB 1000
180  I=I+1: OUT [I&3]
200 GOTO 100

600 'Button push
600 IF B=0 THEN B=T
610 IF E+B<T THEN END
620 IF B+K<T THEN D=J: N=TICK(): GOTO 650
630 IF D=J THEN D=V: N=TICK()+D: GOTO 650
640 IF T=B+J THEN D=V: N=TICK()
650 RETURN

700 'Initialize
700 [10]=#400: [11]=#790: [12]=#240: [13]=#300: [14]=#190
710 [15]=#120: [16]=#020: [17]=#780: [18]=#000: [19]=#100

730 V=3610: X=0
740 J=40: K=J*5: E=J*25
750 Z=0: F=#FF: R=0: D=V: N=D
760 OUT 8,0: OUT 9,0: OUT 10,0 OUT 11,0
770 H=23: M=50: [0]=[12]|8: [1]=[13]|4: [2]=[15]|2: [3]=[10]|1

780 VIDEO 0: CLT
880 RETURN

1000 'Send serial
1000 ? CHR$(13); H/10; H%10; ":"; M/10; M%10;
1010 RETURN
list

 

↓こんな感じ
 IchigoJam(6) <4桁ダイナミック表示>(2015/10/13)にあった74HC4017が無い。
Ichigoclockdynamic2
↑リンク先にAVI(IchigoClockDynamic2.avi (1020.9K))

 動画は明るく見えるけど、蛍光灯の真下では見えないくらい暗い。

 R1~R8を0Ωにする(IchigoDotのように直結する)、つまりLPC1114のOUT5~OUT11を直接LEDに繋ぐと蛍光灯の下でも見えるくらい明るくなる。

 教科書にはLEDは必ず電流制限用の抵抗が必要と書いてあるが、マイコンのI/OでLEDを駆動する場合には直結することも可能だ。

 電流制限用の抵抗を省略しているわけではなく、I/Oポートには内部抵抗があるので電流が制限される。データーシートで出力電流と出力電圧の特性を確認すると、

Voliol Vohioh

 Fig38はI/Oピンに"L"を出力(OUT4,0 etc.)したときの電圧と電流の関係だ。I/Oピンに電流を吸い込むとI/Oピンの電圧が上がる。つまり内部に抵抗がある。

 一方Fig39はI/Oピンに"H"を出力(OUT1,1)したときの電圧と電流の関係だ。I/Oポートから出力する電流が増えると、出力電圧が下がる。つまり内部に抵抗がある。

 そして、LEDに流す電流とLEDの電圧降下の特性もデータシートで確認すると
Ifvf

 LEDは流れる電流で順方向の降下電圧が異なる。教科書で見かけるLEDの順方向降下電圧2.0vは20mA流したときの値だ。

 マイコンのI/Oポート直結でLEDを点灯するときは↓のような回路になっている。

Leddrive1

つまり、VoH=VoL+Vfになるように電流が流れる。

 "8"を表示(LEDが7個点灯)したときは、LEDに2.5mAくらい電流が流れる。また、"1"を表示(LEDが2個点灯)したときは、LEDに3mAくらい電流が流れる。

 OUT1は点灯しているLEDの電流を全て吐き出しているので、点灯しているLEDの個数で降下する電圧が異なり、点灯しているLEDを流れる電流が変わる。2.5mAと3mAの変化は見た目にはわからない。

 "H"を出力したときの内部抵抗 Rohより、"L"を出力したときの内部抵抗 Rolのほうが値が小さいので、カソードコモンの7セグLEDを使うとより電流が流せることになる。

 カソードコモンの7セグLEDを使うと5mAくらい流せるので明るくなる。



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

« 愚痴を吐く人に、如何に処するか | トップページ | 小さい時から考えてきたこと »

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

IchigoJam」カテゴリの記事

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

コメント

コメントを書く

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

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

トラックバック


この記事へのトラックバック一覧です: IchigoJam(7) <OUT8~OUT11使用 4桁時計ダイナミック表示>:

« 愚痴を吐く人に、如何に処するか | トップページ | 小さい時から考えてきたこと »