前回いろいろ試してみた結果から、1秒とか1分とかを作りたいだけなら低周波数の水晶振動子をタイマー専用のクロックとして用いるのが一番効率的ではないかという気がしてきた。
そこで、32.768kHzの水晶発振子(VT-200-F)を取り付けてみたら、動かない。
赤丸がVT-200-F、水色丸がコンデンサだ。
まず試したのは、
#pragma config FOSC = INTRCIO
T1CON = 0b00000111;
という設定だ。
水晶発振器では動いたのに、この回路ではうんともすんとも言わない。
2本足の水晶発振子に負荷容量としてコンデンサを取り付けての回路ははじめてだったので、組み方が間違っているのかとも思った。
だが、まったく同じ回路で、
#pragma config FOSC = LP
T1CON = 0b00000001;
とすると、ちゃんとLEDが点滅した。
2本足の水晶発振子と3本足の水晶発振器との違いということで片付けられる問題なのかどうか、当然わからない。
タイマー用に32.768kHzを使うなら、内部のクロックは内蔵の4MHzを使いたいよなあ。
試しに、動いた方の設定でしばらく動かしてみたら、ストップ・ウオッチで1時間13分10秒 = 4390秒 のところ、PICは0x1125 = 4389 を記録していた。
そこそこちゃんと動いていると言っていいだろう。
あとは、外部32.768kHz、内部4MHzの2クロック方式で動かせれば、とりあえず実験は一区切りなのだが、見通しは立っていない。
追記
#pragma config FOSC = INTRCIO
T1CON = 0b00001111;
とやれば外付け水晶発振子をタイマー用のクロックとして使うようだ。
3bit目の設定は以下の通り。
bit 3 T1OSCEN: LP Oscillator Enable Control bit
If INTOSC without CLKOUT oscillator is active:
1 = LP oscillator is enabled for Timer1 clock
0 = LP oscillator is off
Else:
This bit is ignored
うーん、いまいちよくわからないな。
「INTOSC without CLKOUT oscillator is active」の場合は、内蔵の4MHzのオシレータを使う設定なので、「LP oscillator is enabled for Timer1 clock」の「LP oscillator」ってのは外部のオシレータを指しているという解釈でいいのかなあ。
追記
Timer1 has the capability to operate off an external crystal. When the Timer1 oscillator is enabled (T1OSCEN is set), the T1OSI and T1OSO pins become inputs.
という記述を見つけたので、いずれにしても外付けのクリスタルをTimer1のカウントに用いるならT1CONの3bit目(T1OSCEN)を1にしなければいけないのは確かなようだ。