シリアル通信してみました。
どもです。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)で宣言していた変数にマイナスを代入してアンダーフローしてたみたいです。
やれやれ。。。
ふぅ。
さぁ、本日の最終形はコチラ↓
20[msec]が25コマで0.5秒。0.5秒で目標値まで移動するようになってます。
目標値は2445~3555にしてあります。
ちなみにこのコマ数は簡単に変更可能です☆
さて、次は。。。ハードかな??
以前に書いたとおりですが、
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)で宣言していた変数にマイナスを代入してアンダーフローしてたみたいです。
やれやれ。。。
ふぅ。
さぁ、本日の最終形はコチラ↓
20[msec]が25コマで0.5秒。0.5秒で目標値まで移動するようになってます。
目標値は2445~3555にしてあります。
ちなみにこのコマ数は簡単に変更可能です☆
さて、次は。。。ハードかな??