Da ich im Internet nicht viel zum PIC24 "Input capture with dedicated timer" Modul gefunden habe, mußte ich lange herumprobieren. Vielleicht ersparen meine Kenntnisse jemand anderes viel Arbeit: Es ging um die Periodendauer-Erfassung einer Lichtschranke unter maximaler Ersparnis von Prozessor-Rechenzeit, bes. Interrupts. Da schien das Input capture gradezu für vorbestimmt. Nach einer Woche Herumprobieren mit dem Input-capture des PIC 24FV16KA302 bleibt m.E. festzuhalten: Es gibt leider keinen Modus, in dem das Modul den eigenen Zähler bei jedem Capture-Ereignis auf Null zurücksetzt. Synchronisieren des Capture Moduls IC1 durch seinen eigenen Output ist nicht möglich, weil das kein capture- output ist, sonderen nur ein Overflow-Output. Die Werte, die im Buffer stehen, müßen also grundsätzlich voneinander subtrahiert werden, um die Periodendauer am ICx-Eingangspin zu erhalten. (gemessen in der Frequenz, die der Prescaler der gewählten Clock-Quelle ausspuckt, nicht etwa der betreffende Timer selbst.) Ein ICxTMR counter-Reset nach dem capture lässt sich zwar erreichen, wenn die Synch-Quelle direkt nach dem Capture irgendwie zum Überlaufen gebracht wird. (Timer1 "manuell"auf 0xFFFE stellen und gleichen Prescaler, wie clock, jedenfalls darf der Überlauf auch nicht zu früh erfolgen,sonst kein Nullen des ICxTMR.)aber das ist natürlich absurd umständlich. Vermutlich würde es auch funktionieren mit einem Comparator Modul, wenn man dessen Pin zusätzlich auch mit dem Signal am ICxPIN verbindet. Es ist mir auch nicht gelungen, den IC1TMR einfach zu clearen. Leider scheint der wohl "read-only" zu sein. Keine Info dazu im Datenblatt. Direktes Null-stellen ist nicht möglich, auch nicht mit manueller Trigstat-Betätigung. ICTRIG oder TRIGSTAT -Bit werden bei keiner der obigen Methoden manuell gehandelt, nur in der INIT auf Null gesetzt. Da in jedem dieser Fälle (außer ev. Comparator)ein Interrupt pro capture erforderlich ist, spart das Modul eigentlich überhaupt nichts ein. Will man IC1-INterrupts einsparen, muß!!!!! man hinterher die Bufferinhalte voneinander subtrahieren, um die Periode zu erhalten, was auch an die 10 zustätzliche Befehle erfordern dürfte mit Überlaufverrechnung etc. Der FIFO funktioniert hier wie ein Kaugummiautomat: Von oben werden die Ergebnisse (Kaugummikugeln) ins Rohr geworfen und können unten nacheinander entnommen werden. Dazu ist keinerlei zeitlicher Zusammenhang zwischen Füllen und Entnahme oder Beachtung von Buffer-speicherplätzen erforderlich. Die Kaugummis rutschen automatisch von oben nach unten nach, wenn unten eins entnommen wird.(durch einen ICxBUF lesenden Befehl MOV u.ä.) Deshalb gibt es dieses ICxBUF auch nur einmal, obwohl 4Werte gespeichert werden können. Es können nur nicht mehr als 4 Kaugummis eingefüllt werden (ICOV-Bit prüfen) und wenn man noch etwas entnimmt, nachdem die Kaugummis alle waren, sollte man es lieber nicht in den Mund stecken. (ICBNE-Bit prüfen) Im übrigen gibt es das Datenblatt 39722a von Microchip zum Input capture mit dedicated timer. Noch ein ausführlicheres habe ich leider nicht gefunden. Es mag sein, dass mir bei meinem ganzen Durcheinander etwas entgangen ist, deshalb verwende ich Begriffe, wie "scheint" und "m.E.".
Hans schrieb: > Da ich im Internet nicht viel zum PIC24 "Input capture with dedicated > timer" Modul gefunden habe Es gibt das "dsPIC33/PIC24 Family Reference Manual" und daraus das Kapitel "Input Capture" als DS70000352C. Hans schrieb: > Es ging um die Periodendauer-Erfassung einer Lichtschranke unter > maximaler Ersparnis von Prozessor-Rechenzeit, bes. Interrupts. Es geht beim Input Capture nicht um das Sparen von Prozessorzyklen (was IMHO sowieso Unsinn ist), sondern um die Zeitschärfe des Messwerts. Ein Flankenwechsel am Eigang wird auch dann mit voller Clockauflösung registriert, wenn die CPU beschäftigt oder der Interrupt gesperrt ist. Und durch das FIFO kann die Bearbeitung auch nach dem Auftreten weiterer Flanken erfolgen. MfG Klaus
Ja, danke Klaus, für deine Anmerkungen. Allerdings bringt das von mir zitierte Datenblatt 39722a (http://ww1.microchip.com/downloads/en/DeviceDoc/InputCapture39722a.pdf) dieselben Infos, als das von Dir zitierte: (http://ww1.microchip.com/downloads/en/DeviceDoc/70000352C.pdf) Vieles muß man sich aber immer noch denken, bzw. ausprobieren. Normalerweise wäre meine Lösung für das Problem einfach ein mitlaufender Timer und ein Int-PIN-Interrupt gewesen. Zumal das Programm erst 10% der verfügbaren Rechenzeit füllt und es sonst keine zeitkritischen Interrupts gibt.Das capture-Modul hat mich aber eben einfach gereizt. Allerdings ist das mit dem Verrechnen der Überträge einfacher, als ich oben dachte. Wenn man beachtet, dass der timer niemals öfter als einmal überlaufen darf, löst sich das Problem durch einfaches integer- Subtrahieren des neuen Werts vom alten von selbst. Ich behaupte auch gar nicht, dass dieses Modul schlecht ist. Es ist ja sehr vielseitig. Nur diese Timer-Reset-bei-capture Möglichkeit gabs eben nicht. Und ich hatte mich vorher mit dem Output-compare beschäftigt, und da funktionierte vieles anders.
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.