PIC16F84電子遊戯(98)
最終更新日:2003年4月27日
2CH ON・OFF装置を作ろう (1ページ)へ (2ページ)へ (3ページ)

2CH ON・OFF装置のEEPROMで設定値を記憶する
久しぶりの更新です。この製作を完結しておかないといけませんので、今回はPIC内蔵のEEPROMの使用方法を中心に説明します。
EEPROMのデータは電源を切っても消えることはありませんので、書き換えが出来る設定値などを記憶しておくと便利です。
このON・OFF装置は2CH分のON時間、OFF時間を個別に設定出来ます。
電源を入れて起動するたびに初期値に設定しなおされますので、これをEEPROMに記憶することにしましょう。
EEPROMに記憶するRAMの内容は次の通りです。
RAM 内容 EEPROMアドレス
ch1_on_set1 CH1 ON時間設定値(1) 10H
ch1_on_set10 CH1 ON時間設定値(10) 11H
ch2_on_set1 CH2 ON時間設定値(1) 12H
ch2_on_set10 CH2 ON時間設定値(10) 13H
ch1_off_set1 CH1 OFF時間設定値(1) 14H
ch1_off_set10 CH1 OFF時間設定値(10) 15H
ch2_off_set1 CH2 OFF時間設定値(1) 16H
ch2_off_set10 CH2 OFF時間設定値(10) 17H
電源ON時にこのEEPROMデータを読み出し、RAMに設定します。
もちろんEEPROMにデータが無いときは読み出さないようにして逆に初期値をEEPROMに設定するようにしておきます。
その判定にひとつEEPROMを使用します。
内容 EEPROMアドレス
EEPROMデータ有り判定用 00H
後のソースを見て頂くと判ると思いますが、この値が「96H」のときはEEPROMに設定されているデータが有効とみなして「10H〜17H」までのEEPROMデータを読み出してRAM設定します。それ以外のときは無効とみなして初期値を設定するようにします。
2CH ON・OFF装置のEEPROMの書き込み
EEPROMの書き込みについて手順を説明します。次の例を見て下さい。
movlw 96h
movwf ee_data
movlw 00h
call eeprom_write
まず「ee_data」のRAMに書き込みたいデータをセットします。
次にWレジスタにEEPROMのアドレスをセットして書き込みルーチン「eeprom_write」を呼び出せばOKです。1バイトずつ書き込みますので、この手順を繰り返せばOKです。
1バイト書き込みルーチンは次のようになっています
eeprom_write
     movwf EEADR
     movf ee_data,0
     movwf EEDATA
     bsf STATUS,RP0
     bsf EECON1,WREN
     movlw 55h
     movwf EECON2
     movlw 0aah
     movwf EECON2
     bsf EECON1,WR
eeprom_write2
     btfsc EECON1,WR
     goto eeprom_write2
     bcf STATUS,RP0
     return
順を追って簡単に説明します。
Wレジスタの値(EEPROMのアドレス)を「EEADR」にセットします。
「ee_data」の値(書き込むデータ)を「EEDATA」にセットします。
ページ1に切り換え。「WREN」(書き込みイネーブル)を「1」(許可)にセット。
「EECON2」(書き込みシーケンス)に特定の値を設定。
「WR」(書き込み開始制御)を「1」(スタート)にセット。
書き込みが終わる(「WR」が「0」になるまで)待つ。ページ0に切り換え。
以上で書き込み完了です。
これはPICで決まっている手順なのでこの通りにすればOKです。
意外と簡単でしたね。
2CH ON・OFF装置のEEPROMの読み出し
EEPROMの読み出しについてです。次の例を見て下さい。
movlw 11h
call eeprom_read
WレジスタにEEPROMのアドレスをセットして読み出しルーチン「eeprom_read」を呼び出せばOKです。1バイトずつ読み出します。読み出した結果はWレジスタに入ります。
1バイト読み出しルーチンは次のようになっています。
eeprom_read
       movwf EEADR
       bsf STATUS,RP0
       bsf EECON1,RD
       bcf STATUS,RP0
       movf EEDATA,0
       return
順を追って簡単に説明します。
Wレジスタの値(EEPROMのアドレス)を「EEADR」にセットします。
ページ1に切り換え。「RD」(読み出し開始制御)を「1」(許可)にセット。
ページ0に切り換え。「EEDATA」の値をWレジスタに設定。
以上で読み出し完了です。超簡単でしたね。
2CH ON・OFF装置の全ソースリストと全HEXコード
毎度おなじみのソースリストとHEXコードです。
一緒に圧縮していますので、ダウンロードしてからじっくり眺めて下さい。
(今回もXP標準のZIPにしています。)
ソースリストとHEXコードはこちらです。
2CH ON・OFF装置の大完成
では大完成した雄姿とその中身を見て下さい。
(ちょっとピンボケですいません)
(設定中とカウント中のLCD表示状態です)
(リレーの出力端子は配線しやすいようにネジ止め式にしました)
以上で2CH ON・OFF装置は完成しました。私はこの装置を使ってある製品の電池寿命を測定しました。定期的に製品のボタンを電気的に押すようにして電池電圧がどのように変化するのを調べたのでした。
ひさひさぶりに実用的は製作が出来たと考えております。
今回の収穫としてはLCDモジュールの制御とEEPROMの制御です。
今後はこれらの制御もどんどん製作に取り入れていきたいと考えています。
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。

不明点などあればメールお願いいたします。nonchansoft@nifty.com