No.8 サポート・ページMission2 第4章 78Kマイコンによる温度計(2)

| | トラックバック(0)
 パソコンに温度を表示する温度計のマイコン側温度測定プログラムを説明していきます.

4-2 温度測定プログラムの開発手順


 ここでは,78Kマイコン側の温度測定プログラム作成手順を説明します.マイコンへの書き込みまでの手順は,エレキジャックNo.8のMission1の第4章で説明したとおりで,ソース・コードのテキスト内容が違うだけでほとんど同じです.

(1)アプリレット・プログラムでほとんどのソース・コードを作成
(2)プロジェクト・マネージャでソースの追加
(3)ビルドによりオブジェクト(HEX ファイル)を作成
(4)WriteEZ3プログラムでマイコンへの書き込む

 プログラムは,アプリレット・プログラムで生成した各種処理関数を使うことで,簡単に実現できます.つまり,マイコンに依存する機能は,アプリレット・プログラムで「UARTによる送受信の処理関数」,「温度センサとのI2C送受信の処理関数」などを画面で指定するだけです.生成されたこれらソース・コードはメーカ保証ですし,そのままソース・コードを見ることも変更することもできます.また,このソース・コードを参照することで,ユーザ・マニュアルなどの理解を早めます.

 温度計測のプログラムは,それらの処理関数を使用することで簡単に完成します.

 プログラムは便宜上,四つの構成に分けて説明します.

(1) 共通基本部分
 プロジェクト設定やCPU の発振方式や周波数設定
(2) パソコンとの通信
 UART6 による送受信処理ドライバおよび,それらの処理関数
(3) 温度センサとの通信
 I2C によるデータ送受信ドライバおよび,それらの処理関数
(4) メイン処理
 UART6 送受信関数やI2C 送受信関数を使って温度データの処理


 以下の4-3~4-6項では,機能別に説明しているので,実際の操作手順とは異なります.

4-3 温度測定プログラムの基本部分の説明

 基本部分は,アプリレット・プログラムでプロジェクトの設定とマイコンの発振周波数などを決めます.

プロジェクトを設定する
 アプリレット・プログラムでは,図4-3に示すようにプロジェクト名(ここではI2CUARTondo),ソース・ファイルのフォルダ,マイコン名(78K0/ KB2),デバイス名(ここではuPD78F0503_30)などを指定します.また,次の画面では,コンパイラ(CC78K0)を指定します.これにより,ソフト開発のプロジェクトなどが設定されます

08928G4-3.jpg
 図4-3 プロジェクト名設定
   プロジェクト名や使用する78K0/KB2マイコンのデバイス名を指定.

CPUの発振方式や周波数を決める
 温度測定プログラムは,10MHzの付いた78K0/KB2ベース基板を使って動作させます.このため,CPUクロックは図4-4に示すように外部のセラミック振動子接続の「X1発振」,「10MHz」と指定します.

08928G4-4.jpg
 図4-4 発振方式や周波数の設定
   10MHzのセラミック振動子発振(X1発振)として外部発振を指定.

 ウォッチドック・タイマ(WDT) は使わないので,図4-5のように「使用しない」にチェックし,WDTは動かさないコーディングにしています.

08928G4-5.jpg
  図4-5 WDTはOFFにして使わない


 アプリレット・プログラムはこれらの指定によって,次ソース・ファイルを生成します.

◆system.c …………クロック周波数を設定
◆systeminit.c……起動時初期化するルーチン
◆system_user.c …初期化のときにユーザが追加するコード用
 この他に,空のMain.cやヘッダ・ファイル(.h),プロジェクト管理ファイルなどがフォルダに作られます.

4-4 温度測定プログラムのUART処理ルーチンの説明

 いわゆるパソコンとRS-232C通信を行うマイコンのUART処理(コマンド受信と温度データ送信)は、二つのデータ通信関数を使い行います.これらのソース・ファイルは,アプリレット・プログラムの「シリアル」メニュの「UART6」タブでUART6モジュールに初期化データを指定します.処理のソース・コードは,この設定でほとんど完成します.その後このソース・ファイルに対してわずかの修正と追加をして使用します.

UARTドライバのコード生成
 アプリレット・プログラムでは,図4-6のようにUART6を「送信」「受信」とも使うように指定します.さらに「詳細」ボタンを押して,動作させるUART6の初期設定を,図4-7のように指定します.ここでは,UART6の通信速度,データ長などパソコンと通信する条件設定を指定します.

 データ・ビット順番の指定は,RS-232C標準の“LSB”を指定します.送受信とも割り込みの追加処理は使わないので,送受信完了したときに呼び出すコールバック関数は「使わない」を指定します.

08928G4-6.jpg

 図4-6 UART6を送信/受信に使用するように指定

08928G4-7.jpg

  図4-7 UART6通信の初期設定

 この指定により,二つのソース・ファイルができます.

◆serial.c …………UART6送受信ルーチン
◆serial_user.c …割り込み処理ルーチン
 この中にUART6を使うデータ送信とデータ受信の関数が作られます.
 そのうちのUART6_SendDataデータ送信関数(ルーチン)は,アプリレット・プログラムで作られた関数をそのまま使います.この関数は送信データ・ポインタと文字数を指定します.パラメータtxbufは送信用バッファ,txnumは送信バイト数です.


◆UART6送信関数の形式
   UART6_SendData(UCHAR* txbuf, UNIT txnum,);
 指定したバイト数分の送信完了はグローバル変数「gUart6TxCnt」を使い,値が0になったときに,すべてを送信したことになります.
 一方,受信関数はアプリレット・プログラムが生成したものをそのまま使わず,次に述べる新たな受信関数のソース・コードを追加/変更します.

UART6受信関数の変更
 アプリレット・プログラムが生成したUART6受信ルーチンには,3か所ソース・コードを追加・変更します.ここには,パソコンからのUART6経由で送られてきたコマンド文字の受信データ取りこぼし防止処理を追加します.

 追加するテキストは,受信したデータを入れる「受信リング・バッファ処理」と,「受信リング・バッファから1文字ずつ取り出す独自の処理ルーチン」の二つです.バッファに受信データがない場合は-1を返します

(1) serial_user.c:リスト4-1に示すように,新たに1バイト読み出し関数「UART6_ get1chara()」のコーディングを追加.
(2) serial_user.c:リスト4-2に示すように,生成されたUART6受信割り込みルーチン「MD_INTSR6()」に「リング・バッファ処理」を追加変更.
(3) serial.h:新規に登録した1バイト読み出し関数「UART6_get1chara()」の定義を追加.

---------リスト-----------------------
/* Start user code for definition. Do not edit comment generated here */
int UART6_get1char(void); /* 1バイト受信関数を追加*/
/* End user code for definition. Do not edit comment generated here */
----------------------------------

08928GLIST412.JPG

◆UART6受信関数の形式
   int UART6_get1char(void);

 パソコンからのデータ受信ルーチンは,ここで作成した読み出し関数を使います.処理は受信リング・バッファよりデータ1文字を取り出します.
 なお,この受信用リング・バッファのポインタ初期化はメイン・ルーチン(main)の最初で行います.


(つづく) 

後田敏 

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: No.8 サポート・ページMission2 第4章 78Kマイコンによる温度計(2)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/2067


エレキジャック
エレキジャックのトップに戻る


雑誌 No.