yoshiyuki's blog

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

Arduino で I2C / Clock コマンドの使用例と解説

この記事では自作アプリの使い方を説明しています。自作アプリに関しては以下の記事をご参照ください。
ysin1128.hatenablog.com

Windows アプリの「CMD_Multi」タブ、または、Android アプリで Clock コマンドを使用した例を紹介します。

接続

Arduino の GND を、Clock を入力する相手の GND と接続した後に、Arduino の D9 を相手の Clock 入力端子と接続します。特に GND の接続を忘れないように注意してください。

f:id:ysin1128:20200816000113p:plain

コマンド実行例

下図は Clock コマンドの実行例です。下記3個のコマンドを続けて実行しています。

  1. 10 kHz, 50% Duty の Clock を出力する
  2. 1000 ms 待つ (Clock 出力は継続)
  3. Clock を停止する

f:id:ysin1128:20200815153006p:plain

コマンドの概要

c 06 40 03 20

Clock周期 = 100 us (10 kHz), High 幅 = 50 us の Clock を出力します。

c 00 00

Clock 出力を停止します。

コマンドの詳細

c 06 40 03 20

c はこのアプリ専用の Command word で、Clock 出力の操作を行うことを示しています。

06 40 は出力する Clock の周期を指定しています。Clock 周期は Arduino のシステム Clock の周期と、ここで指定した値の掛け算で決まります。Arduino のシステム Clock が 16 MHz の場合、周期は 1 / 16 MHz = 0.0625 us となり、そこに 0x0640 = 1600 を掛けると 100 us となります。よって、Clock 周波数は 1 / 100 us = 10 kHz となります。

03 20 は出力する Clock の High 幅を指定します。これにより Clock の波形は先に指定した 100 us の周期のうち、0.0625 us x (0x0320 = 800) = 50 us の期間は High、残りの 50 us の期間は Low となります。High 幅の指定は省略可能で、省略した場合は自動的に 50% 程度の Duty が設定されます。

f:id:ysin1128:20200815154551p:plain

c 00 00

Clock 周期に 0 を指定すると Clock 出力を停止します。この場合、High 幅の指定は省略でき、もし何らかの値を指定したとしても無視されます。

二つの c コマンドの間に 1000 ms の delay を挟んでいますが、これには特に意味はありません。実行例とはいえ Clock 出力開始直後に停止するのは味気ないと思って出力期間を設けただけのもので、c コマンドにとって必要な要素ではありません。