■ BASCOM-AVR (DEMO) の使用方法 ■
命令文のリファレンスマニュアル 使用方法のページへ戻る
1-Wire デバイスを制御する命令
CONFIG 1WIRE 1-Wireバスの、データ線を接続するポートピンを設定します。
1WRESET 1-Wireバスの初期化のために、バスにリセットパルスを送ります。
1WWRITE 1-Wireバスに、データを送信します。
1WREAD 1-Wireバスから、データを受信します。
1WSEARCHFIRST 1-Wireバスに存在する、デバイスのシリアル番号を検索します。 (初回時に使用)
1WSEARCHNEXT 1-Wireバスに存在する、デバイスのシリアル番号を検索します。 (2つめ以降に使用)
1WIRECOUNT 1-Wireバスに存在する、デバイスの数を取得します。
1WVERIFY 1-Wireバスで、指定されたシリアル番号のデバイスが使用できるかを確認します。
CRC8 配列 または 変数の、CRC8値(巡回冗長検査)を計算します。



CONFIG 1WIRE 一覧へ戻る
1-Wireバスの、データ線を接続するポートピンを設定します。

書式 Config 1wire = PORTX.b [ , Extended = 1]
注釈
X ポートの名前。 ( A , B , C , D , E , F , G )
b ピンの番号。 ( 0 〜 7 )
Extended = 1  複数のポートで1-Wireバスを使用する場合のオプション。

参照 1WRESET , 1WWRITE , 1WREAD , 1WSEARCHFIRST , 1WSEARCHNEXT

 
・コンパイラの[Options]→[Compiler]→[I2C]からも設定が可能ですが、この命令が優先されます。
・この命令で、指定されたポートピンは適切に入出力が設定されるので、ユーザーが事前にポート
 設定をする必要はありません。
・1-Wireバスのデータ線は、4.7KΩの抵抗器でプルアップして下さい。
 (AVR内部プルアップでは、容量不足です)
 
・複数の1-Wireバスを使う場合、2つめからのポートピン設定は、各1-Wireコマンド(下記)の後に
 オプションで指定します。
・[Extended = 1] オプションは、複数の1-Wireバスを使用する場合で、別ポート(PortAとPortBなど)に
 渡る場合に指定して下さい。
 (プログラムのコードが大きくなるので、できるだけ同一ポート内での使用が推奨されます)
 
(例) デバイスのシリアル番号を読み出す。(バス上にデバイスが1つだけの場合)
Dim Idbuff(8) As Byte ' デバイスのシリアル番号を格納する配列。(8byte以上)
Dim Temp1 As Byte ' 汎用テンポラリ変数 Byte型 No.1
Config 1wire = Portd.0 ' 1-Wireバスのデータ線を接続するポートピンを設定。
1wreset ' バスのリセット処理。
Locate 1 , 1 ' リセットに対するエラーを表示する。
Lcd "Error=" ; Err ' (Errはエラー状態を格納する内部変数 0:なし , 1:あり)
1wwrite &H33 ' [READ ROM] コマンドを発行する。
Idbuff(1) = 1wread(8) ' デバイスのシリアル番号(8byte)を受信する。
Locate 2 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 1 To 8 '
Lcd Hex(idbuff(temp1)); '
Next Temp1 '
End '



1WRESET 一覧へ戻る
1-Wireバスの初期化のために、バスにリセットパルスを送ります。

書式 1wreset
1wreset ,
Port , Pin
1-Wireバスが、1つの場合。
1-Wireバスを、複数使用する場合。
注釈
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WWRITE , 1WREAD

 
・マスターは、各コマンド処理の前に、必ずこの「1WRESET」命令で、バスの初期化をしなければ
 なりません。 (1-Wireバスのリセット・パルスが出されます)
・リセット・パルスに対応して、デバイスは「存在パルス」を返します。
・デバイスが接続されていない等のエラーが発生した場合は、エラー状態を格納する内部変数「Err」に、
 エラーなし = 0 、エラーあり = 1 が入ります。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)
 
