2015年08月31日

番外編 -デジタル通信のルール(電圧レベル、シングルエンド・差動)

前回は文字コードについて説明し、最後に「電気信号で通信するといっても通信には様々なルールがあります。」と書きました。
通信に関するルールはとても多くありますが、電子工作をする上では、電圧レベル、シングルエンド・差動、シリアル・パラレル、同期・非同期を知っておくと便利です。全部説明すると長いので、今回は電圧レベルとシングルエンド・差動について説明していきます。

なお、通信と書きましたが、今回扱う通信とは「0と1をやり取りする有線のデジタル通信」のことです。


PICマイコンのインターフェース101 [ 小川晃 ]

価格:3,456円
(2015/8/31 12:30時点)


目次



1. 電圧レベル

デジタル通信では電気信号でHigh(=1)とLow(=0)のやり取りを行います。電圧レベルとは何[V]をHigh、Lowとして扱うかというルールです。

電子工作で主に使われるのは5.0[V]をHigh、0.0[V]をLowとする5[V]系と、3.3[V]をHigh、0.0[V]をLowとする3.3[V]系です。

30_通信方式1_1_1.png

30_通信方式1_2_1.png

デジタル通信は2つ以上の機器や部品で行いますが、それらは全て同じ電圧レベルでなければ通信できません。もし、5[V]系の部品と3.3[V]を通信させたいのであれば電圧レベル変換用の部品や回路が必要です。


2. シングルエンド・差動

さて電圧レベルでは5[V](もしくは3.3[V])と0[V]を使って通信を行う方法を説明しましたが、これはシングルエンド(Single-Ended)という方式です。シングルエンドの対になる方式として、差動(Differential)という方式があります。それぞれの方式で線の接続法High/Lowの認識が異なります。

シングルエンド

シングルエンドは今までArduinoでものを作ってきたときにも使ってきた方式です。必要な線は信号線とGND線(=0[V])の2種類です。

30_通信方式1_4.png

High/Lowの認識は信号の電圧で決まります。電圧がHigh付近ならばHighLow付近ならばLowHighとLowの中間ならば不明です。

30_通信方式1_3.png


なお、シングルエンドとは関係ありませんが、上のデジタル波形は今までのように長方形でなく、台形で描いています。これは時間を厳密に考えるときの描き方です。

理想では下図のような一瞬でHigh/Lowが変化するデジタル波形が望ましいです。

30_通信方式1_5.png

ですが、現実にそのようなデジタル波形を作るのは難しく、High/Lowが変化するのに時間がかかってしまい、台形のようになってしまいます。

30_通信方式1_6.png

普段はHigh/Lowの変化時間は無視して直方体のような描き方でよいですが、時間を厳密に考慮するとHigh/Lowの変化時間が無視できないため台形のような描き方にします。

差動

差動は今回初めて扱う方式です。差動でもシングルエンドと同じように信号線とGND線がありますが、シングルエンドと違い信号線に+(プラス)側-(マイナス)側があります。ですので、必要な線は3本です。

30_通信方式1_7.png

差動方式ではHigh/Lowの認識に2つの信号線の差を活用します。差動方式の場合、+側と-側の信号は互いがクロスするように変化します。+側の電圧が-側より高ければHigh、+側の電圧が-側より低ければLowです。

30_通信方式1_8_2.png

差動方式の利点はノイズに強いということです。電気信号は外部からのノイズ(主に電波)によって波形が乱れます。波形の乱れ具合によってはHigh/Lowを正しく認識することができず、通信エラーが発生してしまいます。通信の種類もノイズに影響しており、高速通信遠距離通信だとノイズが増えやすいです。

30_通信方式1_9.png

差動方式はシングルエンド方式よりもノイズに強いです。ですので、高速通信や遠距離通信などで少しでも通信エラーを減らしたい場合は差動方式が用いられている場合が多いです。
一方、シングルエンド方式は差動方式よりノイズに弱いとはいえ、電子工作で使う分にはほぼ通信エラーおきません。また信号線が差動方式より1本少なくて済みます。ですので、電子工作に使用する部品の大半はシングルエンド方式です。


