「うちも」というのは、アトリエのどかさんの「Arduino+RC-S620/SでSoftwareSerial通信が上手くいかない」を見たからだ。
ソフトウェアでシリアルをエミュレーションするには、ハードウェアでやってることをソフトでやらんといかん。
今回で言えば、
- スタートビットの検出
- そこから8bitを1bit時間ずらしながらサンプリング
くらいだろうか(ストップビットとかは省略)。
SoftwareSerial.cppを見てみると、最初の方に動作クロックごとのテーブルがあった。
ここでタイミングを調整するパラメータを決めているようだ。
Arduino UNOは16MHzで動いているので、最初のテーブルみたいだ。
rxcenterでビットの真ん中まで持ってきて、あとはrxintraずつ時間をずらしながらサンプリングするようだ。
DebugPulseという文字があるから、そこでポート出力させながらUARTの波形と並べてみるといいんだろうけど、めんどくさい。
データが化けるのだけど、だいたいMSBがとれるかとれないか、というような値になっている。
一定していないところを見ると、115200bpsは速度の限界なのかな、と思った。
元になっているNewSoftSerialでも、16MHzだと56kbpsくらいだって書いているので、そんなもんなのかな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。