Untitled Document

RSからの技術記事とお知らせ

RSのご利用は初め
てですか?

RSオンラインにご登録いただくとRSより最新の製品及び技術情報をお届けします。

ATtiny を使ったタイマ/インターバルメータ

Vladimir Mitrovic氏、Croatia

このプロジェクトでは、使いやすい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 & アセンブリコードプログラム

その他の技術記事をご覧になるには www.designspark.com/jpn/ をご覧ください。 Designspark.com はRSが運営するエンジニアのためのコミュニティーサイトです。

ページの先頭へ