目次

LED表示器追加

 走行中に、センサーから取得していた値を
 3ステージほど表示した方が便利だと思い
 はじめました。

 3x3のマトリクスに、現在、ひとつ前、ふたつ前の値を
 1行ごとに表示させることにします。

 回路は単純で、以下。



 現在、ひとつ前、ふたつ前の値を、赤、緑、橙で
 色分けして、わかりやすくします。

 3x3のマトリクスなので、ATmega328のポートCの6
 ビットを利用すれば、点灯制御が可能。

 ポートCと回路図中の入力の対応を考えておきます。

 動作シーケンスを次のように設定。
  1. (PC2,PC1,PC0)に3ビットのパターンを出力
  2. PC3を1とし、PC4、PC5は0に
  3. (PC2,PC1,PC0)に3ビットのパターンを出力
  4. PC4を1とし、PC3、PC5は0に
  5. (PC2,PC1,PC0)に3ビットのパターンを出力
  6. PC5を1とし、PC3、PC4は0に
  7. 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にして  います。

目次

inserted by FC2 system