Hallo,
ich habe ein Problem mit dem Timer1 des PIC16F1823 (QFN Gehäuse), und
zwar funktioniert der Timer mit dem Oszillator Circuit zwischen PIN
T1OSI und T1OSO nicht.
Ich habe den Timer mal mit dem internen Oszillator getaktet und damit
hat es funktioniert. Kaum stell ich um auf den externen 32,768kHz
Oszillator funktioniert es nicht.
Mit dem internen Oszillator kann ich ihn nicht takten, da der Timer auch
im Sleep-Modus weiter laufen soll und das funktioniert nur mit dem
externen 32,768kHz Oszillator.
Ich habe auch schon einen neuen Quartz ausprobiert, da ich dachte das
der Quartz vielleicht defekt ist. Aber es funktionierte mit dem neuen
Quartz auch nicht.
Kann mir bitte wer weiter helfen wo das Problem liegen könnte?
Im Anhang noch die Beschaltung des Quartzes zwischen T1OSI und T1OSO.
Und hier noch die Initialisierung des Timers:
1 | void init_Timer1()
|
2 | {
|
3 | //Osc.Circuit On T1OSI/T1OSO Pins
|
4 | T1CON.TMR1CS1 = 1;
|
5 | T1CON.TMR1CS0 = 0;
|
6 | T1CON.T1OSCEN = 1;
|
7 | wait_ms(100); //start-up and stabilization time
|
8 |
|
9 | //select Prescaler 1:8
|
10 | T1CON.T1CKPS1=1;
|
11 | T1CON.T1CKPS0=1;
|
12 |
|
13 | //Asynchronous Counter
|
14 | T1CON.NOT_T1SYNC = 1;
|
15 |
|
16 | //TNR1H, TMR1L and TMR1IF should be cleared before enabling the interrupt
|
17 | PIR1.TMR1IF = 0;
|
18 |
|
19 | // 1s
|
20 | TMR1H = 0xEF; //high byte
|
21 | TMR1L = 0xFF; //low byte
|
22 |
|
23 | //enable overflow interrupt (0xFFFF -> 0x0000)
|
24 | PIE1.TMR1IE = 1;
|
25 | INTCON.PEIE = 1;
|
26 | INTCON.GIE = 1;
|
27 |
|
28 | //Timer1 always on
|
29 | T1CON.TMR1ON = 1;
|
30 | T1GCON.TMR1GE = 0;
|
31 | }
|
Oliver K.