シリアル通信してみました。 | 天邪鬼@ロボット妄想中

シリアル通信してみました。

どもです。g@ppです。

以前に書いたとおりですが、


GCC Developer Lite (GDL)において

H8/3664をH8/3694用の環境でコンパイル・実行しております。

今までは、この影響は出たことがないんですが、遂にでました。


そもそも、H8/3664とH8/3694の違いってなんですか?

一番大きな違いは、CPUのクロック数。
  3664 ⇒ 16MHz
  3694 ⇒ 20MHz

つまり、3694の方が早いってこと。
他にも違うところはあるらしいんですが、よく知りません(爆


んで、今回やったことは・・・

なんて言うんでしょうか??

スムージング処理とでも言うんでしょうか!?

サーボの目標値までの移動をコマ割りにして補間するやつです。


んで、数日前に書いてみたものの。。。
なぜか予想外の動きをするわけです。
2つの目標値を往復するだけなのに。。。

こりゃ困った、どうしよう!?

ってことで、シリアル通信を使ってデバッグすることにしたんです。

そしたら。。。

文字化けしまくり orz

いくらやってもダメなのです。







さんざん悩んだあげく、たどり着いたのが【ボーレート】という言葉。


-------ここから引用---------
ボーレートとは、モデムを使用して通信したときの変調速度の単位のことである。1秒間でかけられる変調の回数を表す。
現在のモデムでは通信するのに、位相が異なる2N個の信号点を規定する変調方式を採用する。それゆえ、波長の1サイクルでNビットのデータを表現できることになる。
そのためデータ伝送速度をNで割ると変調速度が分かることになる。例えば、14.4kbpsのモデムではN=6になっているため、14400/6=2400であるから、このとき変調速度は2400ボーとなる。
1つのシンボルで1ビットの情報を伝送する際は、シンボル速度と伝送速度が一致するため、かつては速度を表す単位としてボーが誤用されていたが、現在主流の高速モデムは、複数ビットを1つのシンボルに割り当てているので、これらの値は一致しないことになる。
なお、ボーレートとよく似た単位にbps(bits per second)があるが、こちらは1秒間に伝送できるデータの量をビット数で表している。

-------ここまで引用---------


わかるかい!ボケっ!!!!


要するに、上で述べたように、CPUの速度が違うから転送速度が違うってこと!?

送受信の通信速度が合わないから文字化けしちゃうってこと!?

今のところ、そう理解しました。


んで、ここから対処法↓
【3694.h】の680行目あたりに記述してある
ボーレートの設定リストを書き換えてやりましょう。

/_/_/_/_/_/_/_/_/_/_/_/【変更前】_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
/*--------------------------------------------------------------*/
/* シリアル通信関数(FIFOバッファ付) */
/*--------------------------------------------------------------*/
typedef enum { // ボーレート設定リスト
br4800 = 129,
br9600 = 64,
br19200 = 32,
br31250 = 19,
br38400 = 15,
br57600 = 10
} TBaudRate;

をこのように↓↓↓↓
/_/_/_/_/_/_/_/_/_/_/_/【変更後】_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
typedef enum { // ボーレート設定リスト
/* br4800 = 129,
br9600 = 64,
br19200 = 32,
br31250 = 19,
br38400 = 15,
br57600 = 10*/ //3694用(20MHz)
br2400 = 207,
br4800 = 103,
br9600 = 51,
br19200 = 25,
br31250 = 15,
br38400 = 12,
br57600 = 8 //3664用(16MHz)
} TBaudRate;


変更してみました。

以前の設定は一応、コメントアウトして残しておきました。


全てのレートを試したわけじゃないですが、メインで使ってるあたりは使えそうでした。

やっとシリアル通信ができるようになりました。やれやれ。。。



んで、本題のデバッグ。。。

なんのことはなく、
_WORD(unsigned short)で宣言していた変数にマイナスを代入してアンダーフローしてたみたいです。

やれやれ。。。

ふぅ。

さぁ、本日の最終形はコチラ↓
hterm01


20[msec]が25コマで0.5秒。0.5秒で目標値まで移動するようになってます。
目標値は2445~3555にしてあります。

ちなみにこのコマ数は簡単に変更可能です☆

さて、次は。。。ハードかな??