このプロジェクトでは、使いやすいLCD読み取 り式の多目的タイムおよびインターバルメータ ーを構築するのに、小型のハードウェアで十分 であることを示します。 AVRマイクロコントロ ーラATtiny2313タイプは、入力ピンPD2と PD3に印加されるパルスの2つの連続的なロ ジックレベルの推移タイムインターバルを測定 します。 μs (マイクロ秒)レンジでは、10 μsか ら30 分までものタイムインターバルを1 μs の解像度で測定することが可能です。 msレ ンジでは、利用可能なレンジは1 msから数 時間までの間で、1 msの解像度となります。
回路上ではDIPスイッチブロックS2により、 機器の設定が以下のように決定されます。
- S2 1-8: 測定を開始するパルスエッジ(立ち上がりまたは立下り)を選択。
- S2 2-7: 測定を停止するパルスエッジ(立ち上がりまたは立下り)を選択。
- S2 3-6: 測定単位と解像度(μsまたはms)
- S2 4-5: 測定モード(連続またはワンショット / ホールド)
設定スイッチ機能とオプションについての 詳しい説明は、表 1を参照してください。 測定時間は、LCディスプレイに16文字2行で 表示されます。 最初の行には、選択したタイム インターバル、測定単位、測定モードが表示さ れ、2番目の行には測定時間が表示されます。
表1 | ||||
S2 1-8 | S2 2-7 | S2 3-6 | S2 4-5 | 測定タイムインターバル |
オフ | オフ | x | x | 立下りエッジから次の立下りエッジまで |
オフ | オン | x | x | 立下りエッジから立ち上がりエッジまで(2つの正パルス間のタイムインターバル) |
オン | オフ | x | x | 立ち上がりエッジから立下りエッジまで(正パルスの持続時間) |
オン | オン | x | x | 立ち上がりエッジから次の立ち上がりエッジまで |
x | x | オン | x | μs (t(min)=10 μsで測定、t(max)=1800 s (30 m)) |
x | x | オフ | x | ms (t(min)=1 msで測定、t(max)=14400 s (4 h)) |
x | x | x | オフ | 継続的に測定:1つの測定が終了したら結果が表示され、新しい測定を開始 |
x | x | x | オン | 1つの測定のみ:1つの測定が終了したら結果が表示され、プログラムは保留 |
(x = don’t care) |
部品リスト | |
抵抗器 | RS品番 |
R1,R3 = 10kΩ | |
R2 = 1kΩ | |
R4 = 39Ω | |
R5 = 1kΩ8 | |
P1 = 10kΩ preset | 522-2485 |
コンデンサ | RS品番 |
C1 = 22μF 35V ラジアル | 707-5701 |
C2,C3,C6 = 100nF | 537-3909 |
C4 = 47pF トリマ | |
C5 = 22pF | 537-3634 |
半導体 | RS品番 |
D1 = 1N4001 | 628-8931 |
D2,D3 = BAT41 | 544-4679 |
D4 = 小電流LED | 826-492 |
IC1 = 78L05 | 398-552 |
IC2 = ATtiny2313, Elektor Shop # 080876-41 | 738-0621 |
その他 | RS品番 |
S1 = 触知性スイッチ、6 mm サイズ | 378-6498 |
S2 = 4-way DIPスイッチ | 702-3331 |
K1,K2 = PCBマウント端子ブロック、リードピッチ 5mm (0.2”) | 467-0388 |
K3 = 10-wayボックスヘッダ | 251-8272 |
X1 = 8MHz 水晶 | 478-9347 |
LCD1 = LCDモジュール、2ライン、16文字 | 294-8774 |
LCDヘッダ16 way 1行0.1” ピッチ | 673-7499 |
LCDソケットストリップ16 way 1行0.1” ピッチ | 509-2880 |
PCB, ref. 080876-I |
www.elektor.com /080876 |
LED D4は測定中にオンになり、測定インター バルの間とホールドの間はオフになります。 このLEDの目的は、長い測定期 間中に「何が起きているのか」 を示すことにあります。 好みに 応じてLEDとR5を無効 にすることもできます。
μsレンジで は、ATtiny2313内の8 ビットのタイマ / カウンタ0 が、比較一致出力Bが有効 な状態でノーマルモードに 設定され、プリスケールされ たシステムクロックのカウント を行います。 8 MHzの水晶 が使用され、プリスケーラの除 数が8に設定され、タイマ / カ ウンタ0がμsごとに1つ増やされます。 出力 比較レジスタBは255に設定されます。これ は、出力比較ピン(OC0B)を256番目のパ ルスごとに切り替えます。 OC0Bピンは内部 でタイマ / カウンタ1の入力に接続されてお り、タイマ / カウンタ1がOC0Bピン上のこ れらのパルスを16ビットの解像度でカウント します。 このようにして、25ビットのハード ウェアカウンタ(16ビット T / C1 + OC0B ビット + 8ビット T/C0)を取得します。
さらに6 ビット相当の解像度がソフトウェアに よって実現されます。 測定の間、測定を停止さ せるフラグを待機しながらプログラムはループ で実行され、継続的にタイマ / カウンタ1オー バーフローフラグTOV1を蓄積していきます。 TOV1が設定されると、プログラムは6ビットSWカウンタを1進め て、TOV1をクリアします。 停止条件の認識を遅らせ る結果となるため、ここで は中断は使用されませ ん。 31ビットカウンタは、2,147,483,647μsま でカウントすることができます。31ビッ トカウンタは、2,147,483,647 μs までカウントすることができます。
実用上の理由で、1,800,000,000 μs (30分)がμsレンジの最大測定時間となりま す。 msレンジは、分周係数 8によってシス テムクロックのプリスケールが行われた場 合を除き、おおよそ同様に認識されます。 測 定結果が125で分周された後、最大値の 17,179,869 msが与えられます。 実用 上の理由で、14,400,000 ms (4時間) がmsレンジの最大測定時間となります。 外部インタラプトベクトルINT0が実行される とすぐに、立ち下がりエッジまたは立ち上が りエッジがATtinyピンPD2 (トリガスロープ はS2 1-8の設定に依存)で認識された時点 で、測定が開始されます。 外部インタラプトベクトルINT1が実行されるとすぐに、立ち下が りエッジまたは立ち上がりエッジがピンPD3 ( トリガスロープはS2 2-7の設定に依存)で 認識された時点で、測定が停止されます。
プロジェクト用に開発されたプログラムは、[1] から無料でダウンロードできます。 プログラム は、インタラプト用の組み込みアセンブラコー ドやその他挿入される時間重視のルーチンと 共に、BascomAVRに書き込まれます。 メイ ンループではプログラムがS2のスイッチを繰 り返し監視し、測定を開始して結果を表示しま す。 前回の読み取りが行われたときからスイッ チの設定に変更があった場合は、新しい測定 レンジ、モード、開始 / 停止スロープが決定さ れ、ディスプレイの最初の行が更新されます。
測定ルーチンの最初の時点で、タイマ / カウン タカウンティングレジスタとソフトウェアカウン ティングレジスタ(26-31ビット用)がクリアさ れ、OC0Bビットがリセットされて、外部インタ ラプトINT0が有効になります。 その後、INT0 インタラプトを待機しているプログラムループ がINT0インタラプトルーチンを起動します。 このルーチンでは、タイマ / カウンタ0が開始 され、いくつかのカウンタが初期値に設定され ます。LED D3がオンになり、INT0インタラプ トが無効になって再トリガが無効になり、代わ りにINT1インタラプトが有効になります。 プ ログラムはループを継続し、INT1インタラプト を待ってINT1インタラプトルーチンを起動し ます。 このルーチンでは、タイマ / カウンタ0 が停止し、外部インタラプトも無効になります。
プログラムの開始時点でタイマ / カウンタ1が開始され、タイマ / カウンタ0からのパル スをカウントし、同時に開始と停止が行われ るため、プログラムの実行中はそれを停止し たり再起動したりする必要はありません。
測定ルーチンが両方の外部インタラプトが 無効になったことを検知すると、測定が終 了します。 結果がハードウェア(HW)レジス タとソフトウェア(SW)レジスタから収集さ れ、LED D3がオフになります。いくつかの計 算が実行され、測定されたタイムインターバ ルがディスプレイの2行目に表示されます。
正確を期するため、カウンタのHW部分がク ロックパルスをカウントするため、カウントで 間違いが生じる可能性はありません。 SWカ ウンタ拡張は、タイマ / カウンタ1のオーバー フローを数サイクルの遅延でカウントします。 ただしタイマが停止すると、カウンタのSW部 分がそのHW部分と同期されます。 INT0お よびINT1インタラプトルーチンは注意を払っ て書き込まれ、ルーチンの開始から1つのル ーチンでタイマ / カウンタ0が開始された瞬 間までの遅延と、別のルーチンで停止された 瞬間までの遅延が正確に同じになります。 外 部インタラプトが起動された瞬間から、インタ ラプトルーチンが実行を開始する瞬間までの 間には、わずかな遅延があります。 この遅延 の長さは、インタラプトが起動された瞬間に 実行される命令によって異なります。 したが って1-4クロックサイクルで実行される命令 には、最大3クロックサイクルまでの差異が あります。 しかし、タイマ / カウンタ0は8で 分周されたシステムクロックをカウントする ため、両方のレンジ(μsおよびms)の最後の桁でのみ± 1のエラーが生じる場合がありま す。 したがって、全体的な精度に大きな影響 を与える唯一の要因は、水晶の精度です。デ ィスプレイ上で「t = 123456789 μs」と 表示されている場合を考えてみてください。
次に考えなければならないことは、msレン ジで数時間継続される測定時間のことで す。 そのために、ウェイティングループの間 (測定中には、開始信号と停止信号を待つ2 つのウェイティングループがあります)特別 なSWカウンタが有効になります。 このカ ウンタは、定義された最大の測定時間まで カウントを実行し、それが経過すると、測定 を停止して「t > 14400000」を表示しま す。 当初は、最大測定時間は許容最大値に 設定されています。すなわち、μsレンジでは 30分、msレンジでは4時間となります。
他のスイッチと同様に、S2 4-5は測定が 開始される前に読み取られます。 ただし、 このスイッチが閉じられている場合(そし てワンショット / ホールドモードが有効な 場合)、プログラムの動作は異なります。
開始信号を待つ間、最大測定時間カウン タはブロックされますが、停止信号を待つ 間は再度有効になります(パルスの持続 時間が最大測定時間に限定されている場 合でも、非繰り返しパルスが発生するまで の待機時間を無限にすることが可能)。
結果が表示されるとプログラムはループで待 機し、S2 4-5を常時監視して、スイッチがオ ープンになるとただちに動作を継続します。
初めて使用する前に、プロジェクト用に提供 されるプログラムTmeter_Elektor.bas を、ATtiny2313マイクロコントローラにプ ログラムする必要があります。 デフォルトでは 内部RC発振器が選択されているため、必ず フラッシュヒューズビットCKSEL3...0を外部 水晶共振器(CKSEL3…1,0 = 1111)に合 わせて適切な値に設定してください。 水晶の 周波数が正確に8.000 MHzであることがと ても重要です。これにより全体の精度が決定 されます。 水晶の周波数を調整するために、ト リマC4が用意されています。 水晶の精度が 満足のいくものである場合は、C4を固定のキ ャパシタに交換します。 また、正確な水晶発振 器を使用してマイクロコントローラを駆動する こともできます。この場合は、C4、C5、および X1を除外して、その発振器の出力をXTAL1 の入力に接続します。 P1を調整して、ディス プレイのコントラストを最適な状態にします。
プログラムでは、当初は以下の ように最大測定時間が一定のも のとして定義されています。
-
Const Tmax_us_default = 1800
(μsレンジの最大測定時間[s])
-
Const Tmax_ms_default = 14400
(msレンジの最大測定時間[s])
示された値は最大測定時間の推奨値で すが、ユーザは以下のように適切なより 低い値に置き換えることもできます。
-
Const Tmax_us_default = 60
(μsレンジの最大測定時間[s]) -
Const Tmax_ms_default = 300
(msレンジの最大測定時間[s])
これにより、最大測定時間をμsの場合 で60 sまで、msの場合で300 sまで それぞれ短縮することができます。 もち ろんそのような変更を行った後は、プロ グラムの再コンパイルを行って、マイク ロコントローラを再プログラムする必要 があります。 入力レベルが一定の場合、 プログラムはループを実行し、最大測 定時間が経過するのを待つため(または レベルの推移の発生が遅すぎる場合、 最大測定時間の2倍までの時間が経過 するのを待ちます)、適切な最大測定時 間を選択することがとても重要です。
最大測定時間を変更するもう1つ の方法は、マイクロコントローラの EEPROMに適切な値を16ビット符 号なし2進数値としてプログラムする ことです。表 2を参照してください。 こ れらの値は、秒単位で指定します。 プログラムロジックは以 下のようになります。 EEPROMが空の場合(FFh)、 プログラムで定義されている最 大測定時間が使用されます。 μsレンジのEEPROM値が1800より 大きい場合は、プログラムで定義されて いるその最大測定時間が使用されます。 msレンジのEEPROM値が14400より 大きい場合は、プログラムで定義されているその最大測定時間が使用されます。 EEPROM値が許容レンジ内にあれ ば、プログラムで定義されている対応 するレンジの最大測定時間の代わり に、そのEEPROM値が使用されます。
表2 | ||||
EEPROMアドレス | EEPROM値 | |||
000 0000 | LSB | 最大 μsレンジの測定時間 [s] | ||
000 0001 | MSB | |||
000 0010 | LSB | 最大 msレンジの測定時間 [s] | ||
000 0011 | MSB |
メインプログラムループの開始時に、 構成スイッチが読み取られます。 実 行中の測定が終了してその結果が表 示されるまでの間、古い設定と以前の 結果が表示されるため、このことが長 時間継続される測定との間で混乱を 生じる場合があります。 新しくスイッ チを設定した後でマイクロコントロー ラを適切にリセットすることで、処理 をスピードアップさせることができま す。 マイクロコントローラをリセットす るには、リセットスイッチを押します。
ワンショット / ホールドモード では、以下の方法で新しい測定 を開始することができます。
S2 4-5をオープンして継続測定を 再起動するか、マイクロコントロー ラをリセットしてワンショット / ホー ルドモードを再度開始します(この方 法でホールドモードを再起動するに は、S2 4-5を素早くオープン / ク ローズすることはできません)。
最後に、入力パルスにはTTLまたは CMOS互換のロジックレベルを持たせ る必要があります。 バウンシングやリン ギングが起きないように、 エッジを適切に定義するこ とがとても重要です。
インターネットリンク |
[1] www.elektor.com/080876 |
ダウンロード&製品 |
PCB: 080876-1 PCB設計 www.elektor.com/080876 からダウンロード |
プログラム済みコントローラ: 080876-41 ATtiny 2313、プログラム済み |
ソフトウェア:080876-11 Bascom & アセンブリコードプログラム |
ページの先頭へ