$prog &HFF , &H6A , &HFF , &H00 'ヒューズ設定。(工場出荷状態) ' ' ********************************************** ' * * ' * LED 卓上ライト (FSLPセンサー) * ' * * ' * AVR is using ATtiny13A * ' * Basic Compiler is BASCOM-AVR * ' * Copyright By O-Family 2013. 2.10 * ' ********************************************** ' ' Ver 00.01 テスト・バージョン。 2012.10.26 ' Ver 01.01 初回公開バージョン。 2013. 2.10 ' ' ' * 動作の設定 * ' Const Offpressure = 20 '電源をOFFにするセンサーの圧力値。(弱い:10 〜 強い:40) $regfile = "ATtiny13.DAT" '使用するAVRを設定。 $crystal = 1200000 'AVRクロックを設定。 ' $hwstack = 32 'ハードウェア・スタックの容量を設定。 $swstack = 8 'ソフトウェア・スタックの容量を設定。 $framesize = 8 'フレーム領域の容量を設定。 ' ' * ポート名の定義 * ' Fslp_1 Alias Portb.4 'センサーの端子[1]接続ポート。 Fslp_2 Alias Portb.3 'センサーの端子[2]接続ポート。 Fslp_3 Alias Portb.2 'センサーの端子[3]接続ポート。 Fslp_r Alias Portb.1 '抵抗器接続ポート。 ' Fslp_ad1 Alias 2 'センサーの端子[1]のA/Dチャネル番号。 Fslp_ad3 Alias 1 'センサーの端子[3]のA/Dチャネル番号。 ' ' * 変数の宣言 * ' Dim Ledset As Byte 'LEDの輝度設定値。 Dim Ledout As Byte 'LEDの輝度出力値。 Dim Timebright As Word '輝度変更時間用タイマー。 Dim Ledonf As Byte 'LEDのON/OFF状態フラグ。 Dim Fslpoff As Byte 'FSLPセンサーの圧力OFFチェックフラグ。 ' Dim V1 As Word 'センサーの検出電圧(1)。 Dim V2 As Word 'センサーの検出電圧(2)。 Dim Position As Byte '位置データ。 Dim Pressure As Byte '圧力データ。 ' Dim Tempw1 As Word '汎用テンポラリ変数 Word型 No.1 ' ' * ハードウェアの初期設定 * ' Gosub Fslprst '[FSLP]センサーの接続ポートを初期化する。 ' Config Aci = Off 'アナログ比較器の電源を切る。 Config Adc = Single , Prescaler = Auto , Reference = Avcc 'A/Dコンバータの設定。 Set Didr0.adc2d 'デジタル入力禁止レジスタの設定。(PB4) Set Didr0.adc1d 'デジタル入力禁止レジスタの設定。(PB2) ' Config Portb.0 = Output '[OC0A]ポートを出力に設定する。 Config Timer0 = Pwm , Prescale = 8 , Clear Timer = 1 , Compare A Pwm = Clear Up '8ビット高速PWM動作。 '1,200,000Hz / 8 = 150,000Hz 150,000Hz / 256 = 586Hz (1.7mS) ' Set Pcmsk.pcint4 '[FSLP-1] PB4[PCINT4]を許可する。 On Pcint0 Swint Nosave '[FSLP]の抵抗変化割り込みルーチンを設定。 Enable Interrupts 'すべての割り込みを許可。 Fslpoff = 1 'センサーのOFFチェックをさせる。 ' ' ******************* ' * メイン ルーチン * ' ******************* ' Main: If Tifr.tov0 = 1 Then 'If 1.7mS経過したか? Then Set Tifr.tov0 'Timer0 オーバーフロー・フラグをリセット。 ' ' * LEDをフェード調光する * ' Timebright = Timebright + 1 If Timebright > 3 Then 'If 調光の時間か? Then Timebright = 0 If Ledset > Ledout Then 'If LEDの輝度変更有りか? Then Ledout = Ledout + 1 Else If Ledset < Ledout Then 'If LEDの輝度変更有りか? Then Ledout = Ledout - 1 End If End If Ocr0a = Ledout 'PWMのパルス幅を設定する。 End If ' ' * [FSLP]センサー 位置の測定 * ' Set Fslp_2 'センサーの端子[2]を[H]レベルに設定する。 Reset Fslp_3 'センサーの端子[3]を[L]レベルに設定する。 Reset Fslp_r '抵抗接続端子を[L]レベルに設定する。 Config Fslp_r = Input '抵抗接続端子をハイ・インピーダンスにする。 Config Fslp_1 = Input 'センサーの端子[1]をA/D入力に設定する。 ' Waitus 10 '10μSの待ち時間。 Tempw1 = Getadc(fslp_ad1) 'センサーの端子[1]をA/D変換する。 Shift Tempw1 , Right , 2 '1/4 Position = Tempw1 ' ' * [FSLP]センサー 圧力の測定 * ' Set Fslp_2 'センサーの端子[2]を[H]レベルに設定する。 Config Fslp_1 = Input 'センサーの端子[1]をA/D入力に設定する。 Config Fslp_3 = Input 'センサーの端子[3]をA/D入力に設定する。 Config Fslp_r = Output '抵抗接続ポートを出力に設定する。 Reset Fslp_r '抵抗接続端子を[L]レベルに設定する。 ' Waitus 10 '10μSの待ち時間。 V1 = Getadc(fslp_ad3) 'センサーの端子[3]をA/D変換する。 V2 = Getadc(fslp_ad1) 'センサーの端子[1]をA/D変換する。 Gosub Fslprst '[FSLP]センサーの接続ポートを初期化する。 ' Tempw1 = V1 - V2 '圧力を計算する。 Shift V2 , Left , 6 'V2 = 64 * V2 Tempw1 = V2 / Tempw1 '圧力 = 64 * V2 / (V1-V2) Shift Tempw1 , Right , 2 '1/4 Pressure = Tempw1 ' ' * 輝度の設定 * ' If Ledonf <> 0 Then 'If LEDがON中か? Then If Pressure <> 0 Then 'If 圧力が4以上か? Then Select Case Position Case Is > 245 : 'If 最高輝度か? Then Ledset = 255 '最高輝度を設定する。 Case Is >= 10 : 'センサーに触れたか? Then Ledset = Position + 10 '輝度を設定する。 End Select End If End If End If ' ' * センサーの強押しで電源のON/OFFを管理する * ' If Fslpoff = 0 Then 'If センサーのOFFチェック中でないか? Then If Pressure >= Offpressure Then 'If 圧力がOFFの設定値以上有るか? Then Ledonf = 0 Ledset = 0 'LEDを消灯する。 Fslpoff = 1 'センサーのOFFチェックをさせる。 End If Else 'センサーのOFFチェック中の場合。 If Pressure = 0 Then 'If センサーの圧力がOFFになったか? Then If Ledonf = 0 Then 'If LEDがOFF中か? Then If Ledout = 0 Then 'If LEDが消灯したか? Then Tccr0a = &B0000_0011 '[OC0A]ポートを[L]にする。 Gosub Fslprst '[FSLP]センサーの接続ポートを初期化する。 Stop Adc 'A/Dコンバータの電源を切る。 Config Fslp_1 = Input 'センサーの端子[1]接続ポートを入力に設定する。 Config Fslp_r = Input '抵抗器接続ポートを入力に設定する。 Set Fslp_r '抵抗器接続ポートをプルアップする。 Reset Didr0.adc2d 'デジタル入力禁止レジスタの解除。(PB4) Waitms 10 '各設定の安定待ち時間。 Set Gifr.pcif '[FSLP]割り込みをリセットする。 Enable Pcint0 '[FSLP]割り込みを許可する。 ' Power Powerdown 'スリープモードへ移行する。([FSLP]割り込みで再起動する) ' Disable Pcint0 '[FSLP]割り込みを禁止する。 Set Didr0.adc2d 'デジタル入力禁止レジスタの設定。(PB4) Gosub Fslprst '[FSLP]センサーの接続ポートを初期化する。 Start Adc 'A/Dコンバータに電源を供給。 Waitms 10 '各設定の安定待ち時間。 Tccr0a = &B1000_0011 '[OC0A]ポートを[PWM]にする。 Ledonf = 1 Ledset = 20 '最低輝度に設定する。 Fslpoff = 1 'センサーのOFFチェックをさせる。 End If Else Fslpoff = 0 End If End If End If ' Goto Main ' ' ****************************************** ' * [FSLP]センサーの接続ポートを初期化する * ' ****************************************** ' Fslprst: Config Fslp_1 = Output 'センサーの端子[1]ポートを出力に設定する。 Config Fslp_2 = Output 'センサーの端子[2]ポートを出力に設定する。 Config Fslp_3 = Output 'センサーの端子[3]ポートを出力に設定する。 Config Fslp_r = Output '抵抗接続ポートを出力に設定する。 Reset Fslp_1 '全てのセンサー端子を[L]レベルにする。 Reset Fslp_2 Reset Fslp_3 Reset Fslp_r Return ' ' ******************************** ' * FSLP抵抗変化割り込みルーチン * ' ******************************** ' Swint: '何も処理しない。 Return ' ' End