Hallo Leute,
ich baue gerade mit dem PIC16F27A eine Uhr. In einem anderen Thread
(Beitrag "Uhrenquarz und PIC16F627A") wurde mir nahegelegt, das
mit dem Timer1 und einem 32kHz Uhrenquarz zu versuchen. Also gut.
Ich habe den Quarz an RB6 und RB7 mit 15pF-Kondensatoren angeschlossen,
und im Code den Timer so initialisiert:
1 | // einschalten
|
2 | TMR1ON = 1;
|
3 |
|
4 | // Vorteiler auf 1:8
|
5 | T1CKPS0 = 0b1;
|
6 | T1CKPS1 = 0b1;
|
7 |
|
8 | // arbeite als Timer und NICHT als Counter
|
9 | TMR1CS = 0;
|
10 |
|
11 | // verwende externen Takt von RB6, RB7
|
12 | T1OSCEN = 0b1;
|
13 |
|
14 | // erzwinge Interrupt
|
15 | TMR1IE = 0b1;
|
16 |
|
17 | // global Interrupts aktivieren
|
18 | GIE = 0b1;
|
Ansonsten nutze ich im Code noch Software-PWM (das aber unabhängig vom
Timer1 ist, und ein paar Zeilen weiter oben initialisiert wird).
Meine ISR sieht so aus:
1 | void interrupt isr (void) {
|
2 |
|
3 | if (TMR1IF) {
|
4 | t++;
|
5 | if (t >= 4096) {
|
6 | t = 0;
|
7 | Sekunden++;
|
8 | }
|
9 | TMR1IF = 0;
|
10 | }
|
11 |
|
12 | }
|
Aber nix passiert. Die ISR wird nicht aufgerufen. Habe testweise die
Variable Sekunden in der Main über einen Taster erhöht, und da
funktionierte es. Wenn die Initialisierung OK ist (ist sie?) liegt es
wohl daran, dass der Uhrenquarz nicht schwingt. Was könnte ich da tun?
Gruß
Jens