www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [PIC18F4550][CCS-C] CCP-Capture Timer 1/3 Problem


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

while(i2<=10) {
tmr3con = 0xCC;
// set_timer3(65535);
setup_ccp1(CCP_CAPTURE_FE);
setup_ccp2(CCP_CAPTURE_RE);
tmr3start = 1;
 
delay_ms(200);

cap1 = CCP_1;
cap2 = CCP_2;
.........

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

Autor: mätthu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
definiere eine Variable die um jeden Takt inkrementiert wird. Die kannst 
du ja danach beliebig händeln. auf 0 setzen u.s.w..

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke  mätthu,
Gesagt getan, nur bekomm ich immer genau 2 Interrupts raus und gleich 
doofe Ergebnisse ;( Ich werde mal ne weile mit den Timings und dem 
Interrupt rumspielen, vll. ergibt sich ja noch was.

Falls noch jemmanden was einfällt... für jeden Tip bin ich sher 
dankbar..

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oooookkk habe es gelößt, Ich musste mein Programm so Umschreiben das ich 
direkten zugriff auf CCP1IF und CCP2IF Register hatte welches mir nun 
erlaubt den Timer nach dem Capturen anzuhalten damit kein weiterer 
Interrupt folgt.

Verfluchtes CCS, die die den Compiler geschrieben haben, haben leider 
vieles links liegen lassen... Im Endeffekt wird es so nur schwerer weil 
man ja mit der Zeit selbst die ganzen Fehlenden einträge erstellen muss 
:(

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.