アトメル社のチップマイコンを使って、秋月のデジタル容量計を直読する装置 を作ってみました。 |
回路の動作説明この度秋月のデジタル容量計を組み立てて見ました、作りにくさは何時も通りですが完 製後のテストでは極普通でしょうか、値段的には良い方かとおもわれました。 もともと3桁のカウンタなので表示した値にそのレンジに値する倍率を掛け算して始め て真の値が判明します、構造から倍率が多くなるとその倍率以下の値(もともと計数されてま せん)は切捨てた様な感じになります、大きな容量に小さな値が全部表示されると逆に使い勝 手が悪くなったりしますから、著者としては丁度良い感じにみえました。 計算機がないと真値が出ません、これはちょっと使い勝手が悪い分類にもなります。 そこで直読装置を作る事になりました、やはり此処はチップマイコンの出番でしょうねPIC は使った事がないので AVR ATtiny2313-20PC を使う事になりました。 ヒューズビットを書き換えで外付けの水晶振動子を使えるようにします、方法は沢山の方々 が公開されています Google などで検索すれば沢山のサイトが見つかります、くれぐれも自 己責任で実行してください。 AVR マイコンは開発環境が良く BASCOM ベーシックコンパイラのデモ版を無料で使えます ので現在使用しています、日本語対応ではないのでちょっと使い勝手がよくないのですが、 慣れてくればあまり気にならなくなる様です。 しばらく試行錯誤が続きましたがやっと動く様になりました、まだ写真の様にバラックで すが動作は極めて良い感じです、試行錯誤の結果が出たと思っています。 配線図は小さい箇所は見にくいのでクリックでかなり大きめのサイズのBMP-File が表示 します、印刷した方が見易いです、Windows Picture and Fax Viewe で A4 に印刷がお勧め です。 プログラムファイルは行番号がコピーできなかったのとA4一枚に仕上げたかったのでエク セルにコピーして作成しました、右クリックでエクセルに取り込み白黒になった部分をエク セルの文字色で色をつけファイルからページ設定を開き倍率を75%に設定して印刷する事をお 勧めいたします、このまま印刷するとA42枚必要です。 プログラムリストを表示したときフォントによっては見難い処があります、たとえば25行の Config Portb.0 = Input では Portb.0 のピリオドが虫眼鏡で拡大してやっと見える感じ です、コンパイルエラーがあった時に確認する箇所かとおもいます。カウンタ入力タイプの実験終了と箱入れも済みました、 こちらからどうぞ。 カウンタ入力タイプへ プログラムリスト 以下にフログラムなどに関する気づいた点を列挙しました。 1 マイコンは出来るだけ高速にする、32.25MHz が沢山在りましたので使いました、結構 なオーバークロックですが ATtiny2313-20PC ATtiny2313V-10PU どちらでも数個試しま したが問題なく動きました、遅いと B のモードで若干取りこぼしが有りました、555の パルスがちょっと狭い為と思われます。 フログラムファイルで"緑"はコメント行と使ってない命令文です、"橙"は IF 文の仲間 です、同じ数字同志で IF Else End If を組んでいます。 プログラムファイルに手持ちの水晶を記述していますが 32.25MHz 以外は不安定な感じ がありましたが、もしかしてテスト当時はオーバーフローを使ってなかったので取りこ ぼしが目立ったのかも知れないと思っていましたが此処を書きながら再度テストして見 ました、水晶は 7.108MHz と 14.318MHz です、やはり SW-3 = B の位置で取りこぼし が結構ありました。 2 スタート信号の取り込みは INT1 割り込みです、ノーマルの555出力立ち上がりエッジ で割り込みがかかり、カウンタ変数(Intflag)=0と(Wrflg)=1 にしてリターンします。 3 CMOS555 の出力立ち下がりエッジで INT0 の割り込みが掛かります、4553のクロック入 力 PIN-12 にトランジスタバッファーを入れてATtiny2313のINT0(PD2)に繋がっています。 此処では割り込みフラグ(Intflag)=1 と カウンタ変数を(Intflag)+1 にしてリターン します、1 クロックずつこの割り込みが発生します。 4 取り込んだパルスがカウンタ変数に溜まっていますからメインプログラムでは、SW-2 の 位置を取り込みカウンタ変数の値をその位置に合致した処理をくりかえします。 5 SW-3 のA で ×10μF ×1μF と SW-3 のB は掛け算と引き算で済みます。 問題は SW-3 の A で ×0.1μF 〜 ×0.001μF は困りました、不動小数点演算なんて とんと分からず、途方に暮れて AVR のマニアルを読みました、結果ありました究極な? 表示方法ですそれは数値データを文字データに変換しFomat(Ct,"0.000")とかにプロクラ ムすれば0.001倍した事になるのです。 Ctは変数です、21行でDim Ct AS String * 3 と宣言してあります。 79行で Ct = Str(Intcnt) を実行してます、これはIntcntの数値をStrで文字に変換し てCtに格納しています、後SW-2の位置情報にしたがってLcd Fomat(Ct,"00.0")などの様 にフログラムすれば良いのです。 例えば、容量計の表示が 123 で SW-3 が A SW-2 が 1 とすると倍率は X0.001 です から Fomat(Ct,"0.000") とプログラムすれば 0.123μFとLCD が表示します。 コンデンサの表記が 103 だと 0.01μF ですから容量計は 010 と表示され LCD は 0.010μF と偶然かと思いますか表示されました、時間が立つと容量が多くなる様で 0.011μF の表示に変りました、セラミックコンの温度計数でしょう、ハンダ付けだった ので温度が下がって容量が少し増えたって事ですね。 少数点の位置はSW-2の位置情報と同じにすれば良い事が分かりました。 6 ×1pF と ×10pF はあらかじめ測定した浮遊容量を差し引いて表示させます。 プログラム容量が足りない為、変数を使えず直接プログラムで引算を実行してます。 ×1pF は -43 ×10pF は -50 を引いています、これは基板だけの浮遊容量です、箱 入れ後はもう少し増加すると思います、逆に少し多めに引いて箱の面に小容量のピスト ントリマなどを取り付けそれを調節して 0pF に合わせ込んだ方が現実的かも知れません ね。 それから×1pFのレンジで測定コンデンサ無しの時に浮遊容量を差し引いて "-2pF" と か"0pF" などと表示されますがこのレンジは微小容量を測定しますからその時の計算結 果が、符号付32ビットの整数型変数で処理されて表示されるのです、符号なしの16ビッ トでは 計算結果がマイナスでは 65533pF などと表示されますので良くないですね。 プログラムデータの113行から122行がこの処理ルーチンです。 7 オーバーフローですがブログラム量が100%を超えたりして結構苦労しました、現在のプ ログラム量は99%になってます。 検出は4553のオーバーフロー出力をPD-6に取り込み処理をしています 129行から137行が 処理ルーチンです。 ここの処理でブログラム量が100%超でやむなく 48-49行を使わず、41行で Intflag を セットし電源ON の時1回だけメインプログラムを走らせて LCD の初期設定を済ませま す、その結果 Intcnt が "0" になっている為 0pF とか 0uFなどとその時のレンジに 従い表示されます。 8 配線図でLEDは無くても良いなんて書いてありますが、あった方が良いです、その理由は 4553がオーバーフローしても555の部分が動き続けている可能性があり、555が停止する前 にスタートボタンを押しても反応しないので、あれって感じがするときがあります、555 が完全に停止すればLEDが消えます、そこから再スタートが可能になります。 9 PD2 INT0 の入力に220Kの抵抗がありますが、あまり意味が無いような気がします、以前 JA9TTT さんのカウンターを作りうまく動きましたのでそのままの回路を使っていました 0.1μFのコンデンサで直流カットをしていました、前段がエミッタフォロアー出力で低 インピーダンスなので220Kもはずして直結で宜しいかと思います、現在配線図通りで旨 く動いているので其のままにしています。 最後は箱入れの作業があります、これも結構楽しめます、いつ完成するか不明ですが、 完成後また此処に写真で様子をお披露目いたします。 記 これで「AVR C-Meter 表示器」の製作実験結果を終わらせて頂きます。 測定した感じはとても良いです、そばに計算機が無くてもしっかりと表示してくれます。 ちょっと残念なのは「LCD」が「μ」を表示できなくやむなくアルファベットの「u」を 使っています、なれればそんなに違和感も無いのですが・・・・。 写真の表示は 10.0μF を表示しています、これはタンタルコンデンサ 16V 10μF を測 定しています、秋月のC-Meter は 100 を表示していますね、仮に 101 だったら 101× 0.1=10.1 になりますから LCD は 10.1μF を表示する事になります、この場合は3桁フ ルに真の値を示します、SW-2 は当然3の位置になります。 この位置で表示できるのは 0,1μF〜99.9μF です。 秋月のC-Meter測定範囲は 1pF〜9990μF となっています、なるほどって感じがしてます ね。 最後にもう1つ この方法は外部割込みを使って 555 の出力パルスを計数しています、従って入力パルス 全てに割り込みが発生します、1回の割り込みで使用する時間がどの程度必要かは私には 分かりません、割り込みルーチンを実行する為27個のレジスタを PUSH POP の必要があ ります、かなり時間のロスがありそうですね、クロックの周波数が、できるだけ高い方が 良かったのもこんな理由があったのかも知れませんね。 FrequencyCounter と同じ PD-5 のCounter1 はオーバーフローの時に割り込み発生なら時 間が有効に使える様な気がします、多分クロックの周端数をかなり下げられると思います ね。 この Counter1 の使い方が今一分からず、外部割込みの INT0 と INT1 を使う事にしまし た。 プログラム量が現在 99% ですから Counter1 の処理でどの程度のプログラム量になるか で使えるかどうかわかると思います。 メインルーチンももっと小さくなれば余裕が出来ますね、もう少し研究してみたいです。 アセンブラという選択肢もありますが Z-80 なら昔むかしやってましたが、今は年齢から してちょっと無理っぽい感じですね、現在、一応きちっと動いてますのでもう少し使って 様子を見ようと考えています。 以上で終わりに致します、どうも最後まで見ていただき有難う御座いました。 これからの記事も宜しくお願い致します。 管理者 |