mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik jittermessung mit PIC16F877


Autor: woldo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne eine Jittermessung mit einem PIC16F877 realisieren. das 
Problem liegt jetzt daran, dass der Jitter nicht größer als 600ns sein 
darf, d.h. if jitter < 600ns mache nichts
           if jitter >= 600ns gib error aus.
Bevor ich mich jetzt voll ins "Vergnügen" stürze wollte ich einen 
erfahrenen Microcontroller-Programmier fragen, ob dies überhaupt möglich 
ist?
Ich dachte mir irgentwie 2 Interrupt-Eingänge und dann "wenn Zeit ist" 
die beiden Zeiten vergleichen. Bei einer Befehlszeit von 200ns dürfte 
das eintreten der Interrupts und abspeichern dieser Counter nicht mehr 
als 3Befehle lange sein.
Geht sich das aus?
Wenn nicht, hat jemand eine bessere Idee?

mfg
woldo

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was jittert denn da? Eine hohe Frequenz oder etwas niederfrequentes, wie 
oft wiederholt sich die jitternde Flanke?
Das Jittern kann doch in beide Richtungen stattfinden, 600ns vor oder 
nach dem Sollzeitpunkt, muß beides (als Betrag) ausgewertet werden?

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird wohl eher schwierig.

Da der Interrupt im PIC nur zu bestimmten Zeiten ausgelöst wird 
(innerhalb des Taktzyklus), erzeugt der PIC selber beim Messen einen 
Jitter. Und der wird verhältnismässig gross sein.
Die Frage ist auch, mit welcher Genauigkeit die 600ns erkannt werden 
sollen, also die Schärfe. Wenn irgendetwas zwischen 400 und 800ns ok 
ist, klappts eher. Wenn die Angrenzung genau sein soll, geht das so 
nicht.

Besser ist wohl, das CCP (CAPTURE/COMPARE/PWM MODULE) zu verwenden.
Siehe auch:
http://www.sprut.de/electronic/pic/grund/capture.htm

Severino

Autor: woldo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christoph,

danke für die schnelle Antwort.
Es gibt einen Master der jede 1ms einen 30µs breiten Takt ausgibt. Der 
Slave sollte nun genauso jede 1ms (zur selben Zeit) einen 30µs Takt 
ausgeben (synchronisieren). Die jtternde Flanke wiederholt sich also 
jede ms. Der "error" soll nun ausgegeben werden wenn der Slavetakt 
entweder 600ns zu früh oder 600ns zu spät kommt.

mfg
woldo

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ woldo (Gast)

>jede ms. Der "error" soll nun ausgegeben werden wenn der Slavetakt
>entweder 600ns zu früh oder 600ns zu spät kommt.

Naja, dafür ist die Input Capture Einheit (ICP) geradezu ideal. Sie kann 
Flanken mit der Auflösung des Quarztaktes Messen. 10 MHz -> 100ns. Und 
das ohne Belastung der CPU. Allerdings weiss ich jetzt nicht, ob beim 
PIC der Takt für die ICP nicht auch erst durch 4 geteilt wird.

MFG
Falk

Autor: woldo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

@Severino R
"Das Capturen kann man mit Polling (ständiges abfragen) oder durch einen 
Interrupt organisieren. Polling ist einfacher zu programmieren, 
verbraucht aber viel Rechenzeit."

Dann sind wir wohl wieder beim Interrupt,oder?

Qfalk
"Allerdings weiss ich jetzt nicht, ob beim
PIC der Takt für die ICP nicht auch erst durch 4 geteilt wird."

Wo wird denn das Input Capture Einheit (ICP) sonst verwendet?

lg
woldo

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muss schon unterscheiden, ob eine Zeit ermittelt (Auflösung?) und 
anschliessend mit 600ns verglichen werden soll, oder ob es darum geht, 
mit einer Auflösung von 600ns das Vorhandensein eines Signals zu 
erkennen. Wenn der Fehler also nur -600ns, 0 oder +600ns sein kann, 
reicht es z.B. 30..400ns vorher und nachher zu testen, ob das Signal da 
ist.

Bei den PICs heisst das Ding übrigens CCP, nicht ICP (wichtig, falls man 
danach suche will...).
Das CCP-Modul verwendet TMR1, welcher maximal mit dem Systemtakt läuft. 
Der Systemtakt entspricht bei diesem und den meisten PICs dem 
Oszillatortakt durch vier. Wenn man den PIC mit 20MHz taktet, gibt dies 
eine Auflösung von 200ns.

Das Polling vs. Interrupt bei Sprut bezieht sich auf das Lesen des 
Statusbits des CCP-Moduls, nicht auf das "Samplen" des Signals.

Übrigens würde ich den PIC16F877A (...A!) verwenden, der aktueller ist.
Oder gar einen 40MHz PIC, wenn die Auflösung nicht ausreicht.

Alles klar?

Severino

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Severino R. (severino)

>Übrigens würde ich den PIC16F877A (...A!) verwenden, der aktueller ist.
>Oder gar einen 40MHz PIC, wenn die Auflösung nicht ausreicht.

Oder einen AVR, der den Quarz nicht durch 4 teilt. Dann hat nämlich ein 
20 MHz AVR die dopplete Auflösung wie ein 40 MHz PIC.

MFG
Falk

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:

> Oder einen AVR, der den Quarz nicht durch 4 teilt. Dann hat nämlich ein
> 20 MHz AVR die dopplete Auflösung wie ein 40 MHz PIC.
>
Oder einen xxx oder yyy oder zzz, der ist nämlich schneller, oder 
billiger oder die Entwicklungsumgebung ist toller, oder der hat mehr 
Speicher, oder der Compiler optimiert besser, oder der andere ist 
bugfreier oder... ;-)

woldo wollte halt einen PIC16F877 nehmen.

Severino

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.