avr atTiny13a 10:DATA-通信


 Tiny13aを表示に使う 

[ 8PinのICを使って表示 ]
 8PinのICは使えるピン6本しかありません、少し使えるI/Oが増えると使い易くなるのではと思い、I/Oを増やすシフトレジスターの様な物を考えました。
 専用のICがあって早いのですが、手元のTiny13aを使っても出来そうです。

 まず、1ビットを通信用に使い、後の4bitをメインMCUでコントロールという事にしました。リセット端子を無理すれば使えるのですが、これはその時考えます。

[ TX-RXの1ワイヤー式 ]
 受信部分はPB0からPB3までの4bit、PB4をコントロールにします。送信は同じPin番号を使いました。
 フオマットはスタートビットを付けて全5ビットです。タイミングは分からないので、初め1bitを1mSecで送って見ました。
 「1ワイヤー式」といっても赤外線で送信するのと似ています。有線でするか赤外線にするか程度で大きく異なりません。

[ タイミング ]

 送信側(TX)は
1] 信号線をノーマル[1]にして置きます。
2] 信号を[0]にしてスタートです。
3] タイミングは(取あえず)1mSecの時間をとる。
4] 信号線を[1:スタートbit]にする(受信側はこれを基準にする)。
5] 1mSecの時間をとる。DATAビットを準備する。
6] 初めのビット、1なら出力を1に、0なら出力を0する。
7] 5]6]を繰り返し、4bit分送る(ストップビットは無い)。
8] 信号線を[1]にして終了(入力端子にしてプルアップもあるかなー!)。

 受信側(RX)は
1] 信号線を監視し[0]になればスタートします。
2] 0.8mSec待ち準備する。
3] 信号線を見て[スタートbit]を待つ。
4] [1]になれば0.5mS待ち、タイミングを中間に保つ。
5] 信号を読み取り、DATAを保存する。1回目はスタートビットなので必ず[1]になる。
6] 1mSecの時間を取り次のビットを待つ。
7] 5]6]を繰り返し、4bit分受け取る。
8] これで終了、信号線が[1]になって終了。
9] 通信はこれで終わり、受信したDATAをプログラムに受け渡せば完了です。

[ MCUのソフト ]
 上記のアルゴリズムをソフト化するわけですが、発振周波数は何時も使う1.2MHzに設定しました。
 9.8MHzの発振ですが初期設定で10%以下の誤差で作動しているはずです。実際の誤差は5%ぐらいのブレで使えると思います。細かい調整は必要ないと思われます。

 ICのhex DATAです。プログラムはこれです。
 2014/11 サブルーチン方式にした(Ver 2)。

S-TX

:1000000036C0FECFFDCFFCCFFBCFFACFF9CFF8CF74
:04001000F7CFF6CF61
:10006E00BFE9BDBFB0E0BEBF2F92B0E1B7BBB8B322
:10007E00B061B8BB10E105E90A95F1F71A95E1F701
:10008E00B0E0B093610000916100083090F42090D0
:10009E006100B9DF22E018E30EEA0A95F1F71A952E
:1000AE00E1F72A95D1F7009161000F5F009361008F
:0600BE00EACFE6CFFFCF00
:10001400B8B3BF7EB8BB04E10A95F1F7B8B3B061D9
:10002400B8BB04E10A95F1F7B4E0B0936000022D87
:100034000870083021F4B8B3B061B8BB03C0B8B3DA
:10004400BF7EB8BB022D000F202E0091600001502E
:100054000093600004E10A95F1F700916000002329
:0A00640031F7B8B3B061B8BB0895DE
:00000001FF

S-RX

:100000004CC0FECF3BC0FCCFFBCFFACFF9CFF8CF2F
:04001000F7CFF6CF61
:10009A00BFE9BDBFB0E0BEBFBFE0B7BBB0E0B8BB11
:1000AA00B0E1B5BBBBB7B062BBBFBFB7B068BFBF3B
:0400BA00FFCFFFCFA6
:10007C00EF93FF93BF93BFB7BF93BAB7BF7DBABF20
:0E008C00C3DFBF91BFBFBF91FF91EF911895E9
:10001400B6B3B4FF01C0FCCF00E10A95F1F7B6B363
:100024004E7FB4FF416040FF01C0F9CF0EE10A9555
:10003400F1F7B4E0B0936000B0E0B09361000091D8
:100044006100000F00936100B6B3B4FF05C00091D6
:1000540061000F5F00936100009160000150009304
:10006400600004E10A95F1F700916000002339F77C
:080074000091610008BB089532
:00000001FF
[ 動作させて! ]

 初めはタイミングを1mSecで実験をしていましたが、プログラムは100uSecにしています。その後50uSecより少なくっても作動しましたので、安全を見て[100uSec]にしています。
 これだと5bitのDATAですと全体として1mSec以下で終了します。
 今回は、予め用意したDATAを送り受信側のピンにそのDATAが出ているか、LEDで点灯ピンに触って確認する方法を取りました。

 今回実行させてのトラブルはほとんどありませんでした。スピードを上げて行って、動作の確認に手間取ったぐらいです。
 これは半分、半分とスピードを上げその度DATAの確認をして行きました。

製作 2013/12/17 


 [MAIN MENU へ戻る]

 

inserted by FC2 system