LEDの表示は1mSecで処理しています、これ以上のI2Cプログラムは処理中に止めなければなりません。この為一時的に表示を止めるので、一部連続表示されその部分が明るくなり、全体としてチラツキが感じられます。プログラムはまだ改善の余地がありますが、メリットもあればデメリットもあるということでしょうか。
以前[タイマー]を作りましたが、3桁の精度は保てたので「良し」としたのですが、気になり以前秋月電子で購入したRTC(時計用IC)基板をを出して動かして見ました。
表示が3桁LEDなので充分ではありませんが「9分59秒」までの表示が出来ます。
これで動作の確認が出来ればと思い実験をした所、作動したのでここに出しておきます。アセンブラからCのプログラムへ
以前アセンブラーで動かした時、すごく面倒だったと記憶しておりました。その為直ぐ箱に入れ何年も過ぎていたものです。
時計ICが遊んでいるのを思い出して、試してみると簡単に動きました。桁表示が3桁なので不十分なのですが、動作の確認だけなのでこれで良しとしました。思った以上、Mikro CProは簡単に動きました、アセンブラのプログラムで苦労したのがうそのようです。
PIC16F88はI2Cの専用端子があるのですが、既にLEDで使っているのでSoft-I2Cを使いました。コマンドは同じですが、使用メモリーが多くなるだけと思います。Soft-I2Cに慣れておけば、応用が利きそうです。A.タイミングは
0.2秒で1回DATAを取り込みます。動作中は割り込みを禁止し表示をStopさせ、DATAの受け取りに集中します。待ち時間中にLEDを表示するのですが少しチラツキがあります。
LEDの表示は1mSecのスピードで1桁を表示し、次々とスキャンさせています。I2CのDATA取り込みは今回5mSecほど使っているようです。
コネクターは手持ちの5ピンの端子を使いました。実際の使用は電源とSCL,SDAの4本です。PIC16F88のRA1,RA2を使いました、このピンをSoftでコントロールします。写真では上の追加ミニ基板上にRTC-8564を付けています。
B.コントロールのパターン
I2Cのコントロールの仕方はアチコチに出ていると思いますが、ポイントは次の通りです。
初期設定は各ICにより変わりますがRTCの場合は「各レジスタをリセット」というのが出ていました。
コントロール側をCPUでマスター、される方(RTC)をスレーブといいます。どちらも送信や受信をします。マスター側がSCL、Start,Stopの信号を出します。
C言語の読み出し手順
Soft_I2C_Start(); //Startコマンド Soft_I2C_Write(0xA2); //Device + write Soft_I2C_Write(2); //Address Soft_I2C_Start(); //Repeated Start Soft_I2C_Write(0xA3); //Device + read Seconds=Soft_I2C_Read(1); //秒 1=アクノリッジ Minutes=Soft_I2C_Read(0); //分 0=ノーアクノリッジ Soft_I2C_Stop(); //Stopコマンド基本的にはこれで読み出します。終了してから読み出した秒や分を7-LEDのDATAなどに変換し表示するプログラムが続きます。
これをサブルーチン化して必要に応じて呼び出します。
途中RS(Repeated Start)が入り、その前のアドレス分のレジスタが呼び出されるのがポイントでしょうか。ハード動作の場合(特定ピン使用)は「Soft_」が全て不要となります。
細かいタイミングは、全てライブラリーが自動で動作するので指定は不要で、アセンブラに比べ楽です。その分メモリーは余計に使われますが、トラブルの少なさを考えるとメリットは大きいと思います。
今回作ったプログラムは590バイトでした。2KBまで使えるのでまだだいぶ残っています。D.問題点
LEDの表示は1mSecで処理しています、これ以上のI2Cプログラムは処理中に止めなければなりません。この為一時的に表示を止めるので、一部連続表示されその部分が明るくなり、全体としてチラツキと感じられます。E.他のIC
ここでは時計用のICを使いました、他にRAM・EEPROM・温度検出などのICが売られています。他にもあると思いますが、詳しく調べていません。
今回使った[プログラム]はこれです。制作 2010/3/7