Hallo Leute, ich hoffe jemand kann mir bei der Lösung meines Problems helfen. Also worum es geht: Ich muss mit einem Interrupt ein rechteckiges Signal messen. D.h. ich muss die Zeit von Rising bis Reising messen was ich auch geschaft habe, aber wie kann ich mit dem selben Innterrupt die Zeit von Rising bis Falling messen, dazu muss ich sagen das rechteckige Signal ändert anderauernd die Periodendauer, das Signal wird nicht negativ es wird nur 1 und 0 und da wo es 1 wird, die Zeit muss ich auch mit dem selben Interrupt messen das heißt von Rising bis Falling, die Zeit soll man einfach bei der Flanke Falling ablessen und als Past in einem Hyper Terminal schreiben werden. Ich hoffe ich habe mich deutlich ausgedruckt und jemand kann mir helfen, und es ist dringend. Schöne größe an jeden. Hier habe ich das was ich schon selber geschrieben habe: $regfile = "m8515.dat" $crystal = 8000000 $baud = 4800 'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiii Config Timer1 = Timer , Prescale = 8 Config Pind.3 = Input On Int1 Signal_1 Config Int1 = Rising Enable Int1 Enable Interrupts Start Timer1 Dim Timeus As Long Do Print "Signal_1" ; Timeus Loop 'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiii Signal_1: Timeus = Timer1 Timer1 = 0 Return 'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiii
Lustig BASCOM im GCC Forum^^. Man hat Dir doch schon gesagt wie das zu machen ist. Interrupt auf Low-level. Wenn ausgelöst Timer an und Interrupt auf High-Flanke. Usw. Den Code suchste selber oder in nem BASCOM Forum. Außerdem reicht es einen Post aufzumachen und nicht 2 im Elektronik Forum und 1 hier. Nenene. Moin
Ja ich weis aber mit zwei anfragen kriegt man mehr antworten ;-)=
Nachdem ich ein Assembler Freak bin, kann ich es Dir in Deinem Code nicht zeigen, aber zumindest eine Anleitung zur Logik geben: Programmstart: Stell den Interrupt auf rising + falling, er soll in beiden Fällen auslösen Schalte den Timer / Zähler zunächst aus und setze ihn auf 0. Signal_1: Die Interrupt routine soll gleich zu beginn erkennen ob es sich um ein HIGH oder LOW am Eingang handelt und zu zwei Unterroutinen springen: Unterroutine_1a: Beim HIGH wird der Timer Zähler genullt und gestartet. Unterroutine_2: Bei einem LOW wird der Timer Zähler ausgelesen und versendet (das ist die rising2falling zeit) und weiter nichts unternommen. Unterroutine_1b: Beim beim nächsten HIGH wird der Timer Zähler ausgelesen und versendet (das ist die rising2rising zeit) und der Zähler für die nächste Messung genullt. Unterroutine 1a und 1b kann die gleiche Routine sein. Du musst also keine Abfrage machen, ob es das erste HIGH oder zweite HIGH (oder ein weiteres) war. Vermische einfach alle Funktionen von 1a und 1b zusammen, also: Unterroutine_1: 1)sende aktuellen Wert zum Hyperterminal 2)setze Timer / Zähler auf 0 3)starte Timer / Zähler Damit wirst Du zwar beim ersten HIGH auch Daten zum Hyper Terminal schicken und und beim zweiten HIGH den bereits gestarteten Timer nochmal starten, aber der erste gesendete Wert kann im Hyperterminal ignoriert werden bzw ist sowieso eine "0", weil er beim Programmstart genullt wurde.
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.