PIC16F1827を使ったガイガーカウンター

ガイガーミュラー管の出力をカウントするための試作回路を、
最近出たPIC16F1827を使って作ってみました。
#ガイガーミュラー管の部分の回路には、
昔作った秋月電商さんのD3372のキットを使用しています。


特徴

時計用の水晶を使っています(メインクロック32.768kHz)。
I2CのキャラクタLCDで測定値を表示します。
数値表示モードとグラフ表示モードの二つの表示モードがあり、
数値表示の場合は、過去4時間の測定結果(count/hour)と現在のカウント状況、
グラフ表示の場合は過去16時間の測定結果をグラフで表示します。

消費電流は、LCD、ガイガーカウンター部をあわせて1mA程度でした。

#接続できるLCDは、ストロベリーリナックスさんの
「I2C低電圧キャラクタ液晶モジュール(16x2行)」です。

数値表示モード

上の行が、過去4時間の測定値(カウント/時間)、
下の行左から現在のカウント値/カウント時間、
連続使用時間(この表示では90時間目になります)、
電源電圧、となっています。

グラフ表示モード

上の行で過去16時間の測定結果を表しています。
1文字1時間相当です。
下の行は、左から、現在のカウント値/分、
過去16時間における測定値の最大値(112)を
あらわしています。
#090と表示されているのは写真を撮った時点でのバグです。
アップしているプログラムでは修正しています。
#表示は2011.4/19.PM3:00の時点でのものです。
※LCDに保護シートがついたまま写真を撮っているので、
多少見づらいかも…シートを取るともっときれいになります(^^;

回路

※クリックすると拡大表示します。
※カウント入力のレベルにご注意ください。
 この回路図では、カウント入力のレベル変換部分は省略しています。


ソース
HEXファイル

プログラム解説
・動的クロック変更
 起動時は、初期化処理に時間がかかるので、内部クロックにて
 動作するようにしています。
 初期化終了した時点で、32kHzの水晶をメインクロックとして
 動作するようにしています。
 (省電力ですが、動作は遅くなります。)
・I2Cモジュール使用
 LCDとのインターフェースはI2Cを使用しています。ただし、
 LCDへの送信しかしていません。
・LCDグラフ表示
 LCDのキャラクター定義により、過去のカウント値を
 棒グラフで表示します。
・ADコンバータ&内臓リファレンス使用
 ADコンバータで電源電圧を基準として内臓リファレンスの電圧を
 計ることにより、電源電圧を逆算しています。
・LCDの輝度の自動調整
 このLCDは、輝度が電源電圧に左右されます。
 電源電圧をチェックして、見やすい濃さになるように自動調整します。
・電池残量表示
 LCDのバッテリーマークで、電池残量(のめやす)を表示します。
・タイマー割り込み
 タイマー2で、0.5秒間隔で割り込みをかけています。
 ※0.5秒に特に意味はありません。本当は1秒間隔でいいんですが…(^^;
・タイマー1によるカウント
 タイマー1を外部入力カウント用に使用しています。
・EEPROM書き込み
 測定結果はEEPROMに書き込んでいます。
・カウントは最大255まで
 カウント値を1バイトで扱っているため、最大カウントは255
 までとなります。それ以上カウントさせたい場合は、プログラムを
 変更してください。(D3372では、札幌では一時間あたり70〜100程
 度のカウントでした。ただし、温泉地では倍くらいの数値になるよ
 うです。)
・低消費電力
 電源は3V(電池2本)を想定しています。
(5Vでも動くと思います)
 消費電流はかなり小さい(1mA以下)ですが、電源を3Vとして、
 PIC16LF1827を使用すると、さらに省電力になるかもしれません。
・シリアル出力(予定)
 すみません、シリアル入出力は未実装です。

補足
PIC16F1827のサンプルプログラムがあまり見当たらなかったので、
ソースを公開します。少しでも参考になれば幸いです。
ただし、もしかしたらバグ等あるかもしれません。
自己責任でご利用ください。



追記(2011.5/17)
最近入手したガイガーミュラー管をテストしてみました。

D3372と比べると、かなり感度はいいようです。
腕に自身のある人向けに、近いうちにキットとして提供することを計画しています。

products@cwork.co.jp