■ シリアル通信でうまくいかない時はパソコンと接続して試してください (お奨めシリアル通信ソフト配布)
当方製品では非同期式シリアル(UART)にて通信を行い、制御する機器を多種販売しております。
これらの機器に関するご質問で一番多いのは
「コマンドを送っても期待通り動作しない」 「エラーコマンドが返る」 「動作していない」 「違う動作をしているようだ」
というものです。これらのご質問の内容を精査しますと、ほとんどの場合マイコンからコマンドを送っているケースで、調べてみると正しくコマンドが送られていないことが原因です。 マイコンのプログラム上では正しいと思っていても実際には正しくコマンドが送れていないのが原因です。 マイコンのプログラムが正しく動いている「前提」でのデバッグでは問題解決しません。
シリアル通信で問題が発生している場合次の2点は問題解決のために必須です。 最低でもこの2つをしなければ問題の解決は不可能です。 ご質問の前に必ずこの2点は最低でもお試しください。それによりほとんどの場合問題箇所を発見できます。
1.オシロスコープ(ロジアナ)でRX線、TX線を観察して正しいデータが入出力されているかを確認する。 →必須です。データが正しいかどうかの判定は唯一、そこに印加されるデータの波形だけです。 「シリアル制御がうまくいかない時は常にオシロで波形確認をする」ということを徹底する必要があります。
2.パソコンと接続してパソコンのシリアルターミナルからUART制御する。
ほとんどの場合、上記の1、2いずれも試されていないことがあります。 1.まず、マイコンから制御しているのであればオシロスコープ(又はロジアナ)でUART信号線を観察することは必須です。「本当に意図したデータが正しく入力されているのか」はオシロを使って観察して初めて分かります。シリアル制御をする機器の開発にオシロは必須です。オシロの無い環境では開発は大変困難です。 シリアル通信の問題解決にオシロでの計測、波形観察、評価は何にも優先して必須であり最も基本的なデバッグです。
2.次にUART通信で期待通りに動作しない場合には、パソコンのRS232Cポートと接続してまずは、パソコンから制御してみることをお奨めします。 UARTインターフェイスは多くの場合TTLレベル又はLVTTLレベルですのでそのままRS232Cポートとは直結できませんので、必ずRS232Cレベル変換ICを介してパソコンと接続してください。 RS232Cと接続するのであれば、ADM3202などのレベル変換ICを使います。 USB接続であれば、FT232RLなどのUSB-UART変換ICを使います。 どちらも有名なデバイスで検索すれば参考回路が多数表示されます。
もう1つの方法として、マイコンでUART信号をやりとりするのであれば先ずは「そのマイコンとパソコンを接続してUARTのやりとりをする」ということをしてください。 マイコンのUARTは、UART-USB変換IC(FT232等)やUART-RS232C変換IC(ADM3202等)でPCと接続できます。パソコンにシリアルターミナルを入れて、マイコンと通信してみてください。正しい信号がやりとりできますか? もちろんオシロで波形データを観察することは最低限必要な手法ですが、パソコンとやりとりすることで、マイコン側の動作確認ができます。I2CやSPIに比べUARTはそもそもRS232Cと電圧レベルと論理が違うだけの非同期式シリアル通信なのでパソコンと接続してデバッグしやすい信号です。
当方では、最低限上記の1、2のいずれかがを必ずお試し頂くようお願いしております。 サポートを行う場合でも1、2のいずれかの結果を必ずお聞きします。 特にオシロのデータはスムーズなサポートの必須事項であると考えております。サポートにお問い合わせの際は、必ずオシロの波形データについて所見記載の上で、お問い合わせをお願い致しております。 そのデータがない場合で、「マイコンから駆動しているが動作しない」というお問い合わせにはそもそもUART通信ができているかどうか判断しかねますので、原因を特定することは困難です。よって場合によってはご質問にお答え致しかねますので、予めご了承頂けますようお願い致します。
※オシロ・ロジアナではUART等シリアル信号の信号内容を解析する機能が付いたものをご使用ください。 ※オシロで観察する場合にはスタートビットの幅の計測もお忘れ無く。 ※オシロでの波形観察、解析、これが最低限しなくてはならないデバッグです。 ※オシロをお持ちでないという場合には問題解決は困難です。
パソコンからのシリアル通信にWindowsに標準で付属しているハイパーターミナルをご利用の方がいらっしゃいますが、これもトラブルの原因となっている場合があります。シリアル通信が簡単に行える各種ターミナルソフトがフリーソフトとして公開されております。
■フリーソフトのご紹介-1
使いやすいシリアル通信ソフトです。 送信データと受信データがはっきりとわかります。送信データはCRやLFで終端できる機能も付いています。最初に左側のConfiguration Oprionsの所で通信ポート、速度等を設定します。
続いて、"Send"ボタンの右側にある下向き三角のボタンを押します。"Line Terminator"は送信データを終端するコマンドを指定します。CRで終端する場合にはCRにチェックを入れます。終端するコマンドがない場合には、"No Terminator"を選択します。
"Auto clear after transmit"にチェックを入れておくと、送信データを送信すると自動的に送信ウインドウに表示されていた内容はクリアされます。 通常送信ウインドウに入力した文字は、文字列としてASCIIデータで送信されます。例えばTransmitウインドウに A と入力して送信すれば、41h が送信されます。 受信データも同様で受信されたデータはすべて文字列として表示されます。
一部例外的な使い方として、16進数の値を直接送信方法があります。"Transmit"のウインドウ内で右クリックして"Parse Control Characters"にチェックを入れます。 その上で、送信値の前に「$」を付けると16進数の値での送信となります。例えば、16進数のE0hを送信したければ、「$E0」と入力するとE0hを送信できます。
http://www.microtechnica.tv/support/software/sc_setup.exe
■フリーソフトのご紹介-2
受信データをHEXの値で表示したり、BINで表示したりできるフリーソフトが配布されています。 RealTermは様々な形式で送信したり、受信したりできるので特に文字列以外(ASCIIコード以外)のデータを送受信する場合に便利です。
http://sourceforge.net/projects/realterm/
■フリーソフトのご紹介-3
CoolTermというソフトウエアです。使いやすく、ASCIIやHEXでの送受信ができます。 送受信しているデータを記録するキャプチャ機能もあります。 Windows以外にもMacやLinux用のものも配布されています。
http://freeware.the-meiers.org/
|