Forum: Mikrocontroller und Digitale Elektronik Bascom, Programm verzeigen


von Herr U. (mxvalentine)


Lesenswert?

Guten Morgen zusammen bin mir  gerade ein kleines App am basteln, und 
bin auf folgende Probleme gestoßen.

1. wenn ich if /elseif /elseif benutze dann geht der immer in den ersten 
elseif Schritt der möglich ist und fängt danach wieder bei if an anstatt 
alle elseif Befehle weiter abzuarbeiten die noch weiter unten stehen und 
auch alle Bedingungen erfüllt haben, ist das normal? O.o

2. wie bekomme ich es hin das ich das Programm verzweigen kann, sprich 
ich lasse gleichzeitig nen Timer von 5 sek ablaufen und solange blinkt 
ne Led mit 1 Hz? Ich hab es jetzt so hinbekommen, mit nem Counter aber 
finde das nicht so schön, deshalb wüsste ich gerne wie ich zwei 
parallele Stränge im Programm einbauen kann die gleichzeitig 
abgearbeitet werden.



Mit freundlichen Grüßen
der Bascom Noob :D

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Zeig doch mal deinen Code...  :-/

Florian P. schrieb:
> geht der immer in den ersten elseif Schritt der möglich ist
Das ist das gewünschte Verhalten einer if-elsif-Kette. Du wirst 
vermutlich eine andere Vorgehensweise wählen müssen.

> deshalb wüsste ich gerne wie ich zwei parallele Stränge im Programm
> einbauen kann die gleichzeitig abgearbeitet werden.
Richtig parallel geht das nicht. Du hast nur 1 Prozessor, dun der kann 
nur jeweils 1 Befehl abarbeiten. Du wirst also (wie Windows und jedes 
andere Multitasking-OS) deine Rechenzeit auf die verschiedenen Aufgaben 
aufteilen müssen. Am einfachsten geht das, indem du in einer 
Dauerschleife anfangs die Eingänge einliest, dann schnellstmöglich die 
Ausgänge berechnest, und die Werte zum Schluss rausschreibst. So wie 
auch eine "übliche" SPS arbeitet.

von Herr U. (mxvalentine)


Lesenswert?

Ja schön das ist mir auch schon so ziemlich klar gewesen aber mit 
welchen Befehlen erzeug ich eben den Effekt, das es scheint als ob er es 
parallel abarbeitet?
wie würde ein Programm aussehen bei dem 2 Led in unterschiedlichen 
Frequenzen blinken?

und mit welchen Anweisungen umgehe ich den Effekt von elseif das er auch 
noch die nachfolgenden Schritte abarbeitet?

von weinbauer (Gast)


Lesenswert?

select, case, ist auch ne schöne Struktur.

Naja, 4Hz und 1Hz "parallel" da langweilt sich der µC aber mächtig
dazwischen.

Du kannst zwei Timer verwenden und unterschiedlich preloaden,
dann nen Zähler hoch counten und schon läuft die Geschichte.
Kannst aber auch alles aus einem Timer heraus generieren.

von Herr U. (mxvalentine)


Lesenswert?

@weinbauer

könntest du zu beidem vielelicht mal ein paar Zeilen Beispiel Programm 
schreiben? ^^

das wäre super, danke

von Justus S. (jussa)


Lesenswert?

Florian P. schrieb:
> und mit welchen Anweisungen umgehe ich den Effekt von elseif das er auch
> noch die nachfolgenden Schritte abarbeitet?

das else im elseif einfach weglassen...

von snowfly (Gast)


Lesenswert?

in der Hilfe steht es so:

[...]
If A = 10 Then Print "New in BASCOM"
If A = 10 Then Goto Label1 Else print "A<>10"
[...]

also kein elseif, weil das wird immer ausgeführt wenn die If bedinung 
nicht passt, sondern nur mit if .. then .. den Bedinung-erfüllt-Fall 
abfragen und das für jede Bedinung.
Oder Select .. Case .. ist auch ganz gut für sowas.

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Elseif und Select Case sind zur Auswahl 1 aus x geeignet. Sobald ein 
Fall zutrifft, werden die restlichen nicht mehr geprüft.

Wenn Du alle Fälle prüfen willst und mehrere Fälle zur gleichen Zeit 
zutreffend sein können, dann musst Du eben für jeden Fall eine eigene 
If-Then-Endif-Abfrage schreiben.

MfG

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.