(例) デバイスのシリアル番号を読み出す。(複数のポートで1-Wireバスを使用する場合)
Dim Idbuff(8) As Byte ' デバイスのシリアル番号を格納する配列。(8byte以上)
Dim Temp1 As Byte ' 汎用テンポラリ変数 Byte型 No.1
1wreset Pind , 0 ' バス(1)のリセット処理。
1wwrite &H33 , 1 , Pind , 0 ' バス(1)に[READ ROM] コマンドを発行する。
Idbuff(1) = 1wread(8 , Pind , 0) ' デバイス(1)のシリアル番号(8byte)を受信する。
Locate 1 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 1 To 8 '
Lcd Hex(idbuff(temp1)); '
Next Temp1 '
' '
1wreset Pind , 1 ' バス(2)のリセット処理。
1wwrite &H33 , 1 , Pind , 1 ' バス(2)に[READ ROM] コマンドを発行する。
Idbuff(1) = 1wread(8 , Pind , 1) ' デバイス(2)のシリアル番号(8byte)を受信する。
Locate 2 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 1 To 8 '
Lcd Hex(idbuff(temp1)); ''
Next Temp1 '
End '



1WWRITE 一覧へ戻る
1-Wireバスに、データを送信します。

書式 1wwrite variable
1wwrite variable , length
1wwrite
variable , length , Port , Pin
1-Wireバスが、1つの場合。
(同上)送信バイト数を指定する場合。
1-Wireバスを、複数使用する場合。
注釈
variable 送信するデータ。 (定数 または バイト型変数)
length 送信するバイト数。 (配列データを使用時)
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WRESET , 1WREAD

 
・マスターがデバイスに、コマンドやデータを送信します。
・コマンドの場合は1バイト、データの場合は配列に格納した値を、バイト数を指定して送信できます。
・デバイスが接続されていない等のエラーが発生した場合は、エラー状態を格納する内部変数「Err」に、
 エラーなし = 0 、エラーあり = 1 が入ります。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。 (lengthの記述は、必ず必要です(1byteでも))
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)

(例) CONFIG 1WIRE ・ 1WRESET命令を参照。



1WREAD 一覧へ戻る
1-Wireバスから、データを受信します。

書式 variable = 1wread(length)
variable = 1wread(length , Port , Pin)
1-Wireバスが、1つの場合。
1-Wireバスを、複数使用する場合。
注釈
variable 受信したデータを入れる変数。 (バイト型変数)
length 受信するバイト数。 (配列を使用時)
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WRESET , 1WWRITE , CRC8

 
・マスターがデバイスから、データを受信します。
・データは、1バイト または 配列にバイト数を指定して受信できます。
・デバイスが接続されていない等のエラーが発生した場合は、エラー状態を格納する内部変数「Err」に、
 エラーなし = 0 、エラーあり = 1 が入ります。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。 (lengthの記述は、必ず必要です(1byteでも))
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)

(例) CONFIG 1WIRE ・ 1WRESET命令を参照。



1WSEARCHFIRST 一覧へ戻る
1-Wireバスに存在する、デバイスのシリアル番号を検索します。 (初回時に使用する命令)

書式 variable = 1wsearchfirst()
variable = 1wsearchfirst(Port , Pin)
1-Wireバスが、1つの場合。
1-Wireバスを、複数使用する場合。
注釈
variable 検索したシリアル番号を入れる配列変数。 (バイト型 [8byte])
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WSEARCHNEXT , 1WVERIFY , CRC8

 
・デバイスの検索をする場合、まず始めに1WSEARCHFIRST命令を使用します。
・バス上に2つ以上のデバイスがある場合は、2つめから1WSEARCHNEXT命令を使用して下さい。
 
・シリアル番号を格納する変数は8バイト以上必要なので、配列を宣言しておきます。
・文字変数には格納できません。 (ヌル[00]が、文字列の終了コードのため)
・デバイスが見つからない等のエラーが発生した場合は、エラー状態を格納する内部変数「Err」に、
 エラーなし = 0 、エラーあり = 1 が入ります。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)
 
