PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第139回]
●PICUSBIO−03(88)I2Cモード(10)マスターモード(9)DS1307受信プログラム(3)
前回からの続きです。
DS1307受信プログラムが1回は正しく実行できるのですが続いて同じプログラムを実行するとまともに受信できません。
DS1307はND80KL/86ボードや新独立化セットでも使っていますがそんなおかしなことにはなりません。
そのプログラムと今回の受信プログラムではどこかに違っているところがあるはずです。
そう思って当時の製作記事をじっくり読んでみたところ違っているところがみつかりました。
ROM/RAM/RTCボードの製作[第8回]
やっぱり説明は隅から隅までしっかり読むべきでありました。
データの受信(DS1307の送信)についての説明図です。
[出典]Maxim Integrated Products,DS1307 Datasheet
8ビットデータを受信したあとにはACKを送りますが最後のデータのときだけNACKを送っているようです。
自分で書いた記事なのに、そんなことなどすっかり忘れてしまっていました。
でもNACKはいわば「受信エラー」のしるし。
それでよいのか?なぜ?
しっかり注記(NOTE)まで書いてありますからそのようにすべきということでしょう。
NOTE:最後のデータにはNACKを送ります。
なぜそのようにすべきなのかについては疑問に思いつつプログラムをそのように直しました。
FOR NEXTのループを1回減らして最後のデータの受信後はSSPCON2のbit5を1にしました。
SSPCON2のbit5を0にするとACK、1にするとNACKが送られます。
そのように変更したプログラムを実行したところ繰り返し実行しても正しく受信できるようになりました。
これにて一件落着と言いたいところなのですがまだ納得できない気持ちが残っています。
なぜ最後のデータだけNACKなのか?
そこのところがまるでのどに刺さった小骨のようになんとなく気になります。
そういうことなのだということにしてしまってもよいことなのかもしれませんが、なんとかそこのところをクリアしてすっきりした気持ちで新年を迎えたい気持ちです。
かくて師走の貴重な数日をそのために費やすことになってしまいました(それだけにかかっていたわけではありませんが)。
次回に続きます。
PIC−USBIO using BASIC[第139回]
2022.12.27upload
前へ
次へ
ホームページトップへ戻る