Hallo, Kann mir einer von euch ein Beispiel für bascom geben. Ich möchte dass eine if-Schleife erst nach 1 Sekunde ausgeführt wird. Wenn das Signal nur 500ms ist soll nichts funktionieren. Gibt es auch eine Möglichkeit , dass die if-Schleife in einem Bereich von 700ms - 1000ms funktioniert . Darüber und darunter nicht. Danke im vorraus. Niclas
Wird schwierig. Und zwar deshalb weil es keine if-'Schleife' gibt. Das Wesen einer Schleife besteht darin, dass etwas wiederholt wird. In einem if wird nichts wiederholt. Ein if trifft eine Auswahl aus 2 Möglichkeiten. Entweder eine Bedingung ist erfüllt, dann wird Möglichkeit 1 ausgeführt (also der zugehörige Code, oder die Bedingung trifft nicht zu, dann wird Möglichkeit 2 ausgeführt (also: der zugehörige Code). Wobei der sogenannte else Teil (also das was mit Möglichkeit 2 zusammenhängt) auch fehlen darf. Mit einer Schleife hat das genau gar nichts zu tun. Schon alleine aus dem Grund, weil hier von einer möglichen 'Wiederholung' eines Codestückes überhaupt nie die Rede war. Und das ist nun mal das was eine Schleife auszeichnet: das irgendein Codestück wiederholt wird (wenn auch nur potentiell). Drum heisst es ja auch Schleife. Wie ein Stück Schnur, das man zu einer Schleife zusammengebunden hat. Tastet man sich an der Schnur entlang, dann landet man unweigerlich irgendwann wieder beim Ausgangspunkt und alles beginnt wieder von vorne. Eben eine Wiederholung. So. Und jetzt muss ich erst mal entziffern, was du eigentlich erreichen willst.
Ich probiere es mal einfacher zu formulieren: Wenn ein Signal an einem Eingang mindestens 700 ms und nicht über 1000 ms liegt soll zum Beispiel ein Ausgang geschaltet werden oder eine Funktion ausgeführt werden.
Niclas Weber schrieb: > Ich probiere es mal einfacher zu formulieren: > Wenn ein Signal an einem Eingang mindestens 700 ms und nicht über 1000 > ms liegt soll zum Beispiel ein Ausgang geschaltet werden oder eine > Funktion ausgeführt werden. Schön. Daraus folgt unmittelbar, dass du die Signalbreite ausmessen musst. Schon mal an eine Kombination aus BITWAIT und PULSEIN gedacht? Hast du erst mal die Pulsebreite (in Millisekunden gemessen) ist der Rest ja einfach.
Dim i as integer i = 0 Main: if i >= 1000 then ; die 1000 müssen wohl kürzer werden weil die ; Ausführunszeit noch dazukommt i = 0 do_etwos else incr i waitms 1 endif goto main
Karl Heinz: Finger weg von den Tasten! Deine Antwort hat garnix braucbares! Es liest sich als Zurechtweisung! Mein Code kann er wenigstens anpassen und als Routine "do_etwos" seine "If" einfügen...
:-) schrieb: > if i >= 1000 then ; die 1000 müssen wohl kürzer werden weil die > ; Ausführunszeit noch dazukommt > i = 0 > do_etwos > else > incr i > waitms 1 > endif Und die Mindestzeit ? Finger weg von den Tasten!
Niclas Weber schrieb: > Wenn das Signal > nur 500ms ist soll nichts funktionieren. * schön gelacht! *
:-) schrieb: > Karl Heinz: > Finger weg von den Tasten! Deine Antwort hat garnix braucbares! Es liest > sich als Zurechtweisung! Mein Code kann er wenigstens anpassen und als > Routine "do_etwos" seine "If" einfügen... Ganz im Gegenteil sehe ich in deinem Code nicht wirklich etwas, was für ihn brauchbar wäre. Das liegt schon alleine daran, dass in deinem Code an keiner einzigen Stelle irgendein Input abgefragt wird, mit dem er sein 'Signal' ausmessen könnte. Die BASCOM Beschreibung für PULSEIN liest sich ein wenig wiedersprüchlich. Am Anfang ist von der Abfrage auf 2 Flanken die Rede, allerdings kommt in weiterer FOlge dieser Satz vor.
1 | When state 0 is used, the routine will wait until the level on the specified input pin is 0. Then a counter is started and stopped until the input level gets 1. |
und ich gehe mal davon aus, dass bei einem state von 1 sich die ganze Sache genau umgekehrt verhält, so dass hier die Polarität seines Signals eingeht. Zusammen mit einem BitWait mit dem er die jeweils erste Flanke detektiert ist das genau die Funktionalität, die er braucht um festzustellen, wie lang sein Signal war um dann abhängig davon einen Schaltvorgang einzuleiten oder nicht.
Marc Vesely schrieb: > :-) schrieb: >> if i >= 1000 then ; die 1000 müssen wohl kürzer werden weil die >> ; Ausführunszeit noch dazukommt >> i = 0 >> do_etwos >> else >> incr i >> waitms 1 >> endif > > Und die Mindestzeit ? > Finger weg von den Tasten! Lesen!
:-) schrieb: >> Und die Mindestzeit ? >> Finger weg von den Tasten! > > Lesen! Habe ich 5 mal hintereinander, kann immer noch nicht die Mindestzeit finden.
Marc Vesely schrieb: > Habe ich 5 mal hintereinander, kann immer noch nicht die Mindestzeit > finden. Dann schreib se halt selber rein!
Ja Niclas, so einen Zickenkrieg und überhebliches Gehabe bekommst du nur hier im µC.net. In anderen Foren sind die Jungs auch zwischenmenschlich deutlich reifer.
PULSEIN ist schon das Richtige. Mittels des Parameters "STATE" kann man einstellen, ob auf einen H/L oder L/H Wechsel am überwachten Pin reagiert werden soll. Bei STATE=0 wird bei L-Pegel am Eingang ein Zähler mit 10µs Schrittweite gestartet, der solange läuft, wie der Eingang L-Pegel aufweist. Nach 655,35 ms läuft der Zähler prinzipbedingt über. Man muß also diese Überläufe mitzählen, wenn längere Zeiten gebraucht werden. Fremdschämer hat Recht: Der Einzige, der es Ernst meint, ist Karl-Heinz Buchegger, der Rest besteht aus Stümpern, die das Problem nicht erfassen.
Ja Danke an lollilümmel, fremdschämer und Karl Heinz , die gute und sinnvolle Beiträge geleistet haben. Niclas
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.