PIC 61:RTC(I2C)の代わり


タイマー

 今回の実験はI2Cのバスを使って、スレーブ動作側を作りたいと思いました。自分でタイミングを作るのは面倒なので先輩の作ったソフトを利用させてもらいます。多少ブラックボックスの部分(タイミングを調べるのが面倒なので・・・)がありますが、動き出しましたのでここにレポートしておきます。

 以前[タイマー]を作りました、今回もこれをそのまま利用しています。表示が3桁のLEDなので簡単なタイマー動作です(相手は確実に動作する物が良いですね!)。
 A/D変換をICは内蔵しているので色々な物を作ることが出来そうです。商売を兼ねている所ではこの辺のSoftはまったく公開していませんから、大・・感謝です。

回路図

A.基本動作

 ICはPIC16F88を使いました、このICはI2Cのコントロール関係のハードが組み込まれています。これを利用するとSoftつくりが簡単でしかもSoft負担が凄く軽減され助かります。ICはこの16F88の他16F819や上位のPIC(PIC16F87Xなど)にはハード端子が出ています。

 Softで作りたくてもI2Cコントロールをオープンドレインになっていないので、単品なら問題なく出来ますが複数接続する場合問題が出ます、また外部に部品を追加するのも面倒です。

スレーブ動作 (マスターからの指示で動作をします)

@Startを検出し、Deviceのスレーブアドレスの一致を確認する。
Aレジスターの位置を受け取る。
BDataを受け取る場合はIへ
 読み出す場合 Sr=スタートを受け取る。
CDeviceのアドレスの一致を確認する。
DレジスタのDataをマスターへ送出する。
Eアクノリッジがあれば、次のレジスタの位置にしてDへ戻る。
F無いので終了。

	IDataを受け取りレジスターに保管する。
	Jアクノリッジがあれば、次のレジスタの位置にしてIへ戻る。
	K無いので終了。

これらをSoftで処理するのはかなり面倒ですが、ハードで処理する場合は
A 「スレーブアドレス」の設定(今回は時計ICと同じ)
B 管理するレジスタの設定(今回は5個)
C 何時でも処理できるよう割り込みの設定をする。プログラムはややブラックボックスのプログラムをそのまま利用する。

 メイン・プログラムは管理レジスタの読み込み、書き込み等をする。
 I2Cはあくまでも、マスターが読み書きを実行し、スレーブは応答して送信・受信をするだけです。

 PIC16F88はRB1(SDA),RB4(SCL)の端子を使います、このピンをハードでコントロールするのでSoftは割り込みを利用して僅かなプログラムで処理が出来ます。

B.内部動作
 I2Cの割り込み処理はSoftにまかせ、私たちはレジスターのコントロールだけに集中すれば良いのです。
 今回はタイマー動作なので、本当はレジスターを2個用意すれば十分なのですが、時計ICの変わりにさせるのでコマンドレジスター分(使っていない)を2個確保し、全部で5個用意しました。

 アドレスは時計ICの代わりなので同じアドレスにしました、[10100010]です。タイマーは「1秒間隔で繰り上がる」という単純なものです、それを(現状は少しチラツキがある)7セグメント式のLEDで表示する物です。

D.作ってみると!
 当初まったく動きませんでした。
A.割り込み許可(PIE1.SSPIE)を入れ忘れて無反応でした。
B.コマンドの打ち込みミス
C.マスター側の動作で「初期設定でクリヤーし」ているのを忘れてDATAが消えました。これに気が付くまでかなりかかりました。
D.ライブラリーに使ってないSoftも含まれていたので、それを消した時に大事な物まで削除してしまった(うっかりミスが続く・・)。等など色々あって、何日かでようやく動き出しました。

E.応用
 今回はタイマーと簡単な動作テストですが、マスター動作のプログラムはアチコチに出ているのですが、コントロールされるスレーブ側はほとんど出ていなかったので助かりました。
 今後も利用される方も多いと思います、美味い物が作れれば皆さんに使ってもらえる物が出来るかも知れません。
 今回使った[プログラム]はこれです。たった200バイトぐらいしか使っていません。

 制作 2010/3/29


 [MENU] [MAIN MENU]

inserted by FC2 system