Gast
#4152586
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.".