picのタイマ1発振開始時間に関して
マイコン Pic16F1939を使用して回路を組み、タイマ1を外部に取り付けた水晶で
動作させています(pic自体は内部オシレータで8MHzで動作させ、Timer1は正確な
1秒を取得するために使用しています)
使用している水晶は32768Hzの時計用のものです。
タイマ1が0.5秒ごとにオーバーフローするように設定し、割込みの関数で液晶の
点滅処理をおこなっています。
水晶の両端はそれぞれコンデンサが添付画像のような接続でつながっています。
また、関連部分のプログラムの抜き出しは以下のようになっています。
// 割込み処理
static void interrupt isr(void)
{
if (PIR1bits.TMR1IF) { // 32Khz水晶 割込み
Int_Timer1();
}
~ 省略 ~
}
// タイマー1割り込み(32khz水晶) : 0.5秒ごと
void Int_Timer1(void)
{
PIR1bits.TMR1IF = 0; // 次の割り込み許可のためクリア
// 0.5秒で次の割り込みが発生するように設定
TMR1H = 0b11000000;
TMR1L = 0b00000000;
~ 点滅処理 ~
~省略~
return;
}
そして以下の初期設定用関数
InitTimer1()と InitInterrupt()を main()の始めに呼んでいます。
// Timer1 setting 32kHz , external crystal
void InitTimer1(void)
{
T1CONbits.TMR1CS1 = 1;
T1CONbits.TMR1CS0 = 0;
T1CONbits.T1CKPS1 = 0;
T1CONbits.T1CKPS0 = 0;
T1CONbits.nT1SYNC = 1;
T1CONbits.T1OSCEN = 1;
T1CONbits.TMR1ON = 1;
}
// 割込み初期化
void InitInterrupt(void)
{
PIE1bits.TMR1IE=1; // enable timer 1 interrupt
INTCONbits.PEIE=1;
INTCONbits.GIE=1;
}
質問なのですが、実際に液晶が点滅するまでに2秒ほどかかっています。
どこかのホームページでタイマ1の水晶の発振が安定するまでに
数msecかかるというような情報が書いてあったので、ずいぶん
遅いなと感じ2つのコンデンサの容量を10pF~200pFくらいのあいだで色々
変更して試しているのですが、2秒より早く点滅開始となることはありませんでした。
これは、上記プログラムの問題なのでしょうか?
それとも2秒ほどかかって発振するのは仕方ない(Picの仕様)なのでしょうか?
どなたかご存知の方いらっしゃいましたらご回答をお待ちしております。