今回説明したことをまとめました

  • 電圧レベル:High/Lowを認識する電圧。主に5[V]系と3.3[V]系がある。Arduinoは5[V]系
  • シングルエンド:1つの信号線で通信を行う方式。電子工作の大半はこの方式
  • 差動:+側と-側、2つの信号線で通信を行う方式。ノイズに強いため高速通信や遠距離通信で用いられる

次回はシリアル・パラレル、同期・非同期について説明します。


参考資料

  1. 作者名:村田製作所. "高速の伝送が、なぜ差動伝送になっているのか?". サイト名:村田製作所. http://www.murata.com/ja-jp/products/emiconfun/emc/2013/10/15/en-20131015-p1, (参照日:2015-08-31)


posted by ました at 16:54| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする

2015年08月23日

番外編 -文字コード

今回は2進数(16進数)を使って文字を表現する方法、文字コードについて説明します。


目次



1. JISコード

電子機器のデータは2進数でできていますので、電子機器が文字を扱うためには文字も2進数で表現する必要があります。例えば「あ」という文字を0001(2)という2進数で表せば、0001(2)のデータをやり取りすることで「あ」の文字をやり取りすることができます。
ただし、電子機器同士で文字のやり取りをするときに、どの2進数がどの文字を表しているのかを互いの電子機器が知らなければなりません。例えばある電子機器は「あ」を0001(2)、もう片方の電子機器は「A」を0001(2)と表してしまったら、「あ」と「A」の文字がごちゃまぜになってしまいます。
文字を正しくやり取りできるように文字を表す2進数のルールがあり、そのルールを文字コードといいます。

文字コードに限らず工業製品では違うメーカーの部品や機器同士でも使えるよう、多くのルールが決められています(=標準化)。日本でよく使われるルールは日本工業規格(JIS)、世界規模のルールを決める組織を国際標準化機構(ISO)といいます。
JISでは文字コードも定めておりJISコードといいます。下表はJISコードの中からアルファベットと数字を抜粋した表です。

  上位桁
  0123456789ABCDEF
下位桁0   0 P p        
1   1AQaq        
2   2BRbr        
3   3CScs        
4   4DTdt        
5   5EUeu        
6   6FVfv        
7   7GWgw        
8   8HXhx        
9   9IYIy        
A    JZjz        
B    K k         
C    L l         
D    M m         
E    N n         
F    O o         

上表では1つの文字が2桁の16進数で構成されており、「A」は41(16)、「B」は42(16)、「a」は61(16)、「b」は62(16)と表します。アルファベットや数字以外の漢字やひらがななどもJISコードで決められています。漢字やひらがなを表すには16進数2桁だと桁数が足りないので、4桁で表します。
JISコードは日本の文字コードですが、ASCIIコードというアメリカで誕生した文字コードを基本に漢字やひらがなを加えた規格です。ISOもASCIIコードを使って標準化していますので、アルファベットや数字の文字コードは共通しています。


2. 文字コードの通信

電子機器で文字のやり取りを行う場合は文字コードのデータを送ります。データはHighとLowの電気信号を組み合わせることで通信できます。
例えば「a」は61(16)、「A」は41(16)、ですので、「aA」という文字を送りたいなら6141(16)というデータをHighとLowで表現し、通信すればよいです。

19_文字コード_1.png

19_文字コード_2.png


文字コードに従って文字を2進数で表し、その2進数を電気信号で通信することで、文字のやり取りを行うことができます。
ただし、電気信号で通信するといっても通信には様々なルールがあります。例えばHighとLowのどちらを1として扱うのか、2進数のデータは先頭から送るのか末尾から送るのか、通信には何本の線を使うのかなどです。
次回は通信のルールについて説明します。


参考資料

  1. 著書名:喜安善市・清水賢資. 書名:ディジタル情報回路. [2版], 出版社:森北出版, 出版年:1989, 参照頁(pp.23-25)
  2. 著書名:小高知宏. 書名:計算機システム. 出版社:森北出版, 出版年:1999, 参照頁(pp.8-11)


プログラマのための文字コード技術入門 [ 矢野啓介 ]

価格:2,786円
(2015/8/23 10:50時点)


posted by ました at 11:23| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする

2015年08月18日

番外編 -2進数

今回は2進数について説明します。
シリアル通信というArduinoがパソコンなどとデータをやりとりする機能を説明しようと元々は思ってましたが、その前にデータと関係が深い2進数について説明した方がいいと思いました。


