"Pulsein" hat nach einem Timeout auf jeden Fall ein Ende, also wirklich hängen sollt# er nicht bleiben, auch ohne Puls.
Hallo zusammen,
habe ein Problem bei dem ich nicht weis wie ich es lösen könnte.
Ich möchte mit "Pulsein" in einem Datenlogger einen RC-Kanal auf den Status abfragen.
Eigentlich ja kein Problem, aber....
mein Programm bleibt stehen wenn gar kein Signal anliegt, das muss ich irgendwie lösen. Das kann vorkommen.
Ich kann KEINEN externen INT verwenden - ist schon belegt!
Ich kann den 16bit Timer nicht verwenden - ist auch schon belegt!
Momentan läuft die "Pulsein" abfrage neben dem externen Int, dem Timer1, über den Timer0 (20mal pro Sek.) Der RC-Kanal braucht nicht öfter abgefragt werden, da das zur Statusabfrage reicht und ich fesgestellt habe das über den Timer0 keine Konfilikte mit den INT0 und Timer1 auftreten.
Wie kann ich das Problem lösen, das ohne Puls der Pulsein nicht "hängenbleibt"? Ich habe KEIN Bitwait verwendet.
IDEEN - VORSCHLÄGE?????
Danke
Gruß
Markus
"Pulsein" hat nach einem Timeout auf jeden Fall ein Ende, also wirklich hängen sollt# er nicht bleiben, auch ohne Puls.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Kann es sein, das der Timeout so lange dauert das der Timer0 ihn dann schon wieder zum erneuten warten schickt. Dadurch würde dann irgendwie eine "Dauerschleife" entstehen. Am Terminal sehe ich das die Impulse gezählt werden(nur bei weitem nicht alle) und auch das Datensenden funktioniert. Nur in die Hauptschleife gehts nicht mehr. Das sehe ich an einer LED die eigentlich dann blinken sollte.
Grob sieht mein Programm so aus. Die Config Timer und Interrupt usw. habe ich jetzt mal weggelassen. Das passt scho.
.....
On Int0 Zähleimpulse
On Timer1 Datensenden
On Timer0 RCmessen
Do
"Hauptschleife"
Loop
Zähleimpulse: (kommt von einem Durchflussmesser)
incr A
Return
Datensenden: (werden und sollen nur alle 0,25 Sek. übermittelt werden)
Printbin Stb;B(1);C
Return
RCmessen: (hier ist mein Problem )
Pulsein RC ,Pinc, 4,0
Stimmt da was an der Grundstruktur nicht? Oder gibts da noch einen anderen Trick?
Mit der Dauerschleifentheorie könntest du vielleicht recht haben.
Mach den Pulsein in der Hauptschleife und lass ihn vom Timer triggern
dadurch kann pulsein vom anderen Timer unterbrochen werden und hält nicht den Betrieb auf.Code:DIM trigger as byte DO "hauptschleife" if trigger = 1 then trigger = 0 pulsein rc, pinc, 4, 0 end if '------ andere Beschäftigung ---- LOOP RCmessen: trigger = 1 return
Wenn pulsein wirklich zu lange sein sollte, wird's natürlich eng, da brauchen wir eine andere Idee
FÜr mein Verständnis: Du willst alle 0,05 sekunden sehen, ob sich auf der Rc-Leitung irgendwas tut ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo Robert,
beim RC will ich alle 0,05 Sek. sehen ob sich was tut, das "Datensenden" darf nur alle 0,25 Sek. passieren.
Hmm... das mit dem Trigger werde ich mal ausprobieren.
Kann der pulsein dann auch vom INT0 unterbrochen werden?
Gruß
Markus
definitiv. versuch es mal. "Pulsein" in einer ISR Routine ist so oder so nicht gut.Kann der pulsein dann auch vom INT0 unterbrochen werden?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hallo robert,
funktioniert so perfekt, danke für den Tip!!!
gruß
Markus
.... hmm so jetzt habe ich aber ein anderes Problem:
Wenn der Int0 kommt, liefert mir Pulsein total falsche Werte. Wenn ich während Pulsein den Int0 disable dann fehlen mir ein haufen Impulse die vom Int0 laufend gemessen werden müssen.
Kann ich den den Timeout für den Pulsein irgendwie verkürzen?
Gruß
Markus
Hmm ... wie wäre es, dieses per Hand zu Coden, oder den Code "etwas" zu optimieren ?
Das Problem ist im endeffekt das folgende:
solange du nicht weißt, wie pulsein umgesetzt wird von BASIC ist es defakto "Sackhüpfen im Minenfeld" was hier betrieben wird.
Optimierungsmöglichkeiten wären im übrigen z.B. das entmisten von ISR's etc.
Nachtrag: Wenn dein µC nen Pin Change Interupt hat könnte auch dieser helfen ... aber daran hast du sicherlich schon gedacht.
Grüße,
da Hanni.
Hi Hanni,
nix für ungut aber irgendwie check ich jetzt nicht was Du damit sagen willst. Fakt ist, das ich erst vor 4 Monaten überhaupt begonnen habe mich mit MCs zu beschäftigen und dabei so nebenbei mir das Bascom proggen selber beigebracht habe. Für nen richtigen Tip wäre ich dankbar, mit nem Satz
kann ich leider gar nix anfangen.solange du nicht weißt, wie pulsein umgesetzt wird von BASIC ist es defakto "Sackhüpfen im Minenfeld" was hier betrieben wird.
Ich weis zwar wie in Bascom der Pulsein funktioniert aber nicht wie ich daran schrauben kann. (Timeout beeinflussen)
Das die Geschichte mit den Interupt nicht ganz ohne ist, das ist mir auch bekannt. Leider habe ich keine andere Möglichkeit (bis jezt) gefunden.
Wie gesagt ich bin bereit jederzeit dazuzulernen.
gruß
Markus
Lesezeichen