2013/02/07

[arduino]うちもSoftwareSerialでデータが化けるなあ

「うちも」というのは、アトリエのどかさんの「Arduino+RC-S620/SでSoftwareSerial通信が上手くいかない」を見たからだ。

ソフトウェアでシリアルをエミュレーションするには、ハードウェアでやってることをソフトでやらんといかん。
今回で言えば、

  • スタートビットの検出
  • そこから8bitを1bit時間ずらしながらサンプリング

くらいだろうか(ストップビットとかは省略)。

SoftwareSerial.cppを見てみると、最初の方に動作クロックごとのテーブルがあった。
ここでタイミングを調整するパラメータを決めているようだ。
Arduino UNOは16MHzで動いているので、最初のテーブルみたいだ。
rxcenterでビットの真ん中まで持ってきて、あとはrxintraずつ時間をずらしながらサンプリングするようだ。

DebugPulseという文字があるから、そこでポート出力させながらUARTの波形と並べてみるといいんだろうけど、めんどくさい。

データが化けるのだけど、だいたいMSBがとれるかとれないか、というような値になっている。
一定していないところを見ると、115200bpsは速度の限界なのかな、と思った。
元になっているNewSoftSerialでも、16MHzだと56kbpsくらいだって書いているので、そんなもんなのかな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。