B−FreeOS入門書
アナログとデジタル  目次へ戻る

さきほどの説明で、「スイッチのON/OFF」の話をしました。
コンピュータで色々な事ができるわけPart1参照の事)
しかし現実にはON/OFFだけでなく、音量を徐々に上げるというようなアナログ的な操作もあります。
ここでは、アナログとデジタルの特徴やコンピュータでの扱いについて説明します。

●アナログとデジタルの違い
一般にアナログとは「連続的」に表現でき、デジタルは「段階的」な表現になります。
たとえば机の上にブロックを置いて、それを動かす時に自由に動かせるのが「アナログ」で、1cm単位でしか動かせないのが「デジタル」になります。
ただし 1cm単位を 1mm単位に、1mm単位を 0.1mm単位に...と細かくしていく事で、人間の目には区別がつかなくするようにもできます。

●なぜコンピュータはデジタルなのか
「なぜデジタルなのか?」
いくつか理由があるのですが、簡単に言ってしまうとコストパフォーマンスの問題です。2つほど理由を挙げてみます。
まず最初の理由としては、デジタルの方が安価な部品が使用できるというのがあります。
物体は温度によって膨張したり収縮します。同様に電気についても温度によって電圧などが変化してしまいます。
たとえば電圧を使って 1〜100の値を表現するコンピュータがあったとして、アナログとデジタルの違いはどうなるかというと、
  アナログ
   電圧=値として表現
  デジタル
   電圧は 0Vと 3Vを使い、0V〜1.5Vを「0」、1.5V〜3Vを「1」として 2進数で表現
   これを必要な桁(100は2進数で1100100なので7桁)だけつなげる
となります。
それぞれで10を表現した状態で温度が変わって 0.5V電圧が上がったとします。すると、
  アナログ
   10V が 10.5V になる
    → 値が 10.5になってしまう
  デジタル
   各桁「 0V と 3V」が「 0.5V と 3.5V」になる
    →「0」と「1」の境目は 1.5V なので「0」と「1」は変化しない
となります。これはデジタルの方が温度変化に強いという事になります。
となると、アナログの方がより温度変化に対する対策を考えなくてはなりません。
つまり温度変化を起こさない設備を用意したり、影響を受けない高価な部品が必要になります。
対してデジタルの場合は、多少の温度変化はOK(上の例では1.4VまではOK)になるので安価に作る事ができます。
(これは温度だけではなく、ノイズについても言える事です。)

もう1つの理由としては、性能や精度を上げやすいというのがあります。
今度は 1〜1000の値を表現するコンピュータを考えてみます。アナログとデジタルの違いはどうなるかというと、
  アナログ
   電圧=値なので、1000V を扱う必要がある
    → それぞれの部品が 1000V に耐えられる必要がある
  デジタル
   1000は2進数で1111101000なので10桁に増やす
    → 3桁増やすだけで良い
となります。これはデジタルの方が安価に精度が上げられるという事になります。
初期のデジタルコンピュータは、アナログコンピュータと比べて性能が低かったのですが、 今ではデジタルコンピュータが全盛です。
もしアナログコンピュータしかなかったとしたら、これほどコンピュータは普及しなかったでしょう。
  「なんで2進なんだ?10進で作ればいいじゃないか」と思われる人もいると思います。
でも 0と 1だけの場合と 0〜9を扱う場合とでは、回路が複雑になり高価になりますし温度やノイズの影響を受けやすくなり、利点より弊害の方が多くなってしまいます。
●デジタルでよく使う表記
最低限知っておいてほしい言葉を挙げておきますので覚えておいて下さい。
  bit
  byte
  word
  long



ビットと言います。これは2進数の1桁を表します。
バイトと言います。bitが8つ集まったもので 1byte=8bitです。
ワードと言います。byteが2つ集まったもので word=2byte=16bitです。
ロングと言います。wordが2つ集まったもので long=2word=4byte=32bitです。
  ただし1longとか1wordとかの言い方はあまり聞きません。
  1longは単にlongと言いますし、2wordはDubbleWord(ダブルワード)と言います。

あと良く使う表記として16進というものがあります。
これは2進数4桁を1桁で表現するために使用します。こうする事で繰り上がりがわかりやすくなるからです。
  10進数  
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 2進数 
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
10000
 16進数 
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10

















←2進数と16進数の繰り上がりが一致する
10進と区別するために、0xFF とか FFh とか $FF とか &HFF などと表記します。

●コンピュータでアナログを使用するには
デジタルコンピュータにはアナログを直接扱う事ができないので変換が必要になります。
アナログ(Analog)からデジタル(Digital)への変換 - AD変換というのがあります。
この変換というのは、電圧を2進数に変換するという意味になります。
逆に2進数を電圧に変換するのをDA変換といいます。
一般にn進数の数値の各桁には、そのn進数に合わせて「重み付け」がしてあります。
  10進数
   n桁目に10のn−1乗の重み付けをする(3桁目なら10の2乗なので重みは100)
    1234 = 1 × 1000 + 2 × 100 + 3 × 10 + 4 × 1
  2進数
   n桁目に2のn−1乗の重み付けをする(3桁目なら2の2乗なので重みは4)
    1011 = 1 × 8 + 0 × 4 + 1 × 2 + 1 × 1
そして各bitの重み付けに合わせて電圧を決めておきます。(今回は 8V, 4V, 2V, 1V とします)
アナログをデジタルに変換するのであれば、電圧が重み付けを越えていたらそのbitをONにして電圧を重み付け分マイナスします。
  5Vを2進数に変換するなら次のようになります。
   1000 = 8V : 8V > 5V なので 0xxx になり、残りは 5V - 0 × 8V = 5V
   0100 = 4V : 4V ≦ 5V なので 01xx になり、残りは 1V - 1 × 4V = 1V
   0010 = 2V : 2V > 1V なので 010x になり、残りは 1V - 0 × 2V = 1V
   0001 = 1V : 1V ≦ 1V なので 0101 になり、残りは 0V - 1 × 1V = 0V
  で結果として 5V が 0101 に変換されました。
デジタルをアナログに変換するのであれば、bitがONの電圧を直列につなげます。
  2進数 1011を電圧に変換するのなら次のようになります。
   1011 = 1 × 8V + 0 × 4V + 1 × 2V + 1 × 1V → 11V
  で結果として 1011 が 11V に変換されました。
ここでは電圧で説明しましたが、同様な方法で色なども変換する事ができます。
アナログRGB(Red,Green,Blueの光の3原色を表す)各色8bitなどというのを聞いた事がある人もいると思います。
この8bitというのが各色の明るさを表していて、0x00(暗い)〜 0xFF(明るい)の値で表現されます。
3色あるので24bitになります。(0x000000〜0xFFFFFFになります)
   0xFF0000    0x00FF00    0x0000FF
   0x800000    0x008000    0x000080
   0x000000    0x808080    0xFFFFFF
画面に色が表示されているでしょうか?この色はDA変換の結果なのです。
目次へ戻る