[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bfree-prj 302] B−FreeOS入門書(第3回)



こんにちは、まさゆきです。

ひさしぶりの書き込みと共に、入門書の続きを引っさげてきました。
ここ数ヶ月、ず〜と仕事が修羅場だったのですが、だいぶ落ち着いてきました。
(じゃあロゴはどうしたのっていうつっこみはなしね(^^;)
というわけで、3回目に突入したいと思います。

ここから
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
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  = ビットと言います。これは2進数の1桁を表します。
      byte = バイトと言います。bitが8つ集まったもので 1byte=8bitです。
      word = ワードと言います。byteが2つ集まったもので word=2byte=16bitです。
      long = ロングと言います。wordが2つ集まったもので long=2word=4byte=32bitです。 

   ただし1longとか1wordとかの言い方はあまり聞きません。
   1longは単にlongと言いますし、2wordはDubbleWord(ダブルワード)と言います。

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

あと、少し補足しておきます。
現在公開中の網頁では、最後の 0xFF0000 とかは、実際に色がついています。

というわけで、ご意見お待ちしております。

--

まさゆき
  HomePage : http://www02.u-page.so-net.ne.jp/fa2/masayuki/
  E-mail   : masayuki@fa2.so-net.ne.jp
  NIFTY    : HBB02234