yoshiyuki's blog

Arduino/Teensy/Raspberry pi pico を利用した I2C, SPI 通信アプリを紹介します

Arduino で I2C / Windowsアプリの使い方

ファームウェアを書き込んだ Arduino / Teensy / Raspberry Pi Pico / MAX32625PICO を Windows PC から操作します。

Windows アプリ (Ver. 0.70 以降) を使用するためには .NET Framework 4.8以降のインストールが必要です。

 

また、このアプリは証明書なんて気の利いたものを持っていないので起動時に Windows から警告を受ける場合があります。以下の警告ウィンドウが表示された場合は赤丸で示した「詳細情報」をクリックして、表示される「実行」ボタンをクリックしてください。

 

f:id:ysin1128:20200924151039p:plain

 

ACTRL をダウンロードする

Vector ソフトウェアライブラリ から ACTRL をダウンロードします。

www.vector.co.jp

 

ACTRL を起動する

1. ファームウェアを書き込んだ Arduino / Teensy / Raspberry Pi Pico / MAX32625PICO(以下、マイコンボードと表記) と PC を USBケーブルで接続する

 

2. マイコンボードが接続された COMポート番号を確認する

ver. 0.80 以降では不要になりました。

 

3. ACTRL を起動する

ダウンロードした zip ファイルを解凍して、その中の「A_CTRL.exe」を実行します。

このアプリは証明書を持っていないため、この時にWindows から警告を受ける場合があります。以下の警告ウィンドウが表示された場合は赤丸で示した「詳細情報」をクリックして、表示される「実行」ボタンをクリックしてください。

 

f:id:ysin1128:20200924151039p:plain

 

起動に成功するとメイン画面が表示されます。

f:id:ysin1128:20200307144007p:plain

メイン画面

4. COMポート番号を指定する

ver. 0.80 以降では不要になりました。

 

5. 「Start」ボタンをクリックする

「Start」ボタンをクリックするとアプリがマイコンボードを探します。マイコンボードを見付けて、ファームが適切であれば「Start」ボタン横に青文字で接続されたマイコンボードの名前が表示され、各タブが使用可能になります。

f:id:ysin1128:20200307152320p:plain

「Start」成功

 

ACTRL の基本的な使い方

 

「CMD」「CDM_Multi」タブ:

コマンドを使用して I2C, SPI, GPIO を操作します。

 

「I2C」タブ:

I2C を操作します。

Data には Hex表記を半角スペースで区切ったものを記入します。

 

「GPIO」タブ:

GPIO を操作します。

 

「GPIO_Multi」タブ:

GPIO でパターンを生成する場合に使用します。Input には Hex表記を半角スペースで区切ったものを記入します。Input に記入したものは 8. GPIO の B2, B3, ... に相当します。

 

「SPI」タブ:

SPI を操作します。

Command Input には Hex表記を半角スペースで区切ったものを記入します。

 

「Clock」タブ:

Clock 出力を操作します。

 

「UART」タブ:

UART を操作します。

 

「Logger」タブ:

Logger を起動します。

 

「CMD」「CMD_Multi」タブ

コマンドを使用して I2C, SPI 他、全ての機能を操作します。コマンドに関しては以下の記事で説明します。

ysin1128.hatenablog.com

 

「I2C」タブ

7-bit Slave Address = 0x24 の Register Address 0x00 から 0x0F までの値の Read を行う手順は以下の通りです。

  1. 「7-bit Slave Address」の入力欄に「24」を入力
  2. 「Mode」の「Read」を選択
  3. 「REG Adr/Data」の入力欄に「00」を入力
  4. 「Read Data Length」の値に「16」を入力
  5. 「Start」をクリック

f:id:ysin1128:20200817162330p:plain

 

Slave Address は 8-bit の値ではなく 7-bit の値で入力する点に注意してください。この例の 0x24 は 8-bit Address の 0x48 = 0100_1000 / 0x49 = 0100_1001 から R/W を示す最後の 1-bit を除いた残りの 0100_100 = 010_0100 = 0x24 です。

読み出す範囲を Register Address = 0x08 から 0x0B とする場合は「REG Adr/Data」と「Read Data Length」の入力を変更します。

 

f:id:ysin1128:20200817163517p:plain

 

7-bit Slave Address = 0x24 の Register Address 0x08, 0x09 にそれぞれ 0x12, 0x34 の値の Write を行う手順は以下の通りです。

  1. 「7-bit Slave Address」の入力欄に「24」を入力
  2. 「Mode」の「Write」を選択
  3. 「REG Adr/Data」の入力欄に「08 12 34」を入力
  4. 「Read Data Length」は Write mode には影響しないので放置
  5. 「Start」をクリック

f:id:ysin1128:20200817163817p:plain

 

Write mode では「REG Adr/Data」の入力欄に Write を行う Register Address と書き込む値の両方を入力します。書き込み後に Read を行うと Register Address = 0x08, 0x09 の値が書き込んだ値に変更されたことが確認できます。

 

f:id:ysin1128:20200817164231p:plain

 

ver. 0.80 以降では下部に I2C Search と I2C Bus Clear のコマンド実行用のボタンを追加しています。I2C Search ボタンでは Slave address = 0x08 から 0x77 の範囲で応答するデバイスがいるかどうかを確認します。

 

 

