シリアル通信で色んな事が判ってきた!?(間違ってたら恥ずかしいけど)
それは、パリティ処理。。。
今回請け負い開発で使うセンサーが酸素濃度を計測する装置なんだけど、通信速度が1200BPSで偶数パリティ付きのシリアル通信でデータを出す機能が有るモデル。。。
シリアル通信なんてこれまで長い間、使てきてるから工数的にも少なく見積もってしまってた!?
ところが、動作確認用に作ったWindows 10でプログラム。。全くセンサーと通信できない。。
別購入のメーカーのプログラムだと正常に受け取れているのにだ。。。
そこからドツボにハマった。。。
どうもVisual C#では、1200BPSの通信まともに動かない模様。。
ループバックテストで文字化け続出。。。
ボーレートを9600BPSにすると全く問題が無いから遅い通信速度対応には、何らかの原因が有るのか??
でここから迷走が始まって1週間。。。
直接のシリアル通信は無理と判断。。。
で、途中にワンチップマイコンを入れてバッファー代わりにして問題回避しようと考えた。。。
今回は手元に有ったPIC18F26K22を使うことに。。。
1日目:マイコンからのコマンドにセンサー応答なし。。。
1日目の夜:PICシリーズのマイコンでUSARTはパリティサポート無し。EUSARTはソフトでサポート可能。パリティ機能付きUSARTはハードでパリティサポート付きと判明
2日目:PIC18F26K22のシリアルモジュールは、EUSARTと判る。試しにソフトウェアでデータを判定してパリティビットを処理するようにプログラム修正。。。
数回の手直しでデータが返ってくるようになる。。。
これで1週間の工数遅れが出てしまったけど、何とかなりそうな気配。。。
ほっと胸を撫でおろす!!!