マイコン 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の仕様)なのでしょうか?
どなたかご存知の方いらっしゃいましたらご回答をお待ちしております。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
液晶表示器の初期設定が完了しないと、液晶がコマンドを受け付けてくれません、そのタイムラグでは?
液晶表示のように時間のかかる処理は割り込み処理内でなく、割り込み内でフラグを立て、メインループ内で液晶表示を行ったほうが良いと思います。
ご回答ありがとうございます。
起動時に
TMR1H = 0b11000000;
TMR1L = 0b00000000;
を代入せず、all 0からカウントアップしていたため、オーバーフローするまでちょうど
2秒かかっていたことが判明しました。
自己解決しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- 統計学 R1+ΔR1からR5+ΔR5まで誤差付きの5個のデータを「誤差付きの量の統計処理」してまとめたいんで 1 2022/11/20 18:12
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- 物理学 この問題における抵抗r1とxってどのように考えれば良いのでしょうか?トルクはT=P2/ωsなのでP2 1 2022/06/19 18:46
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- その他(生活家電) 低温調理器のBONIQ BNQ-01が故障しました。 1 2023/05/15 18:00
- C言語・C++・C# C言語 コードを書いたのですが上手く実行出来なかったです。どこが間違ってますか? 【作成したいもの】 1 2022/05/04 11:36
- 工学 エミッタ設置増幅回路で下記の要件を満たす増幅器を設計せよ。 要件は必要要件であり、例えば、少なくとも 1 2022/12/16 10:15
- 一眼レフカメラ canon デジタル一眼レフカメラ 5 2022/07/28 08:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Amazonfireタブレットにわから...
-
プリントスクリーンの自動化
-
PICのPIN変化割り込みに...
-
H8マイコンでの割り込み(シリ...
-
ATtiny2313でsleep_mode()関数...
-
マイコンの割り込みについて教...
-
電車のドアの前での並び方
-
ウォッチドッグタイマ(WDT)の...
-
電車で待機列の割り込みについ...
-
volatileについて
-
割り込み中に例外異常
-
H8マイコンで割り込みが任意の...
-
MIDIファイルについて
-
順番待ちで並んでいる時、割り...
-
【組込み】割り込み中のstatic...
-
(H8マイコン)タイマ割込で変更...
-
Excelでタイマーの一時停止する...
-
ショッピング
-
電車乗車時、並んでいるのに割...
-
Macターミナルで実行中のプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インバウンドで迷惑している人...
-
pic 複数の割り込み関数 切り分...
-
スーパーのレジで並んでいたら...
-
ショッピング
-
Excelでタイマーの一時停止する...
-
電車で待機列の割り込みについ...
-
CPUの処理量を減らすコーデ...
-
C言語でPICマイコン開発
-
【組込み】割り込み中のstatic...
-
Amazonfireタブレットにわから...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
一定時間操作がなかったら、と...
-
VB.net 割り込みの禁止
-
ウォッチドッグタイマ(WDT)の...
-
電車乗車時、並んでいるのに割...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
PICでのプログラムによるチャタ...
-
割り込み中に例外異常
おすすめ情報