Forum: Mikrocontroller und Digitale Elektronik Signal Bereich bascom


von Niclas W. (Firma: XxX) (technikfreaky)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Niclas W. (Firma: XxX) (technikfreaky)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von :-) (Gast)


Lesenswert?

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

von IFs (Gast)


Lesenswert?


von :-) (Gast)


Lesenswert?

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...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

:-) 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!

von Rainer U. (r-u)


Lesenswert?

Niclas Weber schrieb:
> Wenn das Signal
> nur 500ms ist soll nichts funktionieren.

* schön gelacht! *

von Karl H. (kbuchegg)


Lesenswert?

:-) 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.

von :-) (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

:-) schrieb:

> Lesen!

Ja. Zum Beispiel die Anforderungen des TO
Beitrag "Re: Signal Bereich bascom"

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

:-) schrieb:
>>  Und die Mindestzeit ?
>>  Finger weg von den Tasten!
>
> Lesen!

 Habe ich 5 mal hintereinander, kann immer noch nicht die Mindestzeit
 finden.

von :-) (Gast)


Lesenswert?

Marc Vesely schrieb:

>  Habe ich 5 mal hintereinander, kann immer noch nicht die Mindestzeit
>  finden.

Dann schreib se halt selber rein!

von Fremdschämer (Gast)


Lesenswert?

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.

von Lolli-Lümmel (Gast)


Lesenswert?

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.

von Niclas W. (Firma: XxX) (technikfreaky)


Lesenswert?

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
Noch kein Account? Hier anmelden.