Forum: Compiler & IDEs CCP Modul im 16F1829 Triggerflanke umschalten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Uwe K. (aerodactyl)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich nutze den CCS Compiler komme einem Problem nicht auf die Spur.

Im 16F1829 nutze ich das CCP Modul um einen Timer (TMR1) auszulesen, der 
auf eine steigende Flanke reagiert.
Das funktioniert alles soweit.
Das Reagieren auf eine fallende Flanke funktioniert auch.
Nun muss ich in meinem Programm während des Laufens von steigender auf 
fallende Flanke umschalten.
Dazu nutze ich im CCS Compiler "setup_ccp1 (CCP_CAPTURE_RE)", bzw. 
"setup_ccp1 (CCP_CAPTURE_FE)"
Das gibt Probleme im Programmablauf, die ich derzeit gar nicht genau 
beschreiben kann.
Wenn ich Gleiches mit einem anderen Port über "EXT_INT_EDGE(L_TO_H)" 
oder eben (H_TO_L) mache, funktioniert das problemlos.

Ist das ein Bug im Compiler oder ist das CCP Modul dafür nicht geeignet? 
Im Datenblatt habe ich nichts dazu gefunden.
Wenn ich das in der Konfiguration fest definiere, reagiert das Ding brav 
auf die fallende oder steigende Flanke. Im Code umschalten gibt 
Probleme.
Kennt das jemand und hat einen Lösungsansatz?

Gruß

Uwe

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Uwe K. schrieb:
> Ist das ein Bug im Compiler oder ist das CCP Modul dafür nicht geeignet?
> Im Datenblatt habe ich nichts dazu gefunden.

Der Compiler hat damit überhaupt nichts am Hut. Was Du da aufrufst, sind 
nur vordefinierte Macros, die bestimmte IO-Bits setzen. Diese Macros 
stehen im Klartext in irgendeinem h-File.


Uwe K. schrieb:
> Das gibt Probleme im Programmablauf, die ich derzeit gar nicht genau
> beschreiben kann.

Was passieren kann, entweder Dir geht eine Flanke durch die Lappen oder 
das Umschalten kann eine Pseudoflanke bewirken.
Der Ablauf des Umschaltens sollte etwa folgender sein:
- Interrupts global disablen
- Pin einlesen
- Flanke umschalten
- Pending-Flag löschen (Pseudo-Flanke)
- Pin nochmal einlesen
- Beide Lesungen auswerten, ob zwischendrin eine Flanke war
- Interrupts global enablen

von Uwe K. (aerodactyl)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

erst einmal DANKE für deine Info. Ich werde das mal testen.
Ich finde es nur merkwürdig, dass das Umschalten bei den EXT_INT 
stressfrei funktioniert, bei CCP Modul aber nicht.

Gruß

Uwe

von Uwe K. (aerodactyl)


Bewertung
0 lesenswert
nicht lesenswert
ich habe das Problem gelöst :-)
Es saß, wie so oft schon, 50 cm vor dem Bildschirm.

Durch die Umschaltung war die nachfolgende Messung natürlich ungültig 
und ergab dadurch völlig falsche Messwerte.

Gruß

Uwe

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]
  • [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.