2月 092016
 
4. サンプルスクリプトの内容について

ここでは、サンプルスクリプトに記述されている個々スクリプトコマンドについて詳しく見ていきます。

4-1. I2Cバスアクセスの初期設定

I2Cバスアクセスのため以下の設定を行います。

モード設定 I2Cモード
周波数設定 400KHz
電源供給設定 外部電源出力 3.3V
I2C信号線プルアップ設定 SCL, SDAラインプルアップ

◆スクリプト:I2Cバスアクセスの初期設定(1)

ScriptText-0101

ここでは、I2Cバスアクセスの初期設定処理としてモード設定、周波数設定、電源供給設定を行っています。

(1)コメント
【命令】 #
【機能】 行中の[#] 以降はコメント文として取り扱います
【パラメータ】 なし
【説明】 行の先頭に [#] を記述すると、その行はコメント行となります。
また、命令を記述した行の後ろに [#] を記述した場合はそれ以降をコメント文として取扱います。
【記述例】
# Converterモードを設定
MODE=I2C              # I2Cモード

(2)モード指定
【命令・書式】 MODE = x1
【機能】 REX-USB61mk2の動作モードが SPI か I2C かを指定します。
【パラメータ】 x1 動作モード値

値   動作モード
━━ ━━━━━━━━
SPI  SPIモードで動作
I2C  I2Cモードで動作

【説明】 MODE命令にデフォルト設定はなく、動作モード値が指定されていない場合は文法エラーとなります。
設定後は途中でモードを切り替えることはできません。
このため、スクリプトの先頭でモード指定を行う必要があります。
【記述例】
MODE=I2C

I2Cモードでの動作を指定します

(3)周波数

I2Cバスの動作周波数を400KHz に設定します。

【命令・書式】 FREQUENCY = x1
【機能】 使用する周波数を設定します。
【パラメータ】 x1 設定周波数
  SPIモード, I2Cモード別に設定可能な周波数範囲が異なります。

 モード  設定可能周波数
━━━━━ ━━━━━━━
SPIモード  1~50000
I2Cモード  1~5000
【説明】 周波数は 1KHz 単位で設定が可能ですが、実際に設定される周波数は、
REX-USB61mk2内部の周波数計算仕様による近似値となります。
実際に設定される周波数は、設定値を超えない近似値となります。
例)
  16MHzを指定 → 12.5MHz で動作
  17MHzを指定 → 16.66MHz で動作

周波数設定を行わない場合の初期値は下記となります。
モード 初期値
━━━ ━━━
SPI  100KHz
I2C  100KHz

周波数はいつでも変更することができます。
ただし、SPIの場合は「SAMPLING=」「FB=」「SSPOL=」設定の後に、本命令による周波数設定を行ってください。

【記述例】
FREQUENCY=100

周波数100KHzに設定します

(4)デバイス電源供給設定

外部出力電源を3.3Vに設定します。

【命令・書式】 POWER = x1
【機能】 外部出力電源を設定します。
【パラメータ】
x1 出力電圧の設定値
設定値 出力電圧
━━━ ━━━━
 OFF   オフ
 ON1   1.8V
 ON2   2.5V
 ON3   3.3V
 ON5   5.0V
【説明】 パラメータ x1 で設定された電源の出力を行います。
電源はいつでも変更することができます。
電源設定を行わない場合の初期値は「出力OFF」となります。
【記述例】
POWER=ON3

外部電源出力を3.3Vに設定します。

POWER=OFF

外部電源出力をオフ(0V)に設定します。

(5)ウェイトの挿入

電源安定待ちとして1秒ウェイトします。

【命令・書式】 WAIT = x1
【機能】 指定された時間待ちを行います。
【パラメータ】 x1 待ち時間
100ミリ秒単位の時間を1~600の数値で指定します。
【説明】 次の命令を実行する前に指定された時間待ちを行います。
待ち時間は100ミリ秒~60秒までの範囲で100ミリ秒単位で設定できます。
【記述例】
WAIT=20

待ち時間 2秒でウェイトします。

◆スクリプト:I2Cバスアクセスの初期設定(2)

ScriptText-0102
ここでは、I2C信号線プルアップ設定、アドレスモード設定を行っています。

(6)I2C信号線のプルアップ制御

SDA, SCLラインのプルアップを行います。

【命令・書式】 PULLUP = x1
【機能】 SDA, SCL信号線をPull-upするかどうかを指定します。
【パラメータ】 x1 ON または OFF
【記述例】
PULLUP=ON

SDA, SCL信号線をプルアップします。

(7)デバイスアドレスモード設定

アドレスモードに7ビットモードを設定します。

【命令・書式】 ADDRESSMODE = x1
【機能】 I2Cアドレスを7ビットモードか10ビットモードに設定します。
【パラメータ】 x1 アドレスのビットモード値
7 または 10
【記述例】
ADDRESSMODE=7

アドレスモード7ビット

(8)デバイスアドレス設定

デバイスアドレス 50hを指定します。

【命令・書式】 ADDRESS = x1
【機能】 I2Cアドレスを指定します。
【パラメータ】 x1 デバイスアドレス
0 ~ 1023
【説明】 I2Cアドレスを指定します。
アドレスはいつでも変更することが可能ですが、アドレス指定する前に
「READ」や「WRITE」がある場合、文法エラーとなります。
【記述例】
ADDRESS=50h

デバイスアドレス50h

◆スクリプト:RTC-8564NBの初期設定(1)

ScriptText-0201

(9)データ書き込み

WRITEコマンドで00hを書き込んで、コントロールレジスタ1を指定します。

(10)データ書き込み

ビット5のSTOPをONにして時計を停止するため、コントロールレジスタ1に 20h を書き込みます。

(11)データ書き込み

上のWRITE命令に続けてコントロールレジスタ2に00hをセットして割り込みイベントを停止します。

(12)データ書き込み

上のWRITE命令に続けて時計カウンタに31h,25h,16hを書き込んで
31秒、25分、16時の時刻データをセットします。

(13)データ書き込み

上のWRITE命令に続けてカレンダー13h,05h,03h, 15hを書き込んで
13日、金、3月、15年の日付データをセットします。

【命令・書式】 WRITE xxH
WRITE xxH, xxH, …
【機能】 指定されたデータを書き込みます。
【パラメータ】 xxH, xxH, …
書込みデータをバイト単位で指定
【説明】 指定されたデータを書き込みます。
書込みデータが複数ある場合はカンマで区切ります。
【記述例】
WRITE 15h

データ 15h の書込み

WRITE 00h, 01h, 02h, 03h

データ 00h, 01h, 02h, 03h の4バイトの書込み

◆スクリプト:RTC-8564NBの初期設定(2)

ScriptText-0202

アラームを発生させる時刻として13日(金曜日) 16時26分をアラームレジスタに設定します。

(14)データ書き込み

先⑬のカレンダの書き込みに続けてアラームレジスタに 26h,16h,13h, 05h を書き込んで
26分, 16時, 13日(金曜日)のアラーム時刻をセットします。

【命令・書式】 WRITE_AND_STOP xxH
WRITE_AND_STOP xxH, xxH, …
【機能】 指定されたデータを書き込み、最後にSTOPビットを送信します。
【パラメータ】 xxH, xxH, …
書込みデータをバイト単位で指定
【説明】 指定されたデータを書き込み、最後にSTOPビットを送信します。
書込みデータが複数ある場合はカンマで区切ります。
【記述例】
WRITE_AND_STOP 15h

データ 15h を書込み、最後にSTOPビットを送る

WRITE_AND_STOP 00h, 01h, 02h, 03h

データ 00h, 01h, 02h, 03h の4バイトを書込み、最後にSTOPビットを送る

◆スクリプト:DIOポートの設定

ScriptText-0301

(15)DIO入出力設定

DIO端子をすべて入力にするため、すべてのビットに”0″を書き込みます。

【命令・書式】 DIODIR x1
【機能】 DIOの入出力(信号方向)設定を行います。
【パラメータ】 x1 DIOの入出力(信号方向)をレジスタまたはリテラル値で設定
  各ビットがDIO0~DIO7に対応します。
  「0」で入力、「1」で出力になります。
【記述例】
DIODIR 00h

DIO端子をDIO0~DIO7すべてを入力にします。

DIODIR 20h

DIO端子のDIO0~DIO4, DIO6, DIO7 を入力にします。
DIO5 のみ出力にします。

DIODIR R0

DIO端子の入出力をR0レジスタの値で設定します。

(16)DIO入力割込み検出設定

アラーム用割り込み端子をDIO端子の0とするため、[bit0]に”1″を設定します。割り込み発生時に/INT信号がHighからLowに変化するため、割り込み判定条件に”3″をします。

【命令・書式】 DIOINT x1, x2
DIOINT DISABLE
【機能】 DIOの入力ポートの割り込み検出設定を行う。
【パラメータ】 x1, x2

x1 割り込み検出対象ポートをレジスタまたはリテラル値で設定
  各ビットがDIO0~DIO7に対応します。

x2 割り込み判定条件を0~3の値で設定
  値 条件
  0 Lowレベル
  1 Highレベル
  2 Low ⇒ High の変化
  3 High ⇒ Low の変化

【説明】 DIOの入力ポートの割り込み検出設定を行う。
【記述例】
DIOINT 01h, 2

DIO0信号のLow ⇒ High の変化で割り込みが発生するよう設定します。

【パラメータ】 DISABLE
【説明】 DIOの全ポート(DIO0~DIO7)の割り込み検出を無しにします。
DIO割り込みを使用後は、この「DISABLE」を指定して割り込みを禁止にしてください。
【パラメータ】 DISABLE

(17)データの書き込み

コントロールレジスタ1のSTOPビット[bit5]に”0″をセットして停止状態のアラーム動作を再開させます。
コントロールレジスタ2のAIEビット[bit1]に”1″をセットして /INT端子からの”L”レベルの割り込み信号発生を有効にします。
これらのデータ連続して書き込み、最後にSTOPビットを送ります。

◆スクリプト:カウンタの読出し確認

ScriptText-0401

(18)繰り返し処理

続く「 { } 」内に繰り返し実行する読出し処理のスクリプトを記述し、回数に3を指定して繰り返し処理を行います。

【命令・書式】
REPEAT nn
{
proc
}
【機能】 REPEAT命令文の次に書かれた「 { } 」内の命令を指定回数繰り返します。
【パラメータ】 nn リピート回数(1~65536まで)
【説明】 繰り返す範囲は必ず { } で囲んでください。
「 { } 」内に記述できるコード数は本製品の内部バッファサイズにより制限があります。
REPEATのネストは不可です。
リピートブロックに、DO ~ WHILE、ダイアログ命令を入れることはできません。
なお、本命令は本製品の内部バッファサイズにより制限があるため、過重なループになる記述は禁止します。
【記述例】
REPEAT  5
{
    DIOSET=02h
    WAIT = 10
}

DIO出力ポートへ 02h を出力する処理を1秒間隔で5回繰り返します。

(19)データ読出し

時計カウンタおよびカレンダカウンタの読み出し。
時を刻んでいるかを確認するために秒・分・時・日・曜日・月・年の7バイトを読み出す。

【命令・書式】 READ_AND_STOP (LENGTH=)nn
READ_AND_STOP (LENGTH=)nn, FILEn
【機能】 指定されたバイト数分データを読み出し、最後にSTOPビットを送信します。
【パラメータ】 nn 読み出すバイト数を指定する。(1~65536まで)

FILEn 入力データを保存するファイルを指定する

【説明】 FILEを指定した場合は、指定ファイルにバイナリデータで保存します。
既存のファイルが指定された場合は追加書き込みされていきます。
【記述例】
READ_AND_STOP 15

データ 15 バイトを読み込み、最後にSTOPビットを送る

READ_AND_STOP 256, FILE1

データ 256 バイトを読み込み、最後にSTOPビットを送ります。
読み込んだデータは、FILE1 に保存されます。

◆スクリプト:アラーム通知の検出

ScriptText-0501

(20)割込み検出待ち

タイムアウト60秒でアラーム割り込みを待ちます。
割り込み検知結果がR0レジスタにセットされます。

【命令・書式】 WAITINT = x1, Rn
【機能】 DIOINTで指定した条件で割り込みを検知するまで待つ
【パラメータ】 x1 タイムアウトの時間を1ミリ秒単位で指定する。
  「0」を指定した場合は、タイムアウトなしとする。
Rn 割り込み検知結果が通知されるレジスタを指定する。
  レジスタには以下の値がセットされる。
  値  意味
   0  割り込み発生
   1  タイムアウト発生
【説明】 DIO割り込み使用後は、DIOINT指定で 割り込み禁止(DISABLE)にすること。
【記述例】
WAITINT 60000, R0

割り込みが発生するまで 60秒待ち、割り込み検知結果をR0 レジスタに通知します。

(21)OKダイアログ表示

アラーム割り込みが発生したダイアログを表示します。

【命令・書式】 MSGOK “message”, Rn
【機能】 OKダイアログを表示する。
【パラメータ】 “message” ダイアログに表示する文字列(省略可能)

Rn 表示するレジスタ(省略可能)
  ”message”で指定した文字列に続けて表示するレジスタを指定する。

【説明】 OKを押下するまで実行が一時停止します。
パラメータ “message”を省略した場合は、レジスタ値のみが表示されます。
【記述例】
MSGOK ”確認してください”, R0

「確認してください」に続けてR0 レジスタの値を表示して停止します。

◆スクリプト:終了処理

ScriptText-0601

(22)外部電源オフ

スクリプトを終了する前に、デバイスへ供給している外部電源出力をオフ(0V)にします。

(23)スクリプト終了

スクリプトの実行を終了します。

【命令・書式】 END
【機能】 処理を終了します
【パラメータ】 なし

 
以上でサンプルスクリプトの説明は終わりです。

今回は、実際にI2CデバイスとしてRTC-8564NBを接続し、サンプルスクリプトを使って制御する例について紹介しました。


関連記事
SPI/I2C Serial EEPROMへのアクセスを簡単に(その1)
SPI/I2C Serial EEPROMへのアクセスを簡単に(その2)
SPI/I2C Serial EEPROMへのアクセスを簡単に(その3)
SPI/I2C Serial EEPROMへのアクセスを簡単に(その4)
SPI/I2C Serial EEPROMへのアクセスを簡単に(その5)

I2C RTCデバイスにアクセスする
I2C気圧センサーにアクセスする

機能が大幅に強化されたSPI/I2Cプロトコル・エミュレータが新登場!!!
REX-USB61mk2で強化された機能(その1)
REX-USB61mk2で強化された機能(その2)
REX-USB61mk2で強化された機能(その3)

REX-UBS61mk2の新機能 レジスタ設定ツール(その1)
REX-UBS61mk2の新機能 レジスタ設定ツール(その2)
REX-USB61mk2の新機能 EEPROM書込みユーティリティ


この記事で紹介した製品

REX-USB61mk2製品画像
REX-USB61mk2 - USB-SPI/I2Cプロトコル・エミュレーター(ハイグレードモデル)

REX-USB61製品画像
REX-USB61 - USB-SPI/I2Cプロトコル・エミュレーター

 返信する

以下のHTML タグと属性が利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必須)

(必須)

*