|
||
![]() |
シリアル通信 |
|
ここでは、シリアル通信の使い方について説明します。シリアル通信は、
送りたい情報を「ひとつずつ」送る方式です。送りたい情報を「まとめて」
送る方式もあります。これは「パラレル通信」といいます。シリアル通信は、
組込みプログラムを作成するうえで、まず最初に組み込みたい機能です。
なぜならば?マイコンに書き込んだプログラムにエラーがあった場合、
マイコンはうんともすんとも言わなく(応答しなく)なるからです。
思い通りの動作をしなくなった場合、マイコン内の変数の値をシリアル通信
でパソコンに送り、モニターに表示すれば、デバッグ作業の効率もあがります。
ここではAP-CORE-Aを使い、下図のように、 ターミナルソフトから送信した文字をAP-COREで受信し、 そのまま同じ内容をパソコンに返すプログラムを作成します。 ![]() |
ハードウェア接続 |
下図を参考に接続してください。実はマイコンにソフトウェアを
書き込む際も、シリアル通信を使っています。ですので、
この接続は、最低限必要な接続です。接続はたったの2か所です。
ひとつは電源、もうひとつはシリアル通信ポートです。![]() 電源はJ1を使用します。電源は冗長設計となっており、通常はJ1とJ2に 電源を接続することをお勧めしますが、今回はテストなので、J1だけを 使用します。AP-CORE-Aを使用される方はDC4.5V〜9Vを、AP-CORE-Bを使用 される方は、5Vを供給してください。 AP-CORE-A/Bに搭載されているH8S/2638には、3つのシリアル通信ポートがあります。 AP-CORE-A/Bの場合、シリアル通信はJ5(COM2)、J6(COM1)、J7(COM0)を使用します。 ソフトウェアの書き込みは、J6(COM1)を使いますので、今回はこのポート(J6)を使用 しましょう。シリアル通信のコネクタは通常、Dsub9ピンコネクタを使用します。 最近のパソコン、特にノートパソコンにはUSBポートしかない機種が多いので、 パソコン側にUSBポートしかない場合は、USBシリアル変換ケーブルを使用して、 パソコンとAP-CORE-A/Bを接続してください。これでハードウェア接続は完了です。 |
ソフトウェア |
ソフトウェアはここからダウンロードしてください。開発環境は
HEWを使用しています。他のコンパイラを使用されている方は、読み替えてご使用ください。
ここでは、プログラムの要点のみ説明します。プログラムのポイントは、初期化、送信、
受信、エラー処理、メインループです。初期化初期化処理で最低限設定するレジスタは、シリアルモードレジスタ(SMR)、 ビットレートレジスタ(BRR)、割込み設定です。これは送受信を停止した 状態で設定します。SMRSMRは、通信設定を行います。ここでは、調歩同期モード、データ長8ビット、 パリティ無し、ストップビット1を使用します。この設定は一度決めておくと、 他社製品を使用する場合を除き、滅多に変えることはありません。BRRBRRは、通信速度を設定します。ここでは、38400bpsを設定します。 この速度のBRR設定値は15となります。この設定値は、H8S/2638の ハードウェアマニュアルを参照してください。割込み設定割込み設定は、「受信データフル割込み(RXI)」と「受信エラー割込み(ERI)」 を許可にします。RXIは、外部からデータを受信すると起動されます。 ERIは受信エラーが起こると起動されます。sci.c ![]() 送信送信処理は受信処理よりも簡単です。送信は1バイト(1文字)単位 で送信します。まずデータを送信する前に、送信可能な状態か?を 調べます。これは、トランスミットデータレジスタエンプティ(TDRE) フラグを使います。送信可能な状態になると、TDREフラグに1がセット されるので、TDREフラグをチェックし、送信可能な状態(1)になったら、 トランスミットデータレジスタ(TDR)に送信データを書き込みます。 その後、TDREフラグを0にセットします。sci.c ![]() 受信受信処理は割込みを使用します。常に受信をチェックする方法 (ポーリング)もありますが、この方法は受信がなくても、 常にCPUで処理を行うので無駄があります。受信割込みを使うと、 受信したときのみ起動されるので、CPUを効率よく使用することができます。![]() 外部からデータを受信すると、受信割込みが発生し、 INT_RXI_SCI1が起動されます。この関数は、HEWが自動的に 作成してくれる関数で、intprg.cに記述されています。 (プロジェクト作成時は関数だけ定義されており、 中身はカラです。)受信処理では、受信したデータを一時的に ためておく「受信バッファ」を作成します。ここまでが 割込み処理です。データを受信すると、自動的に受信データが 受信バッファに保存され、バッファがいっぱいになると、 古いデータから上書きします。受信バッファ内のデータは、 sci_write関数を使用して読み込みます。受信バッファが いっぱいになる前に、sci_write関数を起動し、読み込み処理 を行ってください。 intprg.c ![]() sci.c ![]() エラー処理エラー処理は、エラー発生時の処理を定義します。ここでは 簡単のため、エラーフラグ(ORER、PER、FER)を0クリアする だけとします。intprg.c ![]() メイン処理最後がメイン処理です。プログラムのなかで、メイン処理が 最も重要ですが、プログラムは最も簡単な記述となっています。 シリアル通信の初期化を行ったあと、無限ループに入ります。 受信バッファから受信データを読み込み、受信データがあれば、 同じ内容を送信、これを繰り返します。sample1.c ![]() 以上でソフトウェアが完成です。コンパイルを行い、sample1.mot をAP-CORE-A/Bに書き込みます。 |
実行例 |
実行例を紹介します。次の写真は配線の様子です。AP-CORE-Aを使用しています。
接続図のとおり、電源(J1)とシリアル通信ポート(J6)に配線しました。
電源ラインのコネクタは適当なものを選んでください。シリアル通信のコネクタは、
USBシリアル変換ケーブル側がDsub9ピンのオスですので、Dsub9ピンのメスを使用
しました。![]() 次の写真は接続の様子です。電源は安定化電源を使用しています。 ![]() 次の動画はシリアル通信を行っている画面です。今回はターミナルソフト に「あくのりっち」 を使用しました。青文字がPCからAP-CORE-Aへ送信した文字列、赤文字がAP-CORE-Aから 返ってきた文字列です。 テキストボックスに文字を入力し、同じ文字(青文字)が下のウィンドウに 表示された瞬間が、PCからAP-CORE-Aに文字を送信した瞬間です。同時に、 同じ文字(赤文字)が瞬時に返ってきていることがわかります。これは、 AP-CORE-AがPCに同じ文字を返したという意味です。 |
![]() |
|