EEPROMに関するチャレンジ課題に挑戦してみましょう!
目次
timeValueの問題点
前回のプログラムで、タイマー時間を管理する変数、timerValueは、EEPROMの読み出し、書き込みに合わせて1バイト(unsigned char)に変更してしまいました。timerValueを秒にする場合、timerValueの最大値は255ですので、255秒までしか設定できません。
実際のタイマーは1分単位の設定で問題ないと思いますので、timerValueを分として扱い、タイマー時間計測をする部分では、timerValue x 60秒をカウントすれば対応できます。
ただ、保存できる値が255まで、というのはちょっと心許ないです。
そこで、チャレンジ課題として、現在は1バイト(=8ビット)で保存しているデータを2バイト(=16ビット)で保存するように変更してみましょう。
現在のプログラムは
unsigned char timerValue;
と宣言していますので、これを
unsigned short timerValue;
の2バイト変数として、このEEPROMから読み出したデータをこの変数に代入、またこの変数の値をEEPROMに保存するようにプログラムを変更してみてください。
更新履歴
日付 | 内容 |
---|---|
2017.7.30 | 新規投稿 |
2018.12.2 | 誤記訂正 |
PICマイコン勉強の為、いつも参考にさせて頂いております。
チャレンジ課題の考え方としてアドレス0,アドレス1のデータを1バイトとして読出し、その値をtimerValueに代入し、演算(足し算)。書込み時は、分割して1バイトデータずつ保存するといった感じでしょうか。1バイト以上読み書き可能なライブラリがあればよいのですが、解らず、もう少しヒントを頂けないでしょうか。
Wonderさま、
ご質問どうもありがとうございます。
考え方としては書かれています通り、EEPROMに書き込む際には2バイトのデータを1バイトずつにバラしてアドレス0とアドレス1に保存すればOKです。また読み出す際にはアドレス0とアドレス1の2バイトのデータを読み取り、それを16ビットのtimerValueに再現すればOKです。
これを実現するには掛け算と割り算を使用してもいいですし、ビット演算子を使用してもできます。一般的には以下のビット演算子を使用するケースが多いです。
>> (右に1ビットシフト)
<< (左に1ビットシフト)
ご教示ありがとうございます。
ビットシフトにて出来ました。また、256まで待てなったので下位4ビットを2ビットずつ分離し、EEPROMに読み書きも出来ました。ありがとうございました。
Wonderさま、
早速うまくいったとのことでよかったです!
情報がちょっと少なかったかな、と思ったのですが、C言語を使いこなされているようですね。2ビットずつ分割して、というのも面白いですね。色々と試して腕を上げていただければと思います!