(例) デバイスのシリアル番号を調べる。 (バス上にデバイスが2つ以上の場合)
Dim Idbuff(16) As Byte ' デバイスのシリアル番号を格納する配列。(8byte以上)
Dim Temp1 As Byte ' 汎用テンポラリ変数 Byte型 No.1
Dim Tempw1 As Word ' 汎用テンポラリ変数 Word型 No.1
Config 1wire = Portd.0 ' 1-Wireバスのデータ線を接続するポートピンを設定。
Idbuff(1) = 1wsearchfirst() ' 最初にシリアル番号を検索する。
Locate 1 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 1 To 8 '
Lcd Hex(idbuff(temp1)); '
Next Temp1 '
' '
Do ' 繰り返し。
Idbuff(9) = 1wsearchnext() ' 次のシリアル番号を検索する。
If Err = 0 Then ' デバイスが見つかったか?
Locate 2 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 9 To 16 '
Lcd Hex(idbuff(temp1)); '
Next Temp1 '
End If '
Loop Until Err = 1 ' もうデバイスが見つからない場合には、Err = 1 になる。
' '
Tempw1 = 1wirecount() ' デバイスの総数を調べる。
End '



1WSEARCHNEXT 一覧へ戻る
1-Wireバスに存在する、デバイスのシリアル番号を検索します。 (2つめ以降に使用)

書式 variable = 1wsearchnext()
variable = 1wsearchnext(Port , Pin)
1-Wireバスが、1つの場合。
1-Wireバスを、複数使用する場合。
注釈
variable 検索したシリアル番号を入れる配列変数。 (バイト型 [8byte])
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WSEARCHFIRST , 1WIRECOUNT , 1WVERIFY , CRC8

 
・デバイスの検索をする場合、まず始めに1WSEARCHFIRST命令を使用して下さい。
・バス上に2つ以上のデバイスがある場合は、2つめから1WSEARCHNEXT命令を使用します。
 
・シリアル番号を格納する変数は8バイト以上必要なので、配列を宣言しておきます。
・文字変数には格納できません。 (ヌル[00]が、文字列の終了コードのため)
・デバイスが見つからない等のエラーが発生した場合は、エラー状態を格納する内部変数「Err」に、
 エラーなし = 0 、エラーあり = 1 が入ります。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)

(例) 1WSEARCHFIRST命令を参照。



1WIRECOUNT 一覧へ戻る
1-Wireバスに存在する、デバイスの数を取得します。

書式 variable = 1wirecount()
variable = 1wirecount(Port , Pin)
1-Wireバスが、1つの場合。
1-Wireバスを、複数使用する場合。
注釈
variable デバイスの数を入れる変数。 (ワード型変数)
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WSEARCHFIRST , 1WSEARCHNEXT

 
・デバイスのシリアル番号を検索する、1WSEARCHFIRST 並びに 1WSEARCHNEXT命令を実行
 する前に、接続されているデバイスの個数を調べることができます。
・デバイスの数を入れる変数は、ワード または インテジャー型でなければなりません。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)
 
(例) 接続されているデバイスの個数を調べる。
Dim Tempw1 As Word ' 汎用テンポラリ変数 Word型 No.1
Config 1wire = Portd.0 ' 1-Wireバスのデータ線を接続するポートピンを設定。
Tempw1 = 1wirecount() ' デバイスの総数を調べる。
Locate 1 , 1 ' LCDにデバイスの個数を表示する。
Lcd Tempw1 '
End '



1WVERIFY 一覧へ戻る
1-Wireバスで、指定されたシリアル番号のデバイスが使用できるかを確認します。

書式 1wverify variable
1wverify variable , Port , Pin
1-Wireバスが、1つの場合。
1-Wireバスを、複数使用する場合。
注釈
variable 確認するシリアル番号が入った配列変数。 (バイト型 [8byte])
Port ポートの名前。 ( Pina , Pinb , Pinc など)
Pin ピンの番号。 ( 0 〜 7 ) (定数 または 数値変数)

