• ベストアンサー

水晶振動子と通信誤差について

マイコンに水晶発振子を付けますが、通信(シリアル通信)に対する誤差との関係はどのようになっているのでしょうか。 どのように、水晶発振子のクロック数を決定するのでしょうか。 ある通信速度を決定したとき、8MHz、10MHz、16MHzのどれを選択するのが最善なのでしょうか。 UiBRG とは何ですか。 UiBRG の値を使って誤差を求めるとき、UiBRG は整数値でなければいけないのですか。普通、一般的に考えなければならないことだとは思いますが。 以上  宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • masudaya
  • ベストアンサー率47% (250/524)
回答No.1

まずは,通信(シリアル通信)に対する誤差の定義をしないと意味が無いと思います. 通信速度の誤差を言っているのか,通信エラーのことを言っているのか,よく分かりません. 前者の場合は,水晶振動子(または発振器)の発振周波数の偏差(初期,温度,経年など)の仕様があります.これはppmで規定されています.CPUでよほどへんなことをしない限り,通信速度の偏差も振動子の偏差と同じになります. > >ある通信速度を決定したとき、8MHz、10MHz、16MHzのどれを選択するのが最善なのでしょうか。 これは通信速度とCPUの関係になると思います.ただ通信速度の整数倍になっていないと処理がうまく行きません.ちなみに振動子は量産をするのであれば,好みの周波数を作ってもらえますので8.2MHzでも10.75MHzでも可能です.(数によりますが,ちょっと割高になるかも知れません.) >UiBRG とは何ですか。 これは下のURLに説明があります.通信速度を決めるCPU内のレジスタ値だそうで,レジスタ値であれば整数でしょう.

参考URL:
http://www11.plala.or.jp/siso/sisolab/Knowledge/PlayingOAKS16MINI.html
optmmmmmmm
質問者

お礼

大変参考なりました。とてもわかりやすいい回答で、的を得たものとなっており、大変 役にたしました。ありがとうございました。今後とも宜しくお願い致します。 UiBRG とはレジスタであり、レジスタに設定する値は (16進)整数値となる。通信速度(レジスタ設定)は、 システムクロック/通信速度bps/プリスケーラ(内蔵)(1/16、1/256)-1 又は、fj(f1,f8,f32)/通信速度/プリスケーラ(1/16)-1で計算し、設定しなければならない。 外部クロックとCPUに設定されたクロックとでは誤差が生じることは致し方ないことで、極力、マージン(許容差)の中に納めるために、レジスタの設定を行う、との認識で使用すればよいということなのでしょうか。

その他の回答 (4)

  • zho3masu
  • ベストアンサー率37% (10/27)
回答No.5

例えば 値7を入れると4800bps 値3を入れると9600bps で、4800bpsで通信したい場合に3より7の方が誤差少ない と表現するのであればそれも正解ですが。 実際CPUのファンクションとしては、 通信スピード選択レジスタで、 誤差を縮める為にあるのではない。 通信スピードが決まれば分周比から発振周波数が決まるし、 適当な発振周波数でない場合は通信スピードに一番近くなるように 値を選択すること。 普通チップのマニュアルにある名称は、 選択レジスタであり誤差修正レジスタではありません。

optmmmmmmm
質問者

お礼

ご回答 誠のありがとうございました。 大変参考になりました。 また、機会がございましたら宜しくお願いします。

  • zho3masu
  • ベストアンサー率37% (10/27)
回答No.4

>外部クロックとCPUに設定されたクロックとでは誤差が生じることは致し方ない >ことで、極力、マージン(許容差)の中に納めるために、レジスタの設定を行う、 >との認識で使用すればよいということなのでしょうか。 UiBRGがデジタル補正でない限り、 上記のマージンに納めるとありますが、UiBRG値が場合によっては、 他の値を選択する余地がない場合が普通 (明らかにスピードが違いすぎる)で、 実用する場合に誤差を縮めるのにこの値を使うとするのは、 概念が違うと思いますが。 細かく発振子を選択できない場合、 規定のクロックを用いて一番近いスピードに合わせる為かと。 学問的には誤差と表現してもいいのかな?

optmmmmmmm
質問者

お礼

再度質問になりますが、 UiBRGレジスタに設定値を設定することの概念、及び、意味、 設定することによって何がどのように影響せれ、どのような結果に結びつくのでしょうか。 必要性としては、(目的)どのようなことなのでしょうか。 UiBRGレジスタに設定値した値と、通信(速度)誤差との関係はどのような関係なのでしょうか。 ・・・・・・大変 お付き合頂き 感謝しております。・・・・・・ 以上 宜しくお願いします。

  • zho3masu
  • ベストアンサー率37% (10/27)
回答No.3

誤)内部クロックと発信周波数を分周している場合はほとんどです。 正)内部クロックは発信周波数を分周している場合がほとんどです。

  • zho3masu
  • ベストアンサー率37% (10/27)
回答No.2

8ビットデータ、スタートビット1、パリティビット1、ストップビット1、合計11ビットの場合 (11ビット分実際の時間-11ビット分理論値時間)/1ビット理論時間 大体1ビット理論時間の半分でマイコンはデーターを取り込む様です。 スタートビットからストップビットまで半分以上ずれなければOK。 調歩同期の場合に理論値の50パーセントくらいまで。 実際マイコンによってはそれより以下でエラーになります。 物理層での歪みがあるので、 プラスマイナス20パーセント位が実用範囲でしょう。 通信スピード、使用するマイコンの分周比、通信方式で逆算すると 使用する発信周波数が出ます。 規模の小さいマイコンの場合4800や9600bps通信優先で周波数選ぶと 14.7456MHzとか11.0592MHzとか整数ぴったりになりません。 UiBRGが分周比だとして UiBRG値n として通信スピード=1/(n+1)の分周比×内部クロック数では? 内部クロックと発信周波数を分周している場合はほとんどです。 値nは整数です。

optmmmmmmm
質問者

お礼

大変参考なりました。とてもわかりやすいい回答で、的を得たものとなっており、大変 役にたしました。ありがとうございました。今後とも宜しくお願い致します。 UiBRG とはレジスタであり、レジスタに設定する値は (16進)整数値となる。通信速度(レジスタ設定)は、 システムクロック/通信速度bps/プリスケーラ(内蔵)(1/16、1/256)-1 又は、fj(f1,f8,f32)/通信速度/プリスケーラ(1/16)-1で計算し、設定しなければならない。 外部クロックとCPUに設定されたクロックとでは誤差が生じることは致し方ないことで、極力、マージン(許容差)の中に納めるために、レジスタの設定を行う、との認識で使用すればよいということなのでしょうか。