目次



1. 2進数

今までArduinoでスイッチやLEDなどの入出力制御を行うときはHighとLowの2種類の電気信号を使ってきました。Arduinoがパソコンなどとデータをやり取りする場合もHighとLowの2種類だけでやり取りを行います。2種類の値だけでデータを表現する方法が2進数です。

2進数では10の2つだけで数を数えることができます。2つだけなのでHighとLowをやり取りできれば、2進数もやり取りすることができます。

18_2進数_1-1.png

※上図ではHigh=1 Low=0としていますが、High=0 Low=1とする場合もあります



2. 2進数の数え方

2進数を説明する前に普段使っている10進数について説明します。10進数では0〜9までの数字が使え、桁が上がるとその桁の位は10倍になります。

18_2進数_2-1.png

一方、2進数では0と1の数字が使え、桁が上がるとその桁の位は2倍になります。下図では8の位までしか書いていませんがその後も16の位、32の位、……、と増えていきます。

18_2進数_3-1.png

2進数の値を10進数にするときはそれぞれの桁の値と位をかけて、それらを全て足します
例えば2進数で1001の値を10進数に変換すると以下のようになります。

$1\times 8 \  + \  0 \times 4 \  + \  0 \times 2 \  + \  1 \times 1 = 9$

110110だとこうなります。

$1 \times 32 \  + \  1 \times 16 \  + \  0 \times 8 \  + \  1 \times 4 \  + \  1 \times 2 \  + \  0 \times 1 = 54$

2進数の読み方ですが数字を一桁ずつ読みます。1001は「いちぜろぜろいち」、110110は「いちいちぜろいちいちぜろ」です。0は「まる」や「れい」と読んでもよいですが、1000を「せん」と読んだり10を「じゅう」と読んだりはしないでください。

このブログで扱う数字は基本的に10進数ですが、今回のように2進数を使ったりする場合があります。10進数と2進数が混ざる場合、10進数は数字の後ろに(10)、2進数は(2)、後述する16進数は(16)を付けます。なお一般的には数字の前に0xを付けると16進数です。


3. 16進数

10進数だと4桁あれば0(10)〜9999(10)まで表せますが、2進数だと0(10)〜15(10)までしか表せません。2進数で大きい数字を表すには桁がたくさん必要ですが、桁が多いと見て分かりにくいです。そこで桁数を減らして見やすくするために、2進数の4桁をまとめて16進数という数え方を使います。
16進数では16個の数字を使え、桁が上がるとその桁の位は16倍になります。数字は0〜9までしかありませんので、10〜15はA〜Fを使います。A(16)=10(10)、B(16)=11(10)、F(16)=15(10)です。

18_2進数_4-1.png

B(16)、51(16)、FC7(16)を10進数に変換すると、それぞれ以下のようになります。

$11\times 1 = 11$

$5\times 16 \  + \  1 \times 1 = 81$

$15\times 256 \  + \  12 \times 16 \ + \   7 \times 1 = 4039$

16進数の数字の読み方も2進数と同様に数字を一桁ずつ読みます。ですのでB(16)は「びー」、51(16)は「ごーいち」、FC7(16)は「えふしーなな」と読みます。
なお、16進数は表示がそうなっているだけで、電子機器が実際に扱っているのは2進数です。あくまで見やすくするために2進数を4桁ずつまとめて、16進数として表示しているだけです。


やり取りできる電気信号がHighとLowの2つだけでも、2進数を使うことで数字のやり取りを行うことが出来ます。電子機器はデータに2進数の番号を割り振り、その番号をやり取りすることでデータをやり取りしています。
例えば「あ」という文字に「0001(2)」という番号を割り振れば、「0001(2)」の電気信号をやり取りすることで、「あ」の文字をやり取りすることが出来ます。
ただ、どの番号にどの文字が割り振られているかを電子機器同士が知らなければ、文字を正しくやり取りすることが出来ません。どの番号がどの文字に割り振られているのかのルールを文字コードといいます。
次回は文字コードについて説明します。


ディジタル回路 [ 春日健 ]

価格:1,620円
(2015/8/18 20:53時点)


posted by ました at 21:06| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする