目次
前
次
LED表示器追加
走行中に、センサーから取得していた値を
3ステージほど表示した方が便利だと思い
はじめました。
3x3のマトリクスに、現在、ひとつ前、ふたつ前の値を
1行ごとに表示させることにします。
回路は単純で、以下。
現在、ひとつ前、ふたつ前の値を、赤、緑、橙で
色分けして、わかりやすくします。
3x3のマトリクスなので、ATmega328のポートCの6
ビットを利用すれば、点灯制御が可能。
ポートCと回路図中の入力の対応を考えておきます。
- PC5 - PL5
- PC4 - PL4
- PC3 - PL3
- PC2 - PL2
- PC1 - PL1
- PC0 - PL0
動作シーケンスを次のように設定。
- (PC2,PC1,PC0)に3ビットのパターンを出力
- PC3を1とし、PC4、PC5は0に
- (PC2,PC1,PC0)に3ビットのパターンを出力
- PC4を1とし、PC3、PC5は0に
- (PC2,PC1,PC0)に3ビットのパターンを出力
- PC5を1とし、PC3、PC4は0に
- 1にもどる
AmForthを利用して、動作を確認。
ポートCを出力に設定するので、初期は次のようにまとめます。
$00 PORTC c! $ff DDRC c!{enter}
センサー値を並べて、一度に出力できるように
ワードshow.sensorを定義。
: show.sensor
32 16 8
3 pick or PORTC c!
3 pick or PORTC c!
3 pick or PORTC c!
. . .
;
使い方は、以下。
4 5 6 show.sensor{enter}
上のパラメータ設定で、スタックの内容の変化を
トレースしてみます。
4 5 6 => (4 5 6 -- )
32 16 8 => (4 5 6 -- 4 5 6 32 16 8)
3 pick => (4 5 6 32 16 8 -- 4 5 6 32 16 8 6)
or => (4 5 6 32 16 8 6 -- 4 5 6 32 16 14)
PORTC c! => (4 5 6 32 16 14 -- 4 5 6 32 16)
3 pick => (4 5 6 32 16 -- 4 5 6 32 16 5)
or => (4 5 6 32 16 5 -- 4 5 6 32 21)
PORTC c! => (4 5 6 32 21 -- 4 5 6 32)
3 pick => (4 5 6 32 -- 4 5 6 32 4)
or => (4 5 6 32 4 -- 4 5 6 36)
PORTC c! => (4 5 6 36 -- 4 5 6)
. . . => (4 5 6 -- )
動作シーケンスでは、3ビットを出力してから
行を指定するビットに'1'を与えていますが
同時としました。
行の指定には、トランジスタを使っているので
制御信号を同時に与えても、若干の遅延がある
ので、動作シーケンスをそのままコードにして
いるのと等価。
3x3のLED、制御用トランジスタも表面実装品を
使えば、充分に基板を小さくできるはず。
イメージは、micro:bitの表示器。
micro:bitでは、5x5のLEDマトリクスですが
センサー値は3ビットなので、3x3にして
います。
目次
前
次