2~3年前から縁日(えんにち)でピカピカ光るモノが売られていた。
今年の夏もきっと売られるんでしょうなあ。
中国製っぽい赤と青とかのLEDが振動を与えるとピカピカ光るヤツ。
そんなピカピカを作ってみた。
振動ではなく単純にスイッチオン!で作動するごくごく当たり前な仕様です。
なんでそんなクダラナイ物を作ったかと申しますと
実はワタクシ、夜10時ぐらいから約1時間ウオーキングと称して深夜徘徊をしているのだ。
んで、街路灯の少ない暗い道を歩いていると無灯火の自転車とぶつかりそうになるのだよ。
こっちもしっかり前を見ていりゃ良いのだけれど、下向いて歩いてるときがあるので
そーゆーときに「あっ!」となるわけ。
だから、こっちも相手にわかるように光るモノを身に付けてたら安心だね、ってことでね。
でも懐中電灯でもいいんじゃないかな、とも思ったけれど下着泥棒も懐中電灯を持ってそうだしね。
下着泥棒に間違えれたら困るので懐中電灯は却下。
で、ウチにあった例の中国製のピカピカを付けてたら良い感じ。
変なヤツとは思われてるようなので人も近付いて来ないのでいいね。
でもこの中国製、小さなボタン電池なのですぐ電池が無くなってしまった。
んじゃ、単3電池で作りましょってことですよ。
電池ホルダーを改造して作ったのだ。
回路は簡単。
PIC12F629とソケット、0.1μF、151Ω、LED赤、黄、青、と単3電池3本だけ。
ASMファイルはこの下。
LEDはカソード3つまとめて1つの151ΩにつないでGNDへ。
0.1μFはVDD_VSS間に接続。
;
;
; PIC12F629 <<散歩用LEDランプ>>>
;
; PIC12F629のピン配置
; _____________
; VDD 4.5V =1; ;8= 0V VSS
; NOT USE =2;(GP5) (GP0);7= LED0 赤----|
; NOT USE =3;(GP4) (GP1);6= LED1 黄----|----<151Ω>-----<GND>
; NOT USE =4;(GP3) (GP2);5= LED2 青----|
; _____________
;
;
;←このマークより右側はPICは読み取りません。好きなことを書いて構いません。
list p=12f629 ; 翻訳時にリストファイルを作ります
#include <p12f629.inc> ; 12F675用定義ファイルを読み込みます
errorlevel -302 ; 翻訳時に302エラーが出ないようにします
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT ;4MHz
;↑これらの内容は自分で調べてみてください。パターン化した物と考えてもらっても良いです。
radix dec ; 省略時の数値表現を10進数にします。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 000H
GOTO INIT ;通常のプログラムの始まりは「INIT」です。そこへ行けと言う命令語
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COUNT EQU 20H ;カウンタ
TM1 EQU 21H ;タイマー1
TM2 EQU 22H ;タイマー2
TM3 EQU 23H ;タイマー3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;---- 初期化ルーチン ---- ;ここはマイクロチップ社のデータ表を見ながらの作業になります。
INIT ;<<<ここからがプログラムの始まり PICの初期設定をします。>>>
BSF STATUS,RP0 ;BANK 1 へ行けの意味 ;PICの設定箇所には「BANK 0」「BANK 1」などがあります。
MOVLW B'00001000' ;3番ピンは入力用 あとは出力用ピン(電源やセラロックはそれなりに機能します)
MOVWF TRISIO ; 上記のピンの割付を決定
MOVLW B'00000111' ;オプション情報 今回は黙ってこのまま。(気になるなら調べてみてください)
MOVWF OPTION_REG ;OPTIONレジスタに書き込む
BCF STATUS,RP0 ;BANK 0 へ行けの意味 ;PICの設定箇所には「BANK 0」「BANK 1」などがあります。
MOVLW B'00000111'
MOVWF CMCON
CLRF GPIO
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN ;<<<メインプログラム>>>
MOVLW D'10'
MOVWF COUNT ;10をCOUNTへ代入
MAIN0
BSF GPIO,0 ;LED0 ON 赤ON
CALL TIMER ;タイマールーチン
BCF GPIO,0 ;LED0 OFF 赤OFF
CALL TIMER ;タイマールーチン
DECFSZ COUNT,F ;COUNT-1=0?
GOTO MAIN0 ;NO
;YES
CALL TIMER ;タイマールーチン
CALL TIMER ;タイマールーチン
MOVLW D'10'
MOVWF COUNT ;10をCOUNTへ代入
MAIN1
BSF GPIO,1 ;LED1 ON 黄ON
CALL TIMER ;タイマールーチン
BCF GPIO,1 ;LED1 OFF 黄OFF
CALL TIMER ;タイマールーチン
DECFSZ COUNT,F ;COUNT-1=0?
GOTO MAIN1 ;NO
;YES
CALL TIMER ;タイマールーチン
CALL TIMER ;タイマールーチン
MOVLW D'10'
MOVWF COUNT ;10をCOUNTへ代入
MAIN2
BSF GPIO,2 ;LED2 ON 青ON
CALL TIMER ;タイマールーチン
BCF GPIO,2 ;LED2 OFF 青OFF
CALL TIMER ;タイマールーチン
DECFSZ COUNT,F ;COUNT-1=0?
GOTO MAIN2 ;NO
;YES
CALL TIMER ;タイマールーチン
CALL TIMER ;タイマールーチン
MOVLW D'10'
MOVWF COUNT ;10をCOUNTへ代入
MAIN3
BSF GPIO,0 ;LED0 ON 赤ON
CALL TIMER ;タイマールーチン
BCF GPIO,0 ;LED0 OFF 赤OFF
CALL TIMER ;タイマールーチン
BSF GPIO,0 ;LED0 ON 赤ON
CALL TIMER ;タイマールーチン
BCF GPIO,0 ;LED0 OFF 赤OFF
CALL TIMER ;タイマールーチン
BSF GPIO,1 ;LED1 ON 黄ON
CALL TIMER ;タイマールーチン
BCF GPIO,1 ;LED1 OFF 黄OFF
CALL TIMER ;タイマールーチン
BSF GPIO,1 ;LED1 ON 黄ON
CALL TIMER ;タイマールーチン
BCF GPIO,1 ;LED1 OFF 黄OFF
CALL TIMER ;タイマールーチン
BSF GPIO,2 ;LED2 ON 青ON
CALL TIMER ;タイマールーチン
BCF GPIO,2 ;LED2 OFF 青OFF
CALL TIMER ;タイマールーチン
BSF GPIO,2 ;LED2 ON 青ON
CALL TIMER ;タイマールーチン
BCF GPIO,2 ;LED2 OFF 青OFF
CALL TIMER ;タイマールーチン
DECFSZ COUNT,F ;COUNT-1=0?
GOTO MAIN3 ;NO
;YES
CALL TIMER ;タイマールーチン
CALL TIMER ;タイマールーチン
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMER ;<<<タイマールーチン 0.05SEC>>>
MOVLW D'250'
MOVWF TM1 ;250をTM1へ代入
TIMER1
MOVLW D'50'
MOVWF TM2 ;50をTM2へ代入
TIMER2
NOP
DECFSZ TM2,F ;TM2-1=0?
GOTO TIMER2 ;NO
;YES
DECFSZ TM1,F ;TM1-1=0?
GOTO TIMER1 ;NO
;YES
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END