SoftModem用インターフェイスのまとめ
リモートブレインの夏休み:iPhoneロボット
いつのまにかロボットネタからずいぶん離れてしまいましたが、今回で終わりにしたいです。
まずは、前回で出来上がったモデムを、coronとインターフェィスするにあたって、問題になったもろもろのこと。
■coronでは315bpsは使えない
このプロジェクトでは、昔の電話用モデムのようにPICマイコンは変調・復調機能のみ、という方針でした。そのためには315bipでモデムと通信する必要があります。
coronではシリアルポートのボーレートをconf.hのUART_BAUDRATEの値を書き換えることで設定できますが、残念ながら600bpsより遅いボーレートの設定は出来ないようです。エラーにはなりませんが、通信速度がおかしなことになります。モチロン、各種レジスタを適正にセットすれば遅い方も大丈夫なんでしょうが、ちょっと大変そうです。
そこで、PICのUARTを使ってcoronとの通信はデフォルトの9600bpsで行い、iPhoneとの通信はPICが自力で行うようにしました。
通信速度に差があるので、PIC側に100バイトほどの送信データ用FIFOバッファを設けました。
■iPhoneとのFSK通信は負論理!
SoftModem TerminalからPICに送られるFSK信号は、リーダーとしてスペース(3150Hz)が送られ、スタートビットのマーク(1575Hz)に続いてデータ、最後にストップビットのスペースから構成されています。
最初はそのままマーク1、スペース0として受信したところ文字化けで受信できませんでした。コードを調べると反転しています。つまり、負論理で送られてきているわけですね。もちろん、送る方も負論理です。
モデムってそうだったけ、と改めて思いました。
インターフェイスを自作する人は気をつけないといけません。なお、今回製作したインターフェイスではソフトで対応済みなので、普通にシリアルで送受信できます。
■ボーレートは控えめに
この回路で1225bpsでの通信実験も行いましたが、多少エラーが出ます。マイコンから同じ文字を画面いっぱいになるまで(600字くらい?)送信すると、1〜2回の文字化けが出ることがあります。波形をチェックしましたが原因は不明です。みたところきれいな波形でした。原因追及には手間ひまかかりそうです。
まあ、これまた懐かしいXmodemとかのプロトコルを実装すればこれでも使い物になりそうですが、アマチュアのソフト工作向きではないですね。315bpsなら、普通に通信している限り文字化けは確認できませんでした。あとあとのことを考えるとボーレートは欲張らない方がいいみたいです。
回路図とPIC16F886用のCCSCのソースコードとオブジェクトです。
この回路は3Vから5Vの電源電圧で動作します。uCPUシリアルにMAX232などのレベルコンバータをつなげば、9600bpsのRS232CでPCと接続することも出来ます。僕も開発中はTeraTermでやってました。
「modem_mono.pdf」をダウンロード(回路図)
2010/10/18更新・安定度向上のためプログラム修正しました。↓
「fsk_V11.zip」をダウンロード(CCSCのソースコードとオブジェクトファイル)
動作の様子はこんな感じです。
iRoverのcoronからSoftModem Terminalに'A'を連続送信している様子です。100mS周期で送信しています。100バイトほどのバッファをもっているので、それ以内ならいっぺんに送っても大丈夫ですが、FSKでは1バイト送るのに30msかかるので、送りすぎには要注意です。