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
@ 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
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
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
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
@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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.