www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pulsmustererzeugung mit PIC


Autor: Thomas (Gast)
Datum:

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

Autor: Nilp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der koennte gut sein.

Autor: Falk Brunner (falk)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O.k. hatter alles doch.

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


Peter

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.