今回はロジックICを使って半加算器を作成してみた。
要するに足し算をする回路だ。この回路を使えば、2進数で以下の4パターンの計算を行うことができる。
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 10
…それが何か?
まぁ普通の人はそう反応するだろう。
実際のところ、これ1つで何か約に立つものではない。
しかしこれはコンピューターの頭脳ともいえるCPUが計算をする際に使用される、基本中の基本ともいえる回路だ。半加算器2つとOR回路を使うと繰り上がり桁を処理できる1ビット計算器(全加算器)となり、これをn個接続すると二進数でn桁+n桁の計算を行うことができる。
CPUの動作原理を理解するための、はじめの一歩がこの加算器と言える。
作ったもの
実際に作ったものはこちら。
スイッチが2つあり、この2つを足し算した結果をLEDで表示させている。
※1枚目の画像にピンセットが写りこんでややこしいけど、1枚目の画像ではスイッチは押してない。
LEDの色が1桁目(右、緑)と2桁目(左、赤)で違うのは、後から説明する為にあえて違う色のLEDを接続したため。フルカラーではなくて、どちらも単色の定電流LED(5V~20Vまで抵抗なしでぶっ挿しても壊れない特殊なやつ)だ。
必要な回路
Wikipediaによると、XOR回路とAND回路を組み合わせることで半加算器を作ることができる。
ja.wikipedia.org
前回はトランジスタを使ってXOR回路を作った。
thom.hateblo.jp
あとはAND回路があれば作ることができる。
ANDはXORに比べれば遥かに簡単なのでわざわざ作って確かめるというようなことはせず、今回はXORもANDもロジックICを使ってさくっと実装した。
結構苦労して作ったXORだったけど、XORのロジックICを買えばコンパクトなパッケージに4つも入っている。
接続
ICを使えば回路自体はかなりシンプルになるが、それでも最初考えていたよりも随分とごちゃついた配線になってしまった。
ぱっと見分かるのは、配線のだぶつき。
XORの時に使った線を使いまわしてるせいで線の長さが綺麗に切りそろえられていない。しかしここまでごちゃっとしているのは別の理由がある。
それは、CMOSで作成されたICはINPUTピンを必ずGNDかVCCに繋がないといけないという制約である。
どこにもつながない場合、電圧が中途半端にかかってしまい、LOW・HIGHの判定が乱れて誤動作する。
※CMOSはComplementary(補完的) metal–oxide–semiconductor(酸化金属半導体)の略で、N型MOSFETとP型MOSFETを補完的に組み合わせた回路のこと。
※MOSFETのFETはfield-effect(場の効果→電界効果) transistor(トランジスター)の略で、電流ではなくて電圧で制御するトランジスタ
よって未使用のINPUTピンを全部GNDに繋ぐ。
また、使用するINPUTピンも結局GNDに繋いでおかないとスイッチOFF時に誤動作する。
ただ直接GNDに繋ぐと、スイッチON時にも電流がGND方向に流れてしまいピンに電流を流すことができない。
そこで使用するピンは1kΩの抵抗を使ってGNDに接続する。
そうするとスイッチOFF時にINPUTピンは抵抗を通じてGNDと同じ0Vまで電位が下がり、スイッチを入れると抵抗がないピン側へ電圧が印加される。
ちなみに中身がMOSFETなのでINPUTピンには電圧が加わるだけで電流は流れていないのではないかと推測している。コンデンサと同じで一瞬電荷の移動はあるけど中にどんどん流れ込むわけではない理解。ただ言い切れるほど知識は無いので、MOSFETの理解は今後の課題である。
動作原理
なぜXORとANDで加算器になるのか、これまではあまり深く考えたことが無かった。
しかし作ってみて気づいたが、深く考えるまでもなく当たり前の事象だった。
もう一度さっきの画像で確認してみよう。
1桁目(右、緑LED)に注目すると、これは単純にスイッチのXOR結果である。
そして2桁目(左、赤LED)に注目すると、これも単純にスイッチのAND結果である。
1桁目のXORと計算ロジックの対応
SW1 | SW2 | XOR | 計算ロジック |
0 | 0 | 0 | 何も足されないので0 |
0 | 1 | 1 | 0+1なので1 |
1 | 0 | 1 | 1+0なので1 |
1 | 1 | 0 | 繰り上がってしまうので0 |
2桁目のANDと計算ロジックの対応
SW1 | SW2 | AND | 計算ロジック |
0 | 0 | 0 | 2桁目まで繰り上がってこないので0 |
0 | 1 | 0 | 2桁目まで繰り上がってこないので0 |
1 | 0 | 0 | 2桁目まで繰り上がってこないので0 |
1 | 1 | 1 | 2桁目に繰り上がってくるので1 |
めちゃくちゃ単純だった。
終わりに
今回作ったものは特に何かの役に立つわけではないが、コンピューターの動作原理の一部自分で作ってみることで理解が深まり、知的好奇心が満たされる。
そしてロジックICを実際に使ってみたことでいくつかアイデアも湧いてきた。
例えばセンサーを2つ使っていて片方だけONの時に何か処理させたいときにマイコンのプログラムで処理することもできるけど、ロジックICのXORをIF文の代わりに使うこともできるんじゃないだろうか。
これまでソフトでしかできなかったことをハードで対応できるようになると、どっちでやるか選択に幅が生まれる。
そうすると何か将来複雑なものを作りたくなったときに、その複雑さをハードとソフトで分担させることができるのではないかと考えている。
これが私が今さら電子工作に熱を入れている理由である。
まぁ今考えた後付けの理由なんだけど、この考えは今後のモチベーション維持に一役買ってくれそうだ。
純粋な理由としては単に電気の仕組みを理解するのが楽しいからやってるというところか。
以上