標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第120回]
●「TK80」の回路です
「つくるCPU」の試作2号基板に追加することになった(まだ予定ですけれど)、「TK80」の7segLED回路とキーマトリクス回路です。
このほかにメモリの回路(RAMおよびROM)がありますが、それはまたこの次に説明することにします。
「つくるCPU」の回路の続きのように、説明をしてしまいますが、もちろんこの回路はCPUの回路ではありません。
CPUの外に置く回路です。
その意味では「番外編」として、別稿で説明するべきものかもしれません。
まあしかし、なんといっても余りに有名な「TK80」の回路ですし、CPUの外であろうとなかろうと、とにかくは「試作2号」基板の上にのってしまう(予定)の回路なのですから、この機会に説明をしてしまうことにいたします。
とは言っても、この回路は「TK80」そのままではありません。
ずっと以前には、TK80のマニュアルも持っていたはずなのですが、なにしろかすんでしまうほどのはるか昔のことですから、どこかへいってしまって、今手元には残っていません。
ですからTK80の回路と、この回路のどこが違うのか、違わないのかも正確には言うことができません。
でも、細部には相違があったとしても、それほど大きな違いはないはずです。
●まずは7segLEDの説明から
さて、回路図の説明です。
7segLEDは8桁あります。
たいていの方は、よくご存知とは思いますが、なかには、7segLEDって何?って聞かれる方もみえるかも知れません。
そこで、7segLEDの説明です。
7segment(セグメント)LEDはその名の通り、文字(数字の0〜9)を表示するために、8の字型にタテヨコに細長いLEDを7個配置した構造になっています。
各要素(セグメント)にはa〜gの名前がつけられています。
小数点(dp)は8番目の要素ですが、もともと数字を構成するセグメントではありませんから、7segLEDを表示ドライブするためのTTLICには、dpの表示機能はありません。通常、dpの表示は7セグメントとは別の回路を使います。
下図は7segLEDの構造です。
dpを含めて8個のLEDが図のように接続されています。
その接続の仕方によって、2通りのタイプに分かれます。
図の上側のLEDはカソードが共通になっていますから、「カソードコモン」といいます。
下側のLEDはアノードが共通になっていますから、アノードコモンです。
●TTLロジックではLEDドライブには74LS47を使います
数字はTTLの世界では普通はBCDで扱います。
BCD数については[第10回]で説明しました。
ですけれど、もう一度簡単に説明をします。
BCD数は2進数と同じように0と1だけを使って10進数を表記する方法です。
0〜9の数字1桁を0と1の4桁(4ビット)で表します。
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
上の表を見る限りでは、BCD数は2進数と全く同じです。
しかしBCD数と2進数は、10(十進数の10です)以上の数を表記するところから違ってきます。
参考までに、十進数の10〜20をBCD数と2進数で表記してみます。
4桁ごとに区切って示します。
10進数 | BCD数 | 2進数 |
10 | 0001 0000 | 0000 1010 |
11 | 0001 0001 | 0000 1011 |
12 | 0001 0010 | 0000 1100 |
13 | 0001 0011 | 0000 1101 |
14 | 0001 0100 | 0000 1110 |
15 | 0001 0101 | 0000 1111 |
16 | 0001 0110 | 0001 0000 |
17 | 0001 0111 | 0001 0001 |
18 | 0001 1000 | 0001 0010 |
19 | 0001 1001 | 0001 0011 |
20 | 0010 0000 | 0001 0100 |
BCD数は4桁ごとに区切った表記が十進数の各桁にそれぞれ一致しています。
つまりBCD数は十進数の各桁の0〜9を桁ごとに、単純に2進数の0000〜1001に置き換えただけです。
これに対して2進数は、十進数の桁ごとの数値とは無関係に、その数の値をそのまま0と1だけで表記しています。
以上でBCD数の説明は終わりです。7segLEDのお話に戻ります。
74LS47はBCD数1桁4ビットを、7segLEDのセグメクトを表示ドライブするデータに変換して出力するICです。
10進カウンタICなどからの出力データを7segLEDに表示するときなどに使います。
BCD数を7seg表示用の信号データに変換してくれるのは、なかなかに便利なICなのですが、しかし74LS47にはデータをラッチする機能はありませんし、また0〜9は表示できますが、A〜Fを表示させることはできません(BCD数ですからA〜Fは表示する必要はありません)。
TK80の回路ではアドレス4桁、データ他で4桁、合計8桁の7segLED表示が必要です。しかも16進数表示なので、0〜9だけではなく、A〜Fも表示しなければいけません。
●7segLEDの表示を8ビットデータでおこなう
TK80は74LS47を使って7segLEDを表示するのではなくて、16進数から7segLEDの表示データへの変換をソフトウェアで行っています。
1バイト8ビットの各ビットに7segLEDの各セグメントを割り当てています。
これなら74LS47では表現できなかった、A〜Fの表示も可能です(かなり苦しい形になりますが)。
上で説明したように、TK80の7segLEDは8桁表示です。
すると、各桁にそれぞれ1バイト(8ビット)必要ですから、表示用の8ビットデータラッチも8個必要になります。
しかし最初にお見せした7seg表示回路には1個のデータラッチ(74HC374)しかありません。
なお、74HC244は7segLEDをドライブするためのバッファとして使っています。
本日は時間が無くなってしまいました。この続きは次回にいたします。
2008.12.1upload
2008.12.2追記
前へ
次へ
ホームページトップへ戻る