こんにちは、hayashiです。
今回は「HM-StarterKitの購入~迷路完走まで」の第8回、内容は「step4 I2Cによるスイッチの動作確認」になります。今回もサンプルプログラムの動作確認になります。
マニュアルの確認
ダウンロードカードのURLからアクセスできる、「HM-StarterKit_パート3_取扱説明書_ソフトウェア解説編」を確認します。
※マニュアルのダウンロードページを開くにはHM-StarterKitに同梱されているダウンロードカードに記載のパスワードが必要になります。
今回はI2Cによるスイッチのサンプル動作確認なので、「1.ソフトウェアの解説/1.4 Step4 I2CとIO」に今回の内容が書いてあります。
概要としまして、「I2Cを用いてIOエキスパンダと通信することで、4つのLEDと3つのスイッチを制御する。」と書かれています。
今回は3つのスイッチに関しての内容になります。
プログラムのビルドと書き込み
今回使用するサンプルは「step4_i2c_io」になります。
ビルド方法や書き込み方法は今までのサンプルと同様になります。前回までの連載で解説されていますので、参考にしてください。
動作確認
書き込みが完了したら、電源スイッチを「OFF」にします。
今回はPC上で確認を行うため、書き込みケーブルは外さずに、書き込み基板のスイッチを「run」側に変更します。
この状態で、本体の電源スイッチを「ON」にします。
本体と「run」状態になった書き込み基板とPCが繋がっていることを確認して下さい。問題なければ、PCで「TeraTarm」を起動します。TeraTermが起動すると”switch=0x0”と表示されます。
この状態で準備完了です。
本体のスイッチ(画像青枠)をそれぞれ押すとそれぞれ出力が変化して、TeraTerm上の値が変化します。
SW2を押した場合のTeraTermの出力は下の画像のように「switch= 0x40」と表示されます。
これでstep4_i2c_ioのスイッチの動作確認は完了です。
プログラムの解説、補足
今回使用しているI2Cによる通信は前回でも解説がされていますので、ご覧ください。
スイッチを使用する
i2c.cのプロジェクトをインポートして、ソースファイル内で以下の定義をします。
extern void init_I2C(void); extern void IOex_SWITCH(void); extern void IOex_SETTING(void); extern void IOex_LED(short led_num);
ダウンロードできる、サンプルプログラムが正しい定義になっています。
マニュアルに記載されているスイッチの定義は間違っていますので注意してください。
I2C初期設定後の話
スイッチが押されたかを判断するには、IOex_SWITCH()を呼び出します。
どのスイッチが押されたかは以下の対応になっています。
押されたスイッチは「1」で表されていて、複数のスイッチを同時に押した場合、押されているスイッチが全て反映された出力となります。
出力が「0x30」は、SW3とSW4のスイッチが同時に押された状態となります。
出力 | SW2 | SW3 | SW4 |
---|---|---|---|
0x10 | 0 | 0 | 1 |
0x20 | 0 | 1 | 0 |
0x30 | 0 | 1 | 1 |
0x40 | 1 | 0 | 0 |
IOex_SWITCH()の中身では、マイコンのI2C通信の機能とI2CエキスパンダICがやり取りをしています。
今回の動作で主に扱っているマイコンの機能はハードウェアマニュアルの以下を参考にしてください
- I2C バスモードレジスタ3 ICMR3 (p1496)
- I2C バスステータスレジスタ2 ICSR2 (p1507)
- I2C バス受信データレジスタ ICDRR (p1516)
I2C_PUT()などのビット演算は、I2Cエキスパンダのデータ形式になるように作られています。
データ形式の詳細は、ICマニュアルのp20 8.4.2 Readsを参考にしてください。
まとめ
- HM-StarterKitのサンプルプログラム 「step4_i2c_io」でスイッチの動作確認を行いました。
お知らせ
手のひらサイズのマイクロマウスキット「HM-StarterKit」
33%OFFの特別価格で販売中!
製品ページはこちら

アールティロボットショップで購入する
また、6月10日(木)からは学生マイクロマウスサークルを対象としたプレゼントキャンペーンを開催予定です!詳細をお楽しみに!
今回の内容は以上になります。
特別連載が続きますので、次の内容もぜひご覧ください。