Hallo,
Wie der Betreff verrät habe ich ein Problem mit dem CCPX Timer.
Ein Sensor spukt mir eine Frequenz zwichen 2Hz und 130KHz vor die Nase
welche ich mittels CCP Modul lesbar umwandeln möchte.
Nun verdirbt mir aber der Timer den ganzen Spass seit einiger Zeit,
er fängt meist irgendwo zwichen 0 und 65535 an zu Zählen dabei überläuft
er (und die Berechnung fällt hin) und kommt dann irgendwann zum stehen.
Hatte versucht mit Interrupt-routinen den Überlauf fest zu stellen
was aber nicht funktionierte da er immer einmal überläuft bevor er was
ausspukt....
Habe als Fehlerkorrektur eine kleine Software-lößung eingebaut welche
aber viel Speicher verschlingt und alles andere als Fehlerfrei & Optimal
ist.
Gibt es irgendeine Möglichkeit den Überlauf fest zu stellen??
Oder eine möglichkeit das der CCP/Timer irgendwo (nahe?) bei 0 anfängt??
Für jeden Lösungsvorschlag in ASCI-C/(asm)/CCS-C/C18 wäre ich dankbar.
1 | while(i2<=10) {
|
2 | tmr3con = 0xCC;
|
3 | // set_timer3(65535);
|
4 | setup_ccp1(CCP_CAPTURE_FE);
|
5 | setup_ccp2(CCP_CAPTURE_RE);
|
6 | tmr3start = 1;
|
7 |
|
8 | delay_ms(200);
|
9 |
|
10 | cap1 = CCP_1;
|
11 | cap2 = CCP_2;
|
12 | .........
|
Debug Ausgabe:
0 cap1: 60179 cap2: 42853
ERROR : 1 cap1: 8178 cap2: 56659
1 cap1: 12525 cap2: 30843
2 cap1: 35402 cap2: 14216
3 cap1: 19786 cap2: 40159
4 cap1: 45489 cap2: 24829
5 cap1: 30194 cap2: 48487
6 cap1: 49970 cap2: 34471
7 cap1: 1377 cap2: 49345
ERROR: 8 cap1: 56598 cap2: 10402
8 cap1: 29235 cap2: 8305
9 cap1: 19672 cap2: 40575
10 cap1: 44824 cap2: 24932
17326 18318 (21186) 20373 20660 18293 15499 (47968) 20930 20903 19892