参照 CONFIG 1WIRE , 1WSEARCHFIRST , 1WSEARCHNEXT

 
・1-Wireバス上に、指定したシリアル番号のデバイスが存在した場合は、内部変数「Err」に [0] が入り、
 見つからない場合には [1] が入ります。
 
・複数の1-Wireバスを使用する場合は、2つめからのポートピン設定を、各1-Wireコマンドの後に
 オプションで指定します。
・この場合、ポート名は入力ポート名「Pina , Pinb , Pinc など」となりますので注意して下さい。
・「CONFIG 1WIRE」命令を使用せずに、すべての各1-Wireコマンドの後に、ポートピン設定を記述する
 方法も可能です。 (同一ポート内に限定)
 
(例) 指定したシリアル番号が使用できるかを確認する。
Dim Idbuff(8) As Byte ' デバイスのシリアル番号を格納する配列。(8byte以上)
Dim Temp1 As Byte ' 汎用テンポラリ変数 Byte型 No.1
Config 1wire = Portd.0 ' 1-Wireバスのデータ線を接続するポートピンを設定。
Idbuff(1) = 1wsearchfirst() ' 最初にシリアル番号を検索する。
Locate 1 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 1 To 8 '
Lcd Hex(idbuff(temp1)); '
Next Temp1 '
' '
1wverify Idbuff(1) ' 指定したシリアル番号が使用できるかを確認する。
Locate 2 , 1 ' デバイスの状態を表示する。
Lcd Err
End '



CRC8 一覧へ戻る
配列 または 変数の、CRC8値(巡回冗長検査)を計算します。 (CRC8-Maxim/Dallas)

書式 variable = Crc8(source , length)
注釈
variable CRC8の計算結果を入れる変数。 (バイト型)
source CRC8を計算する配列 または 変数。 (配列の添字はデータの先頭)
length CRC8を計算するバイト数。

参照 CONFIG 1WIRE , 1WSEARCHFIRST , 1WSEARCHNEXT , 1WREAD

 
・1-Wireバスで使用されるデバイスのシリアル番号は、最後のバイトがCRCバイトになっています。
・これにより、受信したデータに誤りがないかを検査します。
・CRC8の計算は「Maxim/Dallas」式で、下記の計算式で求められます。
   CRC = X8 + X5 + X4 + 1
 
・8バイトのシリアル番号では、先頭から7バイトを上記の式で計算し、8バイト目にその結果が添えられ
 ます。
・検査方法は、受信したデータの先頭から7バイトでCRC8を計算し、8バイト目と一致しているかを照合
 するか、8バイト全てのCEC8を計算し、結果が0になっているかを確認します。
・検査の結果に異常がある場合は、再度シリアル番号を要求するようにプログラムを作成します。
 
(例) 受信したシリアル番号に、エラーがないかを確認する。
Dim Idbuff(8) As Byte ' デバイスのシリアル番号を格納する配列。(8byte以上)
Dim Temp1 As Byte ' 汎用テンポラリ変数 Byte型 No.1
Config 1wire = Portd.0 ' 1-Wireバスのデータ線を接続するポートピンを設定。
Idbuff(1) = 1wsearchfirst() ' 最初にシリアル番号を検索する。
Locate 1 , 1 ' LCDにシリアル番号を表示する。
For Temp1 = 1 To 8 '
Lcd Hex(idbuff(temp1)); '
Next Temp1 '
' '
Temp1 = Crc8(idbuff(1) , 7) ' シリアル番号の先頭から7バイトでCRC8を計算する。
Locate 2 , 1 ' LCDに計算結果を表示する。
Lcd Hex(temp1) ' (シリアル番号の8バイト目と一致すれば異常なし)
' '
Temp1 = Crc8(idbuff(1) , 8) ' シリアル番号の8バイトすべてでCRC8を計算する。
Locate 2 , 5 ' LCDに計算結果を表示する。
Lcd Hex(temp1) ' (結果が0ならば異常なし)
End '





   電子工作の部屋 Top へ 前のページへ戻る