Hallo Community, normalerweise lässt sich ein Datenblatt ja immer wie ein Kochrezept lesen aber irgendwie übersehe ich gerade irgendetwas... Ich verwende einen PICLF1933 und verwende dabei den Low-Frequency Oscillator(31kHz). Mein Oszilloskop bestätigt den Takt des Prozessors. Das komische nun ist, wenn ich den Timer konfiguriere und ihn auf "LP Osc disabled" stelle, funktioniert der Timer einwandfrei und der Interrupt wird ausgelöst. Ich möchte meinen Pic aber im Sleep-Modus laufen lassen und dazu soll laut Datenblatt das "T1OSCEN" Bit auf 1 gesetzt werden um den LP Oscillator zu verwenden. NUR wird dann kein Interrupt mehr ausgeführt und egal ob das Bit gesetzt ist oder nicht. Der Sleep-Mode funktioniert nicht und ich erhalte beim Stoppen des PICs die Fehlermeldung: "PICkit 3 has halted with error(s)." Nach ein wenig Recherche habe ich im Datenblatt unter 23.2.5 folgendes gefunden und verstehe das nicht so recht: "The Compare mode is dependent upon the system clock (FOSC) for proper operation. Since FOSC is shut down during Sleep mode, the Compare mode will not function properly during Sleep." Kann ich die Compare Mode nicht im Sleep Mode verwenden? Ich habe meine Timer bisher immer mit dem Compare Mode eingestellt, daher weiß ich grad nicht weiter... Falls das das Problem ist: Wie kann ich den Timer ohne Compare Mode verwenden? Habe soweit alle Bits soweit nach Datenblatt gesetzt aber irgendwas muss ja nicht richtig eingestellt sein... Vielen Dank für eure Zeit und Antwort(en) PS: Meine Kommentare sind immer englisch :p Datenblatt: http://ww1.microchip.com/downloads/en/DeviceDoc/41575A.pdf
1 | |
2 | // C O N F I G U R A T I O N B I T S
|
3 | |
4 | #ifdef __DEBUG
|
5 | __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_OFF&MCLRE_ON&CP_OFF&BOREN_ON&LVP_OFF& |
6 | WRT_ALL); // Debug Configuration |
7 | #else
|
8 | __CONFIG(FOSC_INTOSC&WDTE_ON&PWRTE_ON&MCLRE_OFF&CP_ON&BOREN_ON&LVP_OFF& |
9 | WRT_ALL); // Configuration |
10 | #endif
|
11 | |
12 | |
13 | |
14 | //........
|
15 | |
16 | |
17 | // Oscillator Configuration
|
18 | |
19 | OSCCON = 0b10000010; // 31 kHz (Low Frequency) |
20 | |
21 | // Timer Configuration
|
22 | |
23 | CCPR1H = _5_sec_H; // Compare mode value -> HIGH bits |
24 | CPR1L = _5_sec_L; // Compare mode value -> LOW bits |
25 | |
26 | T1CON = 0b00111101; // System Clock FOSC, 1:8 Prescale, |
27 | // LP Osc enabled,
|
28 | // Do not synchronize
|
29 | // enable Timer 1
|
30 | |
31 | CCP1M3 = set; // Compare Mode |
32 | CCP1M2 = clear; // Compare Mode |
33 | CCP1M1 = set; // Compare Mode |
34 | CCP1M0 = set; // Compare Mode |
35 | CCP1IF = set; // Set CCP1 Interrupt Flag |
36 | // to cause a "start" interrupt
|
37 | CCP1IE = set; // Enable CCP1 Interrupt Enable bit |
38 | |
39 | |
40 | |
41 | // Interrupt Configuration
|
42 | |
43 | IOCBF = clear; // Clear IoChange Flag |
44 | IOCBP2 = set; // IOC detect positive edges |
45 | IOCBN2 = set; // IOC detect negative edges |
46 | IOCBP0 = set; // IOC detect positive edges |
47 | IOCBN0 = set; // IOC detect negative edges |
48 | IOCIE = set; // Enable Interrupt on Change |
49 | |
50 | PEIE = set; // Enable peripheral interrupts |
51 | GIE = set; // Enable port change interrupt |
52 | ei(); // Enable global interrupts |
53 | |
54 | // Sleep Mode
|
55 | SLEEP(); |