1線式通信 A (@は下にあります)
[ 初めにLED表示! ]
実験をする為に表示器が必要で、avrで作る事にしました。3桁のLEDをコントロールするのですが、タイミングを取って表示するだけなのでavrのAT90S2313を使いました。
特に理由はありませんが、手持ちがゴロゴロしている為です。PICでも少しの変更で動くと思います。動作は
A.タイマー0を使って4mSを作り、この信号ごとに桁の表示をさせます。
これでも、チラツキはありませんので十分実用になると思います。
B.桁のDATAは取りあえず[123]と表示させた。
C.基本的なことなのでややっこしい事はやっていません。当初動きませんでした。これは「単なるアドレス設定ミス」がありました。タイマー0のオバーフロー(割り込み)アドレスを勘違いしました。
オバーフローの方に設定して動きました。(連休疲れで頭がボヤーとしていたのかなー!)今後はDATA受信プログラムの挿入と別基板で送信側を作る予定です。
この時点の[プログラムはこれ]です。2011/5/15
1線式通信 @
I2C式のDATA通信を使っています、また別の2線式通信も試して見ました。
2線式の基本は「1本がクロックを送り、そのタイミングで片方からDATAを受け取ります。
途中でクロックを変動させる事は普通ありません、クロックでDATAを受け取る方法ではなく、予め特定のタイミングを決め「それによってDATAを取り込めば受け取れる」と思います(どこかで見た感じもしますが…)。[ 決めごと ]
A.予めクロックを決めておく(今回暫定で20μSec)。
B.スタート信号を全ての基準にする。
C.ビット長は一般的な8bitとします。これらから具体的にすると次の様に考えて見ました。(今後変わるかも知れない)[ 受信と送信 ]
受信側 送信側 @:初めは[1]の状態。 [1]なら送信を開始する。 A:[0]を確認すると立ち上がりを待つ。 [0]にして10uSec、そして[1]を出す。 B:信号が[1]になるのをスタートとする。 (Start bit) C:10uSec後にDATAを受け[1]ならOK。 20uSec後に[0]を出す。 D:20uSec後にチエック[0]ならOK。 E:CDがOKなら20uSec毎にDATAを受ける。 8bitDATAを送る。間隔は20uSec 〜Lまで M:信号は[1]になる。 信号を[1]にして終了。 Dに付いては無くても作動するので省略するかも知れない。Stop bitとして後ろに回すのもあるかなー。
この項目はしばらく中止します。
2011/5/3 作成
[ パソコン過使用の警告器 ]
1線式通信を中止して「パソコン過使用の警告器」を作る事にしました。以前作った物はLCD式で夜使うことが多いので文字が見難い、そこで急に製作変更しました。
今回も「30分ごとにBEEP音がする」という単純な物です。時計(タイマー)機能を追加するだけです。元々AVRも古いもので「10mAはきりますが結構電流を消費します」が、在庫がたくさんあるので使っているだけです。
[ Soft関連 ]
動 作]
LED0.LED1.LED2の3桁動作で割り込みを使って順次(約4mSec)表示する。桁カウンターから1秒を作っている、これから分・時間を作り表示させています。タイマー(タイマー0)]
LEDの点灯は1桁4mSecで動作させるのにタイマー0を使い、3桁なので12mSecで一周します。プログラム的には
A.前回表示のLEDをoff
B.その桁のDATAを7-LEDのdataにしてPortへ転送
C.LEDをonで表示され、見える。
カウント・アップ]
LEDは4mSecで動いているので82回すると約1秒です、これを元に60回で1分、更に10回で10分、60で1時間となる(Max9時間)。
ビープ音]
メインプログラムで「0分か30分で0秒」の時約3KHzの音を出す(アラーム)。他は何もしない。結 果]
6時間で約1分早く表示した、これは1/360。それと「000表示で消費電流は28mA」でした。
誤差に付いてはタイマー1を使ってないので、こちらでカウントアップをすればもっと正確になったかも。
(4MHz(0.25uSec)*256*15625で1Secになる)。こちらは温度計などは付けていません。現在の[プログラムはこれ]です[SW_RX()は使っていません、Softはまだ消していません]。(2011/6/8)