PIC16F1938でシリアル通信

マイコンで最初に行うのがポートのON/OFF確認。
それで、次に出来るようにならないといけないのがシリアル通信で、printf(””);が使えるようになること。
これが出来ないと、A/D変換、I2C、SPIを使用したときの動作確認が面倒になる。

マイコンとPC間の通信ははUSBシリアル変換モジュール「FT232RL」を使用します。
「FT232RL」を使用した商品は多数ありますが、どれでも問題無いと思います。

ここでは自分が作ったFT232RL専用基板を使います。
http://cat0048.my.coocan.jp/USB-USART/USB-USART1.htm
信号の接続はクロスするように接続してください。

PIC側 TX(RC6) −−−−→ RXD  FT232RL側
     RX(RC7) −−−−→ TXD

ついでに、内臓EEPROMの動作確認と、ポートBを入力にして入力内容をシリアル通信にて表示します。

ポートBを入力ポートにして気づいたのですが、ポートBのRB7とRB6はプログラムの書き込み時に使用します。
このポートが別の装置などに接続されていると、書き込み時に影響が出て書き込み出来ない場合があります。
書き込み時はRB6とRB7には何も接続しないでください。

サンプルプログラムはここ



ターミナルソフトは「Tera Term」を使用します。
設定は下の通り。


サンプルプログラムをビルドしてマイコンに書き込み込めばターミナルソフトに数列、文字列が表示されます。
EEPROMに書き込んでだ値が正常に読み込みできる事が確認できます。
後は、繰り返しポートBの入力状態を表示します。


次は受信テストです。 まず割り込み無しで行います。
サンプルプログラムはここ

ターミナルソフトにて文字を送信するためにキーを1文字打ち込みます。(ここでは’q’)
打ち込んだキーの文字が表示されます。
rxdata1 = q
rxdata2 = q

今度は、2文字続けて打ち込みます。(ここでは、’rg’)
rxdata1 = r
rxdata2 = g

今後は、3文字以上を続けて打ち込んでみてください。
たぶん、
rxdata1 =
rxdata2 =
を表示したあと、”RCIF = 0”の表示が続いてキーを受け付けなくなります。
これは、バッファからデータが漏れ受信エラーを起こしているためです。
この場合、いったんUARTを無効化して再設定が必要です。

データの取りこぼしが無いようにするには。
2バイト程度の受信を間を置いて行う。(バッファのデータをすべて抜く余裕のある処理)
データの取りこぼしが起こらないような通信スピード、受信処理を行う。
送信側と制御を行いながら通信を行う。(フロー制御)
必要があります。

シリアル通信の受信は割り込みを使った方が無難です。

サンプルプログラムはここ
リターンキーの改行コードには’CR’と’LF’を設定できますが、今回のサンプルプログラムは’CR’のみ設定してください。


通常は他の処理をしていてかまいません、キーボードから適当にキーを押して
最後にリターンキーを押すと今まで押したキーの文字が表示されます。

データを受信中も他の処理が出来ますが、リターンキー(CR)が押されたフラグを監視する必要があります。



応用例として「バーコードリーダー」を使ってみます。出力は’RS−232C’のものです。


PIC等のマイコンで読み込む場合は、レベル変換が必要となります。





シリアル通信を行うプログラムを書いたとき、シリアルのTX・RXのあるポートCの操作は注意してください。
ポートC全体を操作するような事はやらない方が無難です。(PORTC =0xFF など)
シリアル通信でゴミが発生する可能性があります。

あと、
シリアル通信のテスト中怪奇現象が起こりました・・・、
マイコンの電源は外している、PICkit3も外しているのにLEDが点滅するのです???
原因はFT232RLはUSBにつながっていますので、PCの電源がUSBからFT232RLへRX・TXを経由して
マイコンのポートへ電気が流れてマイコンが動作して、不安定な動作を繰り返している為です。
ちなみにマイコンの電源を電源装置につなぐと不良動作は止まります。(電源はOFFの状態で)
もしFT232RLを使う場合これらの対策が必要です。

メインへ