2017.7.11
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
ROM/RAM/RTCボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第8回]


データの受信

前回はDS1307のICを使ったデータ送信について説明をしました。
相手はRTCですから送信よりも受信のほうが使用頻度がうんと高くなります。
送信はホスト(CPU)からどちらかというと一方的にデータを送出するだけですから、信号の流れはシンプルです。
それに対してDS1307からのデータ受信は手続きがちょっと複雑です。
送信の場合と同じように通信の開始はホスト(CPU)からスレーブ(DS1307)にデバイスb送信するところから始まります。
ここはデータ送信の場合と同じです。
そのあとすぐにデータの受信ができればよいのですが、ここで問題がひとつあります。
通信のモードを受信にすると、ホストが送出するクロックに合わせてDS1307から時刻データが送信されるのですが、それは「前回最後に通信を終了したときのアドレス」のデータから送信が開始されます。
プログラムで読み出すことを前提とすると、読み出し開始アドレスは常にレジスタbOであってほしいのですが、何の前準備もなしに読み出すとどのレジスタのデータが送信されてくるかわかりません。
そういうことになると、実際の受信に先立って、まず読み出し開始レジスタのアドレスをbOに設定する必要があります。
ちょいと面倒です。

下はデータ受信の例です。

[出典]Maxim Integrated Products,DS1307 Datasheet

Sはスタート信号でPはストップ信号です。
最初はマスターから送信を開始します。
送信の場合と同じように通信の開始時にまずスレーブに固有アドレスを送出します。
DS1307の場合にはアドレスは1101000の7ビットです。
8ビット目が送信か受信かを示すR/Wビットです。
マスターからスレーブへの受信はR/Wビットを1にします。
その後にはスレーブからのアクノリッジ(Lレベル)が送られます。
その後はマスターから送出するクロックに合わせてDS1307から8ビットのデータが送出されますから、8ビット受信ごとに9クロック目にホストがアクノリッジ(Lレベル)を送ります。
ホストとして必要なデータを全て受信し終わったら最後の8ビット受信後の9クロック目にはNACK(Hレベル)を送出したあとストップマークを出力して通信を完了します。

ということなのですが、上の受信例では最初のレジスタアドレスb0に設定するところがありません。
ここは次のようにすればよいと思います。
@送信モードでアドレスbOを指定する(この部分はデータ送信の場合も同じ)
Aそこで送信を終了してストップマークを送る
B受信モードで通信を開始する

実際にそのようにプログラムして試したところ、うまく送受信できましたので、多分そういうことでよいのではないかと思います。

次回は作成したテストプログラムとその実行結果について説明いたします。

ROM/RAM/RTCボードの製作[第8回]
2017.7.11upload

前へ
次へ
ホームページトップへ戻る