Forum: Mikrocontroller und Digitale Elektronik wait- oder waitms-Befehl wartet nicht ?


von Rumpen Z. (rumpenzumpen)


Lesenswert?

...kennt einer den Effekt ? in einigen Fällen scheint der Wait-Befehl 
nicht zu  warten ?!

wie behebe ich das ?

...habe die Bascom-Version 1.11.8.8


Gruß
 rumpen


------------------------------------------------------------------------ 
-
Code-Beispiel:

Do
   Print "hello"
   Waitms 5000
Loop

End

PS.: wait geht übrigens auch nicht !?

von Alber (Gast)


Lesenswert?

Hallo

Ich habe Bascom gerade nicht zur Hand aber....
hast Du mal einen kleineren Wert versucht (Waitms 500)? Vielleicht gibt 
es da eine Obergrenze, wobei beim überschreiten dieser der Compiler eine 
Fehlermeldung abgeben sollte.

Gruß
Alber

von Alex (Gast)


Lesenswert?

doch, der wartet, aber du merkst das einfach nicht!
was er macht ist einfach nur
"hello" ausgaben
warten 5 sek
"hello" noch mal ausgeben.
dabei bleibt auf dem Display alles unverändert.

probier mal so

Print "hello"
Waitms 2500
Clr
print "hello"
waitms 2500
loop

Viel Erfolg
MfG Alexander

von Werner A. (homebrew)


Lesenswert?

Schöner ist das eh in einer schleife


for (i=1;i<=5;i++)
   print "noch %i"
   delay 1000
end

von Rumpen Z. (rumpenzumpen)


Lesenswert?

hmm, irgendwie funzt das alles nicht wie erwartet ( danke für den 
C-schnipsel - kann aber leider kein C)

habe untenstehdnes probiert:   ... und es wartet auch nicht ? merkwürdig 
!
ich gebe das ganze über Com1 auf einen 2.ten Rechner ans Terminal
und hättte jetzt einen sehr langsamen Zeilenvorschub erwartet ( zu 
erkennen am aufblitzen des Cursors) - aber die Zeilen rauschen nur so 
durch

was tun ?

erstaunlicherweise habe ich gestern ein kurzes Testprog, in dem ein 
AD-Wert über Com1 ausgegeben wird, gestestet und da kann komfortabel 
über den waitms-Befehl die Ausgabe geschwindigkeit steuern . ??? warum 
nur hier ???


********************* das geht nicht ************
Do

Waitms 500
Waitms 500
Waitms 500
Waitms 500

Print " "
Print "hello"
Waitms 500
Waitms 500
Waitms 500
Waitms 500
Waitms 500

Print " "
print "hello"
Waitms 500
Waitms 500
Waitms 500
Waitms 500
Loop

End

***********************************************************************
hier ein Teil der AD-Demo: das geht ....

Do
  W = Getadc(channel)
  Print "Channel " ; Channel ; " value " ; W
  Waitms 1000
Loop
End

von Werner A. (homebrew)


Lesenswert?

Was geht denn in deinem Beispiel nicht? du wirst doch nie einen 
Unterschied sehen, da du in beiden Fällen das gleiche ausgibts.

Probier doch mal sowas...
Do
  Print "Hello" ; i
  Waitms 1000
  i = i + 1
Loop
End

von nixwisser (Gast)


Lesenswert?

vielleicht hast Du das Simulator-Statement noch drin ($sim)? Das 
entfernt alle warteschleifen.. :-)

von Rumpen Z. (rumpenzumpen)


Lesenswert?

ahh, die Erlösung - es war das $sim-Statement !!! habe mir irgendwoher 
einen
'Kopf' kopiert, ohne alles verstanden zu haben.....

....also $sim raus.

--> wait geht !!

--> und die Ansteuerung des LCD-Displays damit auch !!!endlich !
    Es geht hier übrigens um das EA W162B-N3LW (wurde im Forum schon 
irgendwo
    mal als problematisch erwähnt )--> läuft mit der lcd4.lib....

schönen Dank an alle, die sich meinetwegen den Kopf zerbrochen haben ...


Gruß
 Rumpen

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.