Forum: Mikrocontroller und Digitale Elektronik Pulsmustererzeugung mit PIC


von Thomas (Gast)


Lesenswert?

Hallo Leute
ich habe folgendes Problem:

Ich muß ein Pulsmuster mit unterschiedlich langen High- und Low-Phasen 
erzeugen. Mir steht dazu ein PIC16F785 zur Verfügung.
Das Muster könnte z.B. so aussehen:
    ___         ________     ____________________
   |    |       |        |   |                     |
___|    |_______|        |___|                     |____

Die Dauer einzelnen High- unf Low-Phasen sollen vorher per Software 
eingestellt werden und müssen ziemlich exakt sein. Das komplette 
Signalmuster hat eine Länge von ca.4ms.
Das Pulsmuster muß weiterhin bei einem externen Ereignis an einem Pin, 
logischerweise an einem anderen Pin ausgegen werden, was ja über einen 
Interrupt gut zu realisieren ist.
Jetzt die Frage:
wie kann ich am komfortabelsten ein solches Pulsmuster erzeugen?
Ich hatte zuerst an einfache Dalay-Schleifen gedacht, was aber zu 
ungenau ist. (außerdem soll während des letzten langen Pulses auch noch 
eine Auswertung vorgenommen werden)
Dann kam mir der Compare-Mode in den Sinn, mit dem ich aber bisher nicht 
gearbeitet habe. Ist es möglich mit dem Compare-Mode ein solches Muster 
zu erzeugen, oder gibt es bessere Möglichkeiten?

vielen Dank für Eure Hilfe!!!
Gruß, Thomas

von Nilp (Gast)


Lesenswert?

Ja, der koennte gut sein.

von Falk B. (falk)


Lesenswert?

@ Thomas

>Ich muß ein Pulsmuster mit unterschiedlich langen High- und Low-Phasen
>erzeugen. Mir steht dazu ein PIC16F785 zur Verfügung.
>Das Muster könnte z.B. so aussehen:
>    ___         _______     _____________________
>   |    |       |        |   |                     |
>___|    |_______|        |___|                     |____

>Die Dauer einzelnen High- unf Low-Phasen sollen vorher per Software
>eingestellt werden und müssen ziemlich exakt sein. Das komplette

Wie exakt?

>Ich hatte zuerst an einfache Dalay-Schleifen gedacht, was aber zu
>ungenau ist.

In Assembler sind solche Schleifen auf den Takt genau.

>Dann kam mir der Compare-Mode in den Sinn, mit dem ich aber bisher nicht
>gearbeitet habe. Ist es möglich mit dem Compare-Mode ein solches Muster
>zu erzeugen, oder gibt es bessere Möglichkeiten?

Ja, das ist die günstigste und professionelle Methode.
Du musst praktisch nur sich Zeitpunkte der Signalwechsel in einer 
Tabelle ablegen. Diese kannst du dann per Compare Interrupt verarbeiten. 
Das Ganze ist dann auf den Takt des uC genau.

MFG
Falk

von Peter D. (peda)


Lesenswert?

Bei den AVRs hat man den "Toggle Pin on Compare" Modus, damit kann man 
das Signal auf einen Quarztakt (50ns) genau erzeugen und die 
Interruptlatenz zum Laden des nächsten Compare-Wertes bleibt völlig ohne 
Einfluß (Compareregister  += nächstes Delay).


Nimmt man dann noch den "Input Capture", um die Startflanke zu erkennen, 
ist das Signal auch auf 50ns synchron dazu (Compareregister = 
Captureregister + erstes Delay).


Wenn der PIC diese beiden Modi auch hat, ist es ganz easy.


Peter

von Thomas (Gast)


Lesenswert?

Vielen Dank für eure Antworten!!!

Es sollte im µSekunden-Bereich exakt sein.

Hat zufälligerweise noch jemand ein kleines Beispielprogramm zur 
Benutzung des Compare-Modus (wenn möglich in C)?

Thomas

von Peter D. (peda)


Lesenswert?

Also wenn ich das Datenblatt des PIC16F785 richtig verstanden habe, hat 
der weder toggle-Pin noch Compare noch Capture.

D.h. Du mußt alles zu Fuß in SW machen, da könnten 1µs Genauigkeit schon 
haarig werden.


Wie gesagt, mit nem ATTiny2313 wärs ganz easy. Und da der 2 
Compare-Einheiten hat, kann man mit der 2. die Auswertung machen.



Peter

von Thomas (Gast)


Lesenswert?

@Peter
danke für den Hinweis, dummerweise steht mir nur der PIC zur Verfügung.

Wenn also jemand ein kleines Beispiel für mich hätte wäre ich sehr 
Dankbar!!!
Im Internet findet man auch nur sehr dürftige Angaben zur Verwendung 
diese Modes.

Gruß Thomas

von Thomas (Gast)


Lesenswert?

ps: den Toggel-Pin hat er zwar nicht, dafür aber einen Compare-Modus der 
einen Interrupt auslöst mit dem man dann einfach einen Pin toggeln kann.
Thomas

von Peter D. (peda)


Lesenswert?

O.k. hatter alles doch.

Steht eben bloß nicht unter der Timerbeschreibung, sonst wärs ja zu 
leicht zu finden.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.