「GPIO_Multi」タブ

 

D2 から 500 Hz で High/Low を 4回、D3 から 250 Hz で High/Low を2回出力する手順は以下の通りです。

  1. 「Bit Width」の入力欄に「1」を入力
  2. 「Input」の入力欄に「00 01 02 03 00 01 02 03」を入力し、Enter キーを押す
  3. Enter キーを押すと「View and Edit」に、「Input」への入力を反映したパターンが表示される
  4. 「Start」をクリック

f:id:ysin1128:20200817172325p:plain

 

ちなみに、パターンは「View and Edit」を直接変更することで編集が可能です。下図では「View and Edit」の D4_BIN の値を変更して 125 Hz で Hgih/Low を1回出力するパターンを追加しています。「View and Edit」を編集した結果は「Input」の値にも反映されます。

 

f:id:ysin1128:20200817172844p:plain

 

「Start」をクリックすると「View and Edit」を下へスクロールさせたところに、パターン出力時に D2-D7 と A0, A1 が検出した値が表示されます。下図では Arduino 上で D2 を D6 に、D3 を D7 にそれぞれ接続して「Start」をクリックしたので D2 と D6, D3 と D7 でそれぞれ同じ値が検出されています。

 

f:id:ysin1128:20200817173147p:plain

 

右下の「OFF」ボタンをクリックするとボタンの表示が「ON」になり、この時、D2-D5 からは先に出力したパターンが繰り返し出力されます。この例では D2, D3, D4 からそれぞれ 500 Hz, 250 Hz, 125 Hz のクロックが延々と出力され続けます。D5 は Low のままです。

 

f:id:ysin1128:20200817173335p:plain

 

繰り返し回数を、例えば10回に限定したい場合は「Repeat GPO Output」の入力欄に「10」を入力した後に「OFF」ボタンをクリックして「ON」にしてください。

 

「SPI」タブ

 

SPI において MSB First,Mode 0, SCK = 8 MHz で 0x96, 0xA3, 0x11, 0x00, 0x23 の 5-byte の値を送信する手順は以下の通りです。

  1. 「Bit Order」のプルダウンから「MSB First」を選択する
  2. 「Clock」のプルダウンから「8000kHz」を選択する
  3. 「SPI Mode」のプルダウン「Mode 0」を選択する
  4. 「Command Input」の記入欄に「96 A3 11 00 23」を記入して Enterキーを押す

f:id:ysin1128:20200817173830p:plain

 

「Output」には「Command Input」の各値 (byte) の送信と同時に受信した値が表示されます。この例では 5-byte を送信しているので、受信した値も 5-byte となります。受信した値が全て 0x00 になっているのは D12 (MISO) に何も接続していない (入力が無い) 状態で受信が行われたためです。

 

「Clock」タブ

 

100 kHz, 25 % duty の Clock を出力する手順は以下の通りです。

  1. 「Period」の入力欄に「160」を入力
  2. 「High Width」の入力欄に「40」を入力
  3. 左上の「OFF」ボタンをクリックしてボタンの表示を「ON」にする

f:id:ysin1128:20200818130346p:plain

 

Period (Clock周期) と High Width (High幅) の関係は下図をご参照ください。

 

f:id:ysin1128:20200815154551p:plain

 

「UART」タブ (Tennsy 4.0, Raspberry Pi Pico, MAX32625PIC)

 

Data 長 = 8-bit, Stop bit = 1-bit, Parity bit = Even parity で 0x79, 0x00 の 2-byte の値を送信し、その後に 4-byte の値を受信する手順は以下の通りです。

 

  1. Data 長は Default で 8-bit なので設定不要
  2. 「Stop bit」のプルダウンから「1-bit」を選択する
  3. 「Parity」のプルダウンから「Even Parity」を選択する
  4. 「Read Data Length」の入力欄に「4」を入力する
  5. 「Command Input」の記入欄に「79 00」を記入して Enter キーを押す

 

 

「Output」には受信した 4-byte の値が表示されます。データを受信できなかった場合は 00 または FF が表示されます。

「Read Data Length」に「0」を記入した場合はデータ受信を行わず、「Output」には「Succeeded」が表示されます。

 

「Logger」タブ (Tennsy 4.0, Raspberry Pi Pico)

 

「Logger」タブの「Start Logger」をクリックすると Logger Window が開きます。

 

 

Logger の使い方は以下の通りです。

  1. 「Start Logging」をクリックすると L3/L2/L1/L0 がデータ取得を開始します
  2. L3/L2/L1/L0 に入力された値が High/Low 間を遷移するごとにデータを取得、保存します
  3. 「Stop Logging and Show result」(「Start Logging」ボタンの表示文字が変わったもの) をクリックすると取得したデータを波形で表示します

 

 

Logger の概要は以下の通りです。

  • Sampling rate は 4 MHz (0.25 us 周期) です
  • L3/L2/L1/L0 に入力された信号の High/Low 間遷移を1回の Event として取得します
  • 最大で 4096 event を取得します
  • 4096 event を取得すると、以降に発生する Event は無視されます
  • 4096 event を取得しても通知は無く、波形も「Stop Logging and Show result」をクリックするまでは表示されません
  • 「Start Logging」をクリックしてデータ取得を開始した後、最初に Event を取得した時点を起点 (t = 0) として時間をカウントします