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


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第135回]



●PICUSBIO−03(84)ICモード(6)マスターモード(5)DS1307送信プログラム/PIR1

今回はDS1307に日時データを送信するPICUSBIO用BASICプログラムを作って実行します。
下が作成した送信プログラムです。

10行でTRISBに$FFを設定します。
SDA(RB4)とSCL(RB6)の向きを入力にするためです([第131回]参照)。
20行でSSPCON1をクリアします。
もしもWCOL(bit7)とSSPOV(bit6)がセットされていたらソフトウェアでクリアしなければなりませんから念のためです([第130回]参照)。
30行でSSPSTATのbit7を1にbit6を0にします([第130回]参照)。
40行であらためてSSPCON1に$28を設定します。
SSPEN(bit5)=1(SSPモジュールイネーブル)、bit3〜bit0=1000(送信モード)です。
今気が付きました。
ここでbit7=0、bit6=0にしますから20行は不要でした。
50行でSSPADDに$77を設定します。
クロックを100KHzにするためです([第132回]参照)。
ここまでで初期設定は終わりです。
60行はSTARTコンディションです([第132回]参照)。
70行でPIR1レジスタの値を読み込んで表示します。
PIR1はどこかで説明したと思ったのですがちょっと見たところでは見つかりませんでした(書いてなかったかもしれません)。
参考までに今回の記事の最後のところで引用しておきます。
70行はPIR1のbit3(SSPIF)がセットされることを確認するためです(必須ではありません)。
ここから下が実際にDS1307にデータを送るところになります。
かなり省略したプログラムです。
ルール通りに書くと長くて面倒なプログラムになってしまいます。
PICUSBIO用BASICのpicout命令の実行速度(約2msec。[第129回]参照)に比べてクロックが100KHzと速いことと、今回の動作テストとしてはACKは確認しなくても大丈夫ということを事前にテストをして確認した結果DS1307からのACK応答を確認する部分とSSPBUFが送信済みで空になったことを確認する部分を全部省略してしまった結果上のプログラムのように簡単なプログラムになりました。
マシン語のプログラムとかひょっとするとCコンパイラプログラムだとこうはいかないと思います。
実行速度が遅いことはあながち欠点ではなくてこういう長所にもなり得ます。
80行ではDS1307のアドレスおよびR/Wビットを送信します。
DS1307のアドレスは’1101000’です。
今回は送信ですからR/Wビットは’0’です。
90行でDS1307に送信を開始するレジスタアドレスを送ります。
ここから後ろは時刻日付の設定です。詳しくはROM/RAM/RTCボードの製作[第6回]を参照してください。
このテストはもう2週間以上も前に行ないました。
ですからそのときの日時になっています。
最後の180行でSTOPコンディションを出力します。

その下のところでプログラムを実行しました。
この画面だけではDS1307へのデータ送信が正しく行なわれたかどうかは確認できません。
詳細に確認するためには今回のプログラムとは逆にDS1307から日時データを読み出してみる必要があります。
もちろん受信モードのプログラムも作ってそれも確認済みです。
受信モードのプログラムについては後の回で書く予定です。
ただアバウトな確認ならば受信プログラムを実行しなくても可能です。
今回のテストプログラムでは170行でDS1307の7番端子から’秒パルス’を出力するように設定しています。
その端子にはLED(および抵抗)を接続してあります。
DS1307へのデータ送信が170行までとりあえず正しく行なわれれば送信が完了するとLEDが点滅するはずです。
上のプログラムを実行した結果LEDが点滅を開始しました。

PIR1レジスタ]

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

SSPIF(bit3)は送受信が完了したときにセットされると書いてありますがそのほかの色々な場面でセットされます。
ソフトウェアでクリアすることが必要であると書かれていますが割込みを使わない場合には通信が正常に行なわれている限りはクリアしなくてもプログラムは普通に実行されます。

PIC−USBIO using BASIC[第135回]
2022.12.22upload

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