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


PIC−USBIO using BASIC

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

[第76回]



●PICUSBIO−03(25)Timer1(7)RTC(2)HOUR、MIN、SEC

前回はTimer1のオシレータ回路について説明しました。
T1OSI端子とT1OSO端子に32.768KHzのクリスタル(およびコンデンサ)を接続することでそれをRTC用のクロックとして使うことができると書きました。
32.768KHzクリスタルを接続することについてはPIC18F13K50のData Sheetに説明があるのですがその部分のコピーをお見せしていないことに気が付きました。
下はその部分のコピーです。

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

ハードウェア回路については上のドキュメントの通りで前回はPICUSBIO−03をそのように改造した回路図と基板の写真をお見せしました。
その回路を使ってTimer1をRTCとして利用するためにはハードウェアだけではなくてソフトウェアの準備も必要です。
RTCとしては1秒のクロックが必要です。
32.768KHzをTimer1で分周することで1秒のクロックが得られます。
Timer1のオーバーフロー割り込みによって1秒ごとに割り込みプログラムを働かせて秒のカウントをします。
PIC18F13K50/14K50のData Sheetにはそのためのサンプルプログラムが紹介されています。
下がその部分のコピーです。

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

Timer1は16bitのタイマ/カウンタです。
オーバーフロー割り込みはFFFFから0000になったときに発生します。
ですから0000からカウントを開始すると65536カウントでオーバーフローします。
ということは32.768KHzをTimer1で普通にカウントするとオーバーフローするまでに1秒ではなくて2秒かかってしまうことになります。
そこで上のサンプルプログラムではTimer1に$8000(32768)を置数してからカウントを開始するようにしています。
Timer1に$8000を置数することは1秒ごとの割り込みの都度必要になります。
Timer1の割り込みは[第74回]でPICUSBIO用BASICインタプリタでも使えるようにしましたがそこで使った割り込みをそのまま使うことには無理がありますし非効率でもあります。
そこでRTC用の割り込みプログラムを新たにPIC18F13K50に組み込みました。
1秒ごとに割り込みを発生させるとともに同時に秒カウンタ、分カウンタ、時カウンタも正しくカウントアップするプログラムになっています。
秒カウンタ〜時カウンタはPIC18F13K50にもとからあるシステムレジスタではなくて今回のRTCプログラムのために定義した汎用レジスタですがシステムレジスタと同じようにPICUSBIO用BASICインタプリタのpicout、picinでアクセスできるようにしてあります。
下はそのようにしてPIC18F13K50に組み込んだRTC割り込みプログラムの動作テストのためにとりあえず作成したBASICプログラムです。

10行でTMR1Hに$80、20行でTMR1Lに$00を書き込みます。
30行でT1CONをRTC用に設定します。
bit5=0、bit4=0でプリスケーラは使わない設定にします。
bit3=1でTimer1オシレータがアクティブになります。
bit2=1、bit1=1で外部入力クロックはシステムクロックとは非同期になります。
bit0=1でTimer1がスタートします。
T1CONについては[第70回]にData Sheetのコピーがあります。
40行、50行、60行でTimer1の割り込みを許可します([第74回]参照)。
70行で時カウンタ、分カウンタ、秒カウンタを0クリアします。
HOURは時カウンタ、MINは分カウンタ、SECは秒カウンタです。
80行で各レジスタの値を読んでそれを表示します。
90行のgoto文で80行を繰り返し実行します。

上のプログラムを実行しました。

とりあえずはRTCが動作していることはわかりますが同じ値が繰り返し表示されるのでこのままでは面白くありません。

そこで秒をカウントするごとに1回だけ表示するようにプログラムを変更しました。

80行〜100行、120行が追加した部分です。

そのように変更したプログラムを実行しました。

これで見易くなりました。

RTCについてもう少しテストを続けます。
次回に続きます。

PIC−USBIO using BASIC[第76回]
2022.10.16upload

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