Hallo Leute,
ich habe diese Frage schon auf mikrocontroller.net gestellt, aber dort ist erfahrungsgemäß eher die AVR-Fraktion unterwegs, ich denke ihr wisst da mehr.
Ich baue gerade mit dem PIC16F27A eine kleine Uhr mit 10 LEDs, die über zwei CD4094 angesteuert werden. Versorgung über ein 5V Steckernetzteil (hinreichend gut geregelt).
Die Uhr soll nun batteriegepuffert sein, und mir wurde nahegelegt, das mit dem Timer1 und einem 32kHz Uhrenquarz zu versuchen. Also gut.
Ich habe den Quarz an RB6 und RB7 mit 15pF-Kondensatoren gegen GND angeschlossen, keine Widerstände benutzt, und im Code den Timer so initialisiert:
// einschalten
TMR1ON = 1;
// Vorteiler auf 1:8
T1CKPS0 = 0b1;
T1CKPS1 = 0b1;
// arbeite als Timer und NICHT als Counter
TMR1CS = 0;
// verwende externen Takt von RB6, RB7
T1OSCEN = 0b1;
// erzwinge Interrupt
TMR1IE = 0b1;
// global Interrupts aktivieren
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:
void interrupt isr (void) {
if (TMR1IF) {
t++;
if (t >= 4096) {
t = 0;
Sekunden++;
}
TMR1IF = 0;
}
}
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