● 実験テーマ2
「dsPIC30F_EEPROM_温度ロガー」の顛末記
■ 2010.07.18
<ハード案>
・CPUは、dsPIC30F2012を使用
・ベースになる基板は、上CPUを実装の、マルツエレック製、dsPICトレーニングボード「MDSPIC-BASE]を使用
・温度データ等の記録には、I2Cで動くATMEL社のEEPROM「AT24C256」を使用
・時計IC(RTC)として、I2Cで動く秋月電子の「AE8564NB」を使用(リチューム電池でバックアップ)
・温度センサーとして、NS社の「LM35DZ」を使用
<動作仕様案>
・通常は、カレンダー+時刻+温度表示
・次の2つの設定モードがある。
@ 時刻合わせ
・SW2を押しながら、電源ONで時刻合わせモードへ
・この設定値はEEPROMに保存しない。
(最初に必ず時刻合わせをすれば、次回から電池バックアップにより、現在時刻からカウントを始める。)
A ロガー設定
・SW1を押しながら、電源ONでロガー設定モードへ
<設定項目>
・INTERVAL: 0: 1秒/ 1: 1分/ 2: 1時間
・SAMPLE : 0: 256データ/ 1: 4096データ
・この設定値は、EEPROMに保存し、次回の電源ON時に読みだす。
保存番地は、最終番地と、その1つ前の番地にする。
32766番地: INTERVALの値
32767番地: SAMPLEの値
・通常動作時、押されたSWが何かによって次に示すロギング動作に移行する。
@ SW1
・指定されたINTERVALとSAMPLEで、EEPROMに記録を開始する。
・記録中、赤LED点灯(停止か終了で消灯)
・LCDのアッパーエリアに記録カウントを表示
<記録カウント>
REC:0000〜8192max(或いは、データ数を表示するか?)
記録終了か停止時:REC: 終了か停止時のカウント値を表示
A SW2
・記録されたEEPROMのデータを読出し、RS232C経由で、ターミナルへ出力
・読出し中、LCDのUPPERエリアに読出しカウントを表示
<読出しカウント>
PLAY:0000〜8192max(或いは、データ数を表示するか?)
読出し終了か停止時:PLAY: 終了か停止時のカウント値を表示
B SW3
・記録を途中で停止する。
・EEPROMへの記録フォーマット案
11:30:25,27.5CRLF (15byte/data)
・
・
・
EOF // 最終アドレスにEOFコード:0x1Aを記録
<例:SAMPLE: 256,
4096の場合の記録データ数>
256/15 ≒ 17→ 15*17+1
4096/15 ≒ 273→ 15*273+1
■ 2010.07.22
<デバッグ中に出た症状等>
・4データ/60byte書込み→読込みはOK
・それ以上の容量だと、約4データ毎に読出し結果がおかしい。
・書込み or
読込み時の要因切り分けとして以下を実施
@ 連続読出しをやめ、単発読出しにしたが結果同じ。
A 時計の秒割込みの影響で読出しがおかしくなっていると想定し読出し時は、割込みを禁止したが同じ。
→ このことから、書込みに問題があると思われる。
→ このEEPROMの連続書込みは、64バイトまでしかサポートしていないため上手く行かなかった。
(下のWEBからの切り取り資料を、参照してください。)
■ 2010.07.29
・一応、考えた仕様通り動いているので、これで本プロジェクトは一旦クローズ
それ以降、発覚したバグは後日まとめて調査修正することとした。
・以下に、EEPROMから読み出した結果を、PCターミナル(TERAターム)に出力した結果と、それをExcelでグラフ
にした結果を示す。
<最終回路図>
・ この時点では、回路図CADを持ち合わせてなかったので、画像の貼り合わせと、オートシェープで作成してました。
<最終ソース・ファイル>
・こちらから、どうぞ→ temperature_logger_add_eeprom.c