Comments
Description
Transcript
書込み済みマイコンプログラム通信コマンド概要
アプリケーションノート ミニマイコン評価カード CT-298、3 軸加速度センサーモジュール MM-2860 書込み済みマイコンプログラム通信コマンド概要 1.概要 ミニマイコン評価カード CT-298 および DIP パッケージマイコン SF9S08C には、製品出荷時に 3 軸加速度センサー モジュール MM-2860 のデモプログラム(HC9S08QG8-XYZ2_v1.1)が書込まれており、購入後すぐに評価するこ とができます。 デモプログラムの評価は、PC の評価アプリケーションと通信することで実現します。 本アプリケーションノートではデモプログラムと PC 間でやりとりされる主なコマンドと通信フォーマット、PC よ りコマンドを送り結果を表示するサンプルアプリケーションについて説明します。 ※ デモプログラム(HC9S08QG8-XYZ2_v1.1:アセンブラプログラムの CodeWorrior プロジェクト)は、 フリースケール・ セミコンダクタ社のサイトより入手できます。 http://www.freescale.co.jp/products/8bit/9s08qg.html ※ フリースケール・セミコンダクタ社の評価アプリケーション(RD3112MMA7260Q_26JUL05.exe)がサイトより入手 できます。入手方法、内容については「サンハヤト アプリケーションノート ミニマイコン評価カード CT-298、3 軸加 速度センサーモジュール MM-2860 デモプログラムの評価方法(MM2860_SG043226.pdf) 」を参照してください。 2. デモプログラムの通信フォーマットとコマンド デモプログラムは、以下のシリアル通信フォーマットで通信します。 表1 デモプログラムの通信フォーマット ボーレート スタートビット データ長 ストップビット パリティ 38,400 1 ビット 8 ビット 1 ビット なし リセット解除時に CT-298 の LED1 が点灯します。またリセット解除時の押ボタンスイッチ SW2 の状態によって、 以下のような動作になります。 表2 SW2とデモプログラムの動作 リセット解除時の SW2 の状態 押されている 押されていない デモプログラムの動作 FLASH の内容を読み取って前に実行されたアプリケーション(「Shock Detection」、「Anti-Theft」、「Battery Saver」のいずれか)を実行する PC からキャラクタ 'R' を受信すると 'N' を送る 'N' キャラクタの送信後に 1 回、50ms 間ブザーを鳴らし LED2 を点滅する 後は受信待ちとなり、送られてくるコマンド(キャラクタ)の内容に従って動作する デモプログラムが PC からのコマンド待ちとなった場合、PC から送られるコマンド(キャラクタ)に従って処理を 行います。コマンドの内容によっては PC へデータを送信します。 以下に主なコマンドの内容を示します。 表3 PCからの主なコマンドとデモプログラムの処理内容 コマンド デモプログラムの内容 V X、Y、Z 軸の AD 値を送る K k キャリブレーションデータを FLASH から読み出し、送る コマンド受信のあと、さらにキャリブレーションデータを PC から受信し、FLASH に書込む 以下に各コマンドの送受信データのフォーマットを示します。 表4 送受信フォーマット コマンド 受信データのフォーマット V K k Xoff Xmax Yoff Ymax Zoff Zmax 送信データのフォーマット('' 内はキャラクタを示す) X軸 Y軸 Z軸 'x' 'y' 'z' AD 値 AD 値 AD 値 'X' Xoff Xmax 'Y' Yoff Ymax 'Z' Zoff - バイト数 6 Zmax 9 6 ※ フリースケール・セミコンダクタ社の評価アプリケーション(RD3112MMA7260Q_26JUL05.exe)では Xoff、Yoff、 Zoff はオフセット値(0g の時の値)、Xmax、Ymax、Zmax は最大値(1g の時の値)として扱っています 3. サンプルアプリケーション PC に接続した CT-298 + MM-2860 と通信し、PC より V、K、k の各コマンドを実行するサンプルアプリケーショ ンを紹介します。このアプリケーションは以下の開発ツール、環境で開発、動作確認をおこなっています。 表5 サンプルアプリケーション開発環境 OS Windows アプリケーション開発環境 Windows XP Professional Service Pack2 Microsoft Visual Basic 2005 ExpressEdition Version8.0.50727.762 ※ Microsoft .NET Framework Version2.0.50727 ※ ※ マイクロソフト社が無償提供するプログラミングツールです サンプルアプリケーションの実行画面を以下に示します。 図1 サンプルアプリケーション実行画面 アプリケーションノート MM-2860 デモプログラムの評価方法 サンプルアプリケーションの各機能と対応するソースコードを以下に示します。 Form1(このアプリケーションのウィンドウ)が表示されると、コンボボックスに利用可能な COM ポートが表示 されます(リスト中の①のコード) 。また、「reflesh」ボタンが押されても同様の処理がおこなわれます(リスト中 の③のコード)。コンボボックスで使用する COM ポートが選択されると COM ポート番号、通信フォーマットが表 示されます(リスト中の②のコード) 。 Public Class Form1 Dim Dim Dim Dim Dim portname As String = "com1" baudRate As Integer = 38400 parity As IO.Ports.Parity = IO.Ports.Parity.None dataBits As Integer = 8 stopBits As IO.Ports.StopBits = IO.Ports.StopBits.One 使用する COM ポートと通信フォーマット ① Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBoxCom.Items.Clear() コンボボックスをクリアし、GetPortName() サブルーチンプロシージャを実行します GetPortName() End Sub ③ Private Sub reflesh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles reflesh.Click ComboBoxCom.Items.Clear() GetPortName() End Sub Private Sub GetPortName() For Each sp As String In My.Computer.Ports.SerialPortNames ComboBoxCom.Items.Add(sp) Next End Sub ② 利用可能な COM ポートを取得し、コンボボックスに表示します Private Sub ComboBoxCom_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles ComboBoxCom.SelectedIndexChanged コンボボックスで選択された COM ポート番号を変数 portname に代入します portname = ComboBoxCom.Text port_info.Text = "COM : " & portname & vbNewLine _ & "Boudrate : " & baudRate & vbNewLine _ 選択した COM ポートと、通信フォーマットを表示します & "Parity : " & parity & vbNewLine _ & "Bit Length : " & dataBits & vbNewLine _ & "Stopbits : " & stopBits & vbNewLine End Sub リスト1 Form1.vb (1) ① コンボボックス ② ③ 図2 COMポートの選択 「R コマンド」ボタンがクリックされると、コンボボックスで選択された COM ポートが接続され、 キャラクタ「R」 を送信します。キャラクタ「N」を受信するとメッセージ「N を受信しました」を表示します。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim Command As String = "R" Dim N As Integer ① Try COM ポート接続を開き、フォーマットを設定します Using com As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort(portname, baudRate, parity, dataBits, stopBits) com.ReadTimeout = 500 ③ com.Write(Command) N = com.ReadChar COM ポートからの読み出しのタイムアウトを 500ms に設定します R’を送信します 1 キャラクタ受信して変数 N に格納します If (Convert.ToChar(N) = "N") Then ‘N’を受信した場合のメッセージ Rcommand.Text = "N を受信しました " Else Rcommand.Text = "N を受信しませんでした " End If 制御しているリソース(この場合は COM ポート接続)を破棄します End Using ② 例外が起きた場合(COM ポートから通信できなかった場合)はエラーメッセージを出します Catch ex As Exception MessageBox.Show(ex.Message, " エラー ", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub リスト2 Form1.vb (2) 図3 Rコマンド実行画面 アプリケーションノート MM-2860 デモプログラムの評価方法 「V コマンド」ボタンがクリックされると、コンボボックスで選択された COM ポートが接続され、データを受信 します。確実にデータを受信するため、受信データがそれぞれ x、y、z であることを判断してから 1 バイトデータ を変数に格納しています。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim Command As String = "V" Dim Dim Dim Dim Dim Dim buf As Byte() = {&H0} bufx As Byte() = {&H0} bufy As Byte() = {&H0} bufz As Byte() = {&H0} offset As Integer = 0 count As Integer = 1 Try COM ポート接続を開き、フォーマットを設定します Using com As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort(portname, baudRate, parity, dataBits, stopBits) com.ReadTimeout = 500 ① com.Write(Command) Do COM ポートからの読み出しのタイムアウトを 500ms に設定します ‘V’を送信します ‘x’を受信するまで受信し続けます com.Read(buf, offset, count) Loop While Convert.ToChar(buf(0)) <> "x" ③ com.Read(bufx, offset, count) ‘x’を受信したら次のデータを格納します Do ‘y’を受信するまで受信し続けます com.Read(buf, offset, count) Loop While Convert.ToChar(buf(0)) <> "y" com.Read(bufy, offset, count) ‘y’を受信したら次のデータを格納します Do ‘z’を受信するまで受信し続けます com.Read(buf, offset, count) Loop While Convert.ToChar(buf(0)) <> "z" com.Read(bufz, offset, count) ‘z’を受信したら次のデータを格納します ② x.Text = bufx(0) y.Text = bufy(0) z.Text = bufz(0) 受信した XYZ 軸のデータを表示します End Using 例外が起きた場合(COM ポートから通信できなかった場合)はエラーメッセージを出します Catch ex As Exception MessageBox.Show(ex.Message, " エラー ", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub リスト3 Form1.vb (3) 図4 Vコマンド実行画面 「k コマンド」ボタンがクリックされると、コンボボックスで選択された COM ポートが接続され、テキストボッ クスに入力されたデータを送信します。 ① Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim Command As String = "k" Dim sendbyte As Byte() = {&H0, &H0, &H0, &H0, &H0, &H0} Try ③ sendbyte(0) sendbyte(1) sendbyte(2) sendbyte(3) sendbyte(4) sendbyte(5) = = = = = = Convert.ToByte(xoff_box.Text) Convert.ToByte(xmax_box.Text) Convert.ToByte(yoff_box.Text) Convert.ToByte(ymax_box.Text) Convert.ToByte(zoff_box.Text) Convert.ToByte(zmax_box.Text) テキストボックスの値を変数に格納します COM ポート接続を開き、フォーマットを設定します Using com As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort(portname, baudRate, parity, dataBits, stopBits) ‘k’を送信します ② com.Write(Command) com.Write(sendbyte, 0, 6) End Using テキストボックスの値を格納した変数の内容をすべて送信します 例外が起きた場合(テキストボックスに正しくない形式の数値が入力された、 COM ポートから通信できない等の場合)はエラーメッセージを出します Catch ex As Exception MessageBox.Show(ex.Message, " エラー ", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub リスト4 Form1.vb (4) 図5 kコマンド実行画面 アプリケーションノート MM-2860 デモプログラムの評価方法 「K コマンド」は「V コマンド」とほぼ同じ内容です。格納するデータが 2 バイトになります。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Command As String = "K" Dim Dim Dim Dim Dim Dim Dim Dim Dim buf As Byte() = {&H0} bufxo As Byte() = {&H0} bufyo As Byte() = {&H0} bufzo As Byte() = {&H0} bufxm As Byte() = {&H0} bufym As Byte() = {&H0} bufzm As Byte() = {&H0} offset As Integer = 0 count As Integer = 1 Try COM ポート接続を開き、フォーマットを設定します Using com As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort(portname, baudRate, parity, dataBits, stopBits) com.ReadTimeout = 500 com.Write(Command) COM ポートからの読み出しのタイムアウトを 500ms に設定します ‘K’を送信します Do ‘X’を受信するまで受信し続けます com.Read(buf, offset, count) Loop While Convert.ToChar(buf(0)) <> "X" ① com.Read(bufxo, offset, count) com.Read(bufxm, offset, count) ③ Do ‘X’を受信したら次の 2 バイトのデータを格納します ‘Y’を受信するまで受信し続けます com.Read(buf, offset, count) Loop While Convert.ToChar(buf(0)) <> "Y" com.Read(bufyo, offset, count) com.Read(bufym, offset, count) Do ‘Y’を受信したら次の 2 バイトのデータを格納します ‘Z’を受信するまで受信し続けます com.Read(buf, offset, count) Loop While Convert.ToChar(buf(0)) <> "Z" com.Read(bufzo, offset, count) com.Read(bufzm, offset, count) ② xoff_label.Text xmax_label.Text yoff_label.Text ymax_label.Text zoff_label.Text zmax_label.Text = = = = = = bufxo(0) bufxm(0) bufyo(0) bufym(0) bufzo(0) bufzm(0) ‘Z’を受信したら次の 2 バイトのデータを格納します 受信した XYZ 軸のデータを表示します End Using 例外が起きた場合(COM ポートから通信できなかった場合)はエラーメッセージを出します Catch ex As Exception MessageBox.Show(ex.Message, " エラー ", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub End Class リスト5 Form1.vb (5) 図6 Kコマンド実行画面 本資料について ・本資料は、電子工作や電子回路、パーソナルコンピュータ ・本資料に記載してある内容は、一般的な電子機器(学習教 の操作について一般的な知識をお持ちの方を対象にしてい 材、事務機器、計測機器、パーソナル機器、コンピュータ ・ ・ ・ ます。 本資料を元に操作するには、フリースケール・セミコンダ クタ社製 HC08 シリーズマイコンについての知識や開発環 境などが必要です。 Microsoft®、Windows® は米国 Microsoft 社の米国および その他の国における登録商標です。 その他、記載されている製品名は各社の商標または登録商 標です。 本資料のご利用にあたって お客様が用途に応じた適切な ・本資料に掲載している内容は、 製品をご購入頂くことを目的としています。その使用によ ・ り当社及び第三者の知的財産権その他の権利に対する保証、 又は実施権の許諾を意味するものではありません。また、 権利の侵害に関して当社は責任を負いません。 本資料に記載した情報を流用する場合は、お客様のシステ ム全体で充分評価し適用可能かご判断願います。当社では 適用可能判断についての責任は負いません。 ・ ・ ・ ・ ・ 機器など)に使用されることを目的としています。高い品 質や信頼性が要求され、故障や誤作動が直接人命を脅かし たり人体に危害を及ぼす恐れのある、医療、軍事、航空宇宙、 原子力制御、運輸、移動体、各種安全装置などの機器への 使用は意図も保証もしておりません。 本資料の一部、又は全部を当社の承諾なしで、いかなる形 でも転載又は複製されることは堅くお断りします。 全ての情報は本資料発行時点のものであり、当社は予告な しに本資料に記載した内容を変更することがあります。 本資料の内容は慎重に制作しておりますが、万一記述誤り によってお客様に損害が生じても当社はその責任を負いま せん。 本資料に関してのお問合せ、その他お気付きの点がござい ましたら、 当社ホームページのお問い合わせページ(https:// www.sunhayato.co.jp/inquiry/)よりお問合せください。 本資料に関する最新の情報はサンハヤト株式会社ホーム ページ(http://www.sunhayato.co.jp/)に掲載しております。 Copyright© 2007 Sunhayato Corp. 2007 年 7 月 1 日発行 REV.1.10 SG043253 ホームページ:www.sunhayato.co.jp