目次
前
次
LED方向指示器(8bits)
8LEDを使い、左右あるいは上下の方向指示器を実現してみます。
8LEDを点滅させる回路は、以下。
この回路は、次のように考えて作成。
- 74LS138をLEDドライバに利用したい
- 点滅させるため、74LS138のA、B、Cにカウンタ出力を接続
- カウンタは、0→7あるいは7→0と変化させる
- カウンタは、0→7の変化だけにし逆にする場合、反転値を利用
- カウンタは、ROMの3ビット出力で構成
- 0→7と7→0の選択は、2つのスイッチのいずれかで指定
- スイッチ状態を記憶するため、フリップフロップ利用
- フリップフロップのデータ記憶は、ROMの1ビットトリガーを使う
- スイッチ状態は、4個だが00と11は同一として扱う
- スイッチ状態が、00と11では74L138の出力は、すべて1となるように構成
対象となる回路が確定したので、シーケンサの動作を設定。
- address=0000 // next=0001 data=1000 (D3='1' D2='0' D1='0' D0='0')
- address=0001 // next=0010 data=0000 (D3='0' D2='0' D1='0' D0='0')
- address=0010 // next=0011 data=0001 (D3='0' D2='0' D1='0' D0='1')
- address=0011 // next=0100 data=0001 (D3='0' D2='0' D1='0' D0='1')
- address=0100 // next=0101 data=0010 (D3='0' D2='0' D1='1' D0='0')
- address=0101 // next=0110 data=0010 (D3='0' D2='0' D1='1' D0='0')
- address=0110 // next=0111 data=0011 (D3='0' D2='0' D1='1' D0='1')
- address=0111 // next=1000 data=0011 (D3='0' D2='0' D1='1' D0='1')
- address=1000 // next=1001 data=0100 (D3='0' D2='1' D1='0' D0='0')
- address=1001 // next=1010 data=0100 (D3='0' D2='1' D1='0' D0='0')
- address=1010 // next=1011 data=0101 (D3='0' D2='1' D1='0' D0='1')
- address=1011 // next=1100 data=0101 (D3='0' D2='1' D1='0' D0='1')
- address=1100 // next=1101 data=0110 (D3='0' D2='1' D1='1' D0='0')
- address=1101 // next=1110 data=0110 (D3='0' D2='1' D1='1' D0='0')
- address=1110 // next=1111 data=0111 (D3='0' D2='1' D1='1' D0='1')
- address=1111 // next=0000 data=0111 (D3='0' D2='1' D1='1' D0='1')
ROMの16バイトの内容は、以下とすればよいはず。
+0 0x18
+1 0x20
+2 0x31
+3 0x41
+4 0x52
+5 0x62
+6 0x73
+7 0x83
+8 0x94
+9 0xa4
+A 0xb5
+B 0xc5
+C 0xd6
+D 0xe6
+E 0xf7
+F 0x07
アドレスを指定できることに注目すると、少し短くなります。
- address=0000 // next=0001 data=1000 (D3='1' D2='0' D1='0' D0='0')
- address=0001 // next=0010 data=0000 (D3='0' D2='0' D1='0' D0='0')
- address=0010 // next=0011 data=0001 (D3='0' D2='0' D1='0' D0='1')
- address=0011 // next=0100 data=0010 (D3='0' D2='0' D1='1' D0='0')
- address=0100 // next=0101 data=0011 (D3='0' D2='0' D1='1' D0='1')
- address=0101 // next=0110 data=0100 (D3='0' D2='1' D1='0' D0='0')
- address=0110 // next=0111 data=0101 (D3='0' D2='1' D1='0' D0='1')
- address=0111 // next=1000 data=0110 (D3='0' D2='1' D1='1' D0='0')
- address=1000 // next=0000 data=0111 (D3='0' D2='1' D1='1' D0='1')
この内容をROMのデータとすると、9バイトになります。
+0 0x18
+1 0x20
+2 0x31
+3 0x42
+4 0x53
+5 0x64
+6 0x75
+7 0x86
+8 0x07
ROMシーケンサは、4ビットのアドレスをフィードバックする
タイプを利用。
パワーオンリセットで、2つのレジスタはゼロクリアされ
ROMのアドレスは必ず0から始まるようにしています。
目次
前
次