AKI社の広告で20ピンのAVRマイコンが,1個100円というのを見つけました。
これまで,PICを使っていた一部を置き換えられます。また,100円となると4000シリーズや74HCシリーズの一部のICは,マイコンに置き換えた方が安くなります。
実際にどう使うかは脇において,まずはAVRのプログラミングの勉強として,4017や4022のカウンタICの強化版のICを作ってみました。なかなかうまくいきました。
概要
・ 2進〜12進までの任意のカウンタを選択可能。
・ カウントアップを0からとするか,1からとするかを選択可能。
・ クロック周波数上限は,約5kHz。
・ 動作電圧範囲,2.7〜5.5V。
・ I/Oピン直流電流,40.0mA/pin。
・ VccおよびGND直流電流,200.0mA。
・ クロックの立ち上がりで,カウントアップ動作。
動作解説
基本機能
・ クロックの立ち上がりごとに,Cnt_1,Cnt_2・・・と順番にHiレベル信号を出力します。
・ INI端子を,接地しLoとなるように結線すると初期状態「1」からのカウントアップとなり,電源に繋いでHiとなるように結線すると「0」から のカウントアップとなります。
・ Return端子とCnt_Xを結線することにより,Cnt_XがHiとなった次のクロックでリセットされ初期状態に戻ります。
8進カウンタを例に採ると,INI端子を接地し,Cnt_8とReturn端子を結線すると,初期状態でCnt_1がHi,クロックごとにHi端子がCnt_2,Cnt_3・・・Cnt_8,Cnt_1,Cnt_2・・・となります。
8進カウンタでも,INI端子をHiとし,Cnt_7とReturn端子を結線すると,初期状態で全Loレベル(「0」を出力と考える),クロックごとにHi端子がCnt_1,Cnt_2・・・Cnt_7,全Lo,Cnt_1・・・となる,やはり8進カウンタになります。注意すべきことは,INI端子にHiを入力したとき,Cnt_8とReturn端子を結線すると,0,Cnt_1・・・Cnt_8間で動作する9進カウンタになってしまうことです。
注意事項
・ ICのPin4,Pin5には常時Loが出力されていますので ,この2つの端子はどこにも接続せずに,浮かして使ってください。
・ クロックの立ち上がりから,Cnt_Xの出力までに,最大200μsecの遅れが考えられます。クロック周波数上限の5kHzは,これが理由と なっています。
・ INI,Return,Clockの各入力端子は高インピーダンスの入力になっていますので,これらの端子がオープンになると動作に異状を生じ ます。これらは,必ずHiかLoに接続し,オープンにならないようにしなければなりません。
・ (Neg)Reset端子はLoでリセットですから,カウンタを動作させるためにはここを常時Hiとしなければなりません。強制リセットを掛けると きにはここを接地しますので,強制リセット回路を設けるときは,(neg)Reset端子を10kΩ程度のプルアップ抵抗を通して電源に接続しな ければなりません。
テスト回路
下図のようなテスト回路で,満足な動作を得られました。
Clockには,本サイトの「電子工作一般」の「デジタル回路用スイッチ」のFlip-Flop出力を接続して,手動でクロックを入力しました。
INI選択と,Retrurn選択はスイッチで示してありますが,実際にはクリップワイヤーによるジャンパーで行いました。
所感
AVRマイコンのプログラム勉強として手がけてみましたが,満足できる結果となり,今後いろいろなものを手がけてみることになるでしょう。
100円で,これだけの機能を持たせられれば十分とは思いますが,実際に使おうとすると,クロックにはマイコンの内部クロックを使う方がどう考えても有利です。したがって,本IC”DUT12”は,マイコンプログラムの環境がない人の用に供することになるでしょう。
最大クロック周波数が5kHzというのは,ずいぶん低い値で動作が遅いのですが,自分がこの種のIC(4022等)を使う場合,数10Hz以上で使うことが考えられません。自分では,十分の速さと思っています。
これまでは,完成したICについての議論でしたが,マイコンプログラミング上の気づき点があります。
・AVRマイコンでは,コード上に表現されないフューズビットおよびロックビットの設定を,コードのマイコンへの書き込み時に行う必要があります。今回は,これらはデフォルトのままとして,書き込みを行っています。一般的には,フューズビットおよびロックビットの設定をコードのコメントとして防備録に利用しているとのことでした。
・クロックによる割り込み処理に,最大40インストラクション必要で,平均2サイクル命令とすると80命令サイクルとなります。2.5倍の余裕をみると,200命令サイクル。本マイコンは,1MHzで動作させていますので,200μsecかかることになります。
人工透析治療を受けていますが,結構太い注射針を血管に打ちますので,注射針を抜いてから針痕から血液が漏れてこないまで完全に止血するのに,それなりの時間がかかります。教科書では,20分とされているそうです。
そのため,患者さんと看護師さんが「20分経った」「まだまた」とやるのをちょくちょく耳にします。
そこで,20分タイマーを作ってみました。無線機のSメータ用にとストックしていた10連3色LEDを利用しました。
マイコンは,AVRのATtiny2313を選択しました。この度の装置では,ATtiny2313の16ビットタイマーのCTCモードで,PICより楽に1秒のインターバルタイマーを構成できます。
スタートスイッチを押すと直ちにPD5のLEDが点灯します。そして,4分後にPD6,6分後にPB0,さらに2分毎にPB1,PB2と順次点灯して行き,20分後にPB7の点灯で全点等状態を保ちます。
結果
20分が,19分になったり21分になったりしますが,装置の目的からは特に問題はありません。
10連LEDがあったために発想したものですが,スタートして2分後のLED点灯が抜けてしまうので,普通のLEDを11個並べる方が良いのかもしれません。