普通、ロガーといえば、大量のメモリを積んでデータの取りこぼしがないように備えるのが常套手段ですが、
本機の場合は低速デバイスであるシリアルEEPROMに直接データを記録します。じゃ、データを取りこぼしちゃうぞ・・・
本機ではシリアル受信ポートのRTS制御をおこなうことにより、データの取りこぼしを防ぎます。
部品代は合計2000円くらい
機能
操作 | 機能 | 説明 | 備考 | |
1 | 赤ボタンを1秒以上押す | 順方向出力 | 出力開始位置・以降のデータを送信ソケット側から出力 | DCEとはストレートケーブル、DTEとはクロスケーブルで接続(出力ピンはジャンパで切替) |
2 | 緑ボタンを1秒以上押す | 逆方向出力 | 出力開始位置・以降のデータを受信ソケット側から出力 | PCとストレートケーブルで接続することを想定、ソフトウェアTX |
3 | 両ボタンを押した後3秒以内に赤ボタンを1秒以上押す | 出力開始位置を設定 | 次の記録位置を出力開始位置に設定 | 設定可能な出力開始位置は1箇所 |
4 | 両ボタンを押した後3秒以内に緑ボタンを1秒以上押す | 出力開始位置を消去 | 出力開始位置を初期化し、記録装置の先頭に設定 | |
5 | 両ボタンを3秒以上押しつづける | データ全消去 |
- 通信速度は9600bpsで固定
- 記録容量は32Kバイト(Microchip 24LC256を使用)
- 起動時、前回最後に記録した次の位置に出力開始位置が設定される
- 受信したデータは同時に送信ソケット側から出力される
- 受信すると緑LEDが1秒間素早く点滅
- 書込み領域が満杯の状態で受信すると赤LEDが1秒間素早く点滅
- 順方向出力中は赤LEDが点滅
- 逆方向出力中は緑LEDが点滅
- 出力開始位置・設定時は緑LEDが点滅
- 出力開始位置・消去時は赤LEDが点滅
- 全消去中は両LEDが交互に点滅
- いずれかのソケットでCTSオンを検出、もしくはボタン操作をするとsleepから復帰
- CTSオンを検出している間はsleepしない
- CTSオフを検出すると3分後にsleep
I2C通信
今回はハードウェアでI2C通信をおこなう為に、MSSP(The Master Synchronous Serial Port)モジュールを持つ、PIC16F877Aを選びました。
でも、ソフトウェアでおこなっても大差ないのではないかとも思います。
PCから操作できる赤外線学習リモコンではRUUさんが開発されたソフトウェアI2Cルーチンを使用しています。
実はByteRead、ByteWriteしか使用していません。
PageWriteを使えば書き込みが大幅に高速化できると思いますが、制御が複雑になるのは避けたいので(趣味の電子工作ですから)、PageWriteは使用していません。
メーカーによるシリアルEEPROMの違い
当初、Atmel製の24C256を使用していました。しかしAtmel製では、MicrochipのAppNotesから入手した書き込みサブルーチンを使用する限りは、1命令毎のwaitを10mS程度余計に取らねば正常に作動しませんでした。Microchip製の24LC256に変更したところ、余計なwaitなしで正常に動作するようになりました。
RTS制御
本機はRTS制御がうまく働く環境以外では使用できません。
出力側がWindowsPCの場合は多分問題ないと思いますが、その他の環境の場合は検証が必要です。
Linuxでは使用できないようです。こちらを参考にして下さい。
基板
当初はADM3202は使わず、C1815を4個使用していましたが、対応電圧範囲が低いかも?と思いADM3202を導入しました。
でも特に対応電圧範囲に違いはないようです。
変遷の為、大分汚くなっています。
電源
電源ジャックはスイッチ付きではありませんが、プラグの抜き差しにより、電池、ACアダプタの2系統電源対応です。
クラムシェル式のケースは時計の化粧ケースの流用です。
スペーサー
小さなことですが、スペーサーを接着しておくと、素早く、基板の取り外し、再取り付けができます。
回路図
BSch3V形式(zip圧縮)
主要部品表 |
部品名 | 値段 |
PIC16F877A | 400 |
Microchip 24LC256 | 160 |
ADM3202AN | 200 |
ソース
MPASM形式
※ieの場合、直接開けないことがあるようです。
ソフトウェアTXルーチンはELECTRONICS SHELVESから入手しました。
入手先で著作権の掲示はありませんでした。
I2C関係ルーチンはMicrochipのAppNotesから入手しました。
個人使用用途でのみ使用が許されています。
上記個所以外についてはBSDライセンスとします。