書込み済みマイコンプログラム通信コマンド概要

アプリケーションノート
ミニマイコン評価カード 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