' ' ********************************************** ' * * ' * AVR & BASCOM-AVR トレーニング・ボード * ' * 初期設定 Ver.1.01 * ' * * ' * AVR is using ATmega88P * ' * Basic Compiler is BASCOM-AVR * ' * Copyright By O-Family 2009. 7.25 * ' ********************************************** ' $regfile = "m88pdef.dat" '使用するAVRを設定。 $crystal = 16000000 'AVRクロックを設定。 ' $hwstack = 64 'ハードウェア・スタックの容量を設定。 $swstack = 8 'ソフトウェア・スタックの容量を設定。 $framesize = 24 'フレーム領域の容量を設定。 ' ' * ポート名の定義 * ' Sw_1 Alias Pind.0 'スイッチ[1]の接続ポート。 Sw_2 Alias Pind.1 'スイッチ[2]の接続ポート。 Sw_3 Alias Pind.2 'スイッチ[3]の接続ポート。 Sw_4 Alias Pind.3 'スイッチ[4]の接続ポート。 ' Led_1r Alias Portd.4 'LED1[赤]の接続ポート。 Led_2g Alias Portd.5 'LED2[緑]の接続ポート。 Led_3y Alias Portd.6 'LED3[黄]の接続ポート。 Led_4b Alias Portd.7 'LED4[青]の接続ポート。 Sp_out Alias Portc.5 'スピーカーの接続ポート。 ' Ad_photo Alias 0 '光センサーのA/Dコンバータ・チャネル番号。 Ad_thermo Alias 1 '温度センサーのA/Dコンバータ・チャネル番号。 Ad_ain1 Alias 2 '測定入力[1]のA/Dコンバータ・チャネル番号。 Ad_ain2 Alias 3 '測定入力[2]のA/Dコンバータ・チャネル番号。 Ad_ain3 Alias 4 '測定入力[3]のA/Dコンバータ・チャネル番号。 Ad_spin Alias 5 'スピーカー入力のA/Dコンバータ・チャネル番号。 ' ' * ポートの初期設定 * ' Config Led_1r = Output 'LED1の接続ポートを出力に設定する。 Config Led_2g = Output 'LED2の接続ポートを出力に設定する。 Config Led_3y = Output 'LED3の接続ポートを出力に設定する。 Config Led_4b = Output 'LED4の接続ポートを出力に設定する。 Config Sp_out = Output 'スピーカーの接続ポートを出力に設定する。 ' Set Portd.0 'スイッチ[1]の接続ポートをプルアップする。 Set Portd.1 'スイッチ[2]の接続ポートをプルアップする。 Set Portd.2 'スイッチ[3]の接続ポートをプルアップする。 Set Portd.3 'スイッチ[4]の接続ポートをプルアップする。 Didr0 = &B00111111 'デジタル入力禁止レジスタの設定。 ' ' * LCDの初期設定 * ' Config Lcdmode = Port 'LCDを4ビットのポートモードに設定。 Config Lcdbus = 4 'LCDデータバスを4bitに設定。 Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 'LCDのポート割り当て。 Config Lcdpin = Pin , Db6 = Portb.1 , Db7 = Portb.0 Config Lcdpin = Pin , E = Portb.4 , Rs = Portb.5 Config Lcd = 16 * 2 'LCD表示を16文字2行に設定。 Cls 'LCD表示をすべて消去。 ' ' * A/Dコンバータの初期設定 * ' Config Adc = Single , Prescaler = Auto , Reference = Avcc 'A/Dコンバータの設定。 Start Adc 'A/Dコンバータに電源を供給。 ' ' ↓********************************************↓ ' ↓ これ以降に各自のプログラムを作成して下さい ↓ ' ↓********************************************↓ ' Cursor Off 'LCDのカーソルをオフにする。 ' ' ************************************************ ' * 1-Wireバス デジタル温度計 DS18B20 * ' * 1個接続時の温度表示 * ' * (Ver.1.01) * ' * Copyright By O-Family 2010. 4.17 * ' ************************************************ ' 1w_dq Alias Portd.0 '1-Wireバスのデータ線[DQ]を接続するポートピン。 ' ' Dim Rxbuff(9) As Byte '受信データを格納する配列。 Dim Temp1 As Byte '汎用テンポラリ変数 Byte型 No.1 Dim Tempi1 As Integer '汎用テンポラリ変数 Integer型 No.1 Dim Templ1 As Long '汎用テンポラリ変数 Long型 No.1 Dim Tempstr As String * 20 '汎用テンポラリ変数 String型 ' ' Config 1wire = 1w_dq '1-Wireバスのデータ線を接続するポートピンを設定。 ' Do 1wreset '1-Wireバスを初期化する。(リセットを送信) If Err = 0 Then 'If デバイスが接続されているか? Then ' 1wwrite &HCC '[SKIP ROM]コマンドを送信する。(シリアル番号の指定をしない) 1wwrite &H44 '[CONVERT T]コマンドを送信する。(温度変換) Config 1w_dq = Output 'データ線の接続ポートを出力に設定する。 Set 1w_dq '1-Wireバスのデータ線を[H]レベルにしてDS18B20に電力を供給する。 Waitms 750 'DS18B20の温度変換の間、待つ。 ' 1wreset '1-Wireバスを初期化する。(リセットを送信) 1wwrite &HCC '[SKIP ROM]コマンドを送信する。(シリアル番号の指定をしない) 1wwrite &HBE '[READ SCRATCHPAD]コマンドを送信する。(温度データ読み込み) Rxbuff(1) = 1wread(9) '温度データを含むDS18B20のメモリー内容を受信する。 ' Temp1 = Crc8(rxbuff(1) , 9) '受信データの9バイトすべてでCRC8を計算する。 If Temp1 = 0 Then 'If CRCエラーが無いか? Then Tempi1 = Makeint(rxbuff(1) , Rxbuff(2)) '2バイトの温度データを1ワードにする。 Templ1 = Tempi1 * 625 'DS18B20の温度分解能を掛ける。(0.0625 X 10000) Templ1 = Templ1 / 1000 '表示用に桁合わせをする。(25.6℃ = 256) ' Tempstr = Str(templ1) '数値変数を文字変数に変換する。 Locate 1 , 1 Lcd "Temp: " ; Format(tempstr , "0.0") ; "゚C " 'LCDに温度を表示する。 Else 'CRCにエラーが有る場合。(複数個の接続時など) Locate 1 , 1 Lcd "- CRC Error. - " End If Else 'デバイスが見つからない場合。 Locate 1 , 1 Lcd "Device not found" End If Loop ' End