Hilfe: 8 Lämpchen - Leuchtdurchlauf

Beogradjanin

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich habe insgesamt 8 Lämpchen als Ausgang (also ein Byte.. Von A 0.0 bis A 0.7).

Da ich am experimentieren bin, wollte ich fragen, ob die Möglichkeit bei Verwendung eines Schieberegisters (oder ähnlichem?!) besteht, dass die Lämpchen von links nach rechts leuchten.

In etwa so (x: leuchtet, o: leuchtet nicht)

Schalter unten:
o o o o o o o o

Schalter hoch:
x o o o o o o o
o x o o o o o o
o o x o o o o o
o o o x o o o o
o o o o x o o o
o o o o o x o o
o o o o o o x o
o o o o o o o x

(links ist a 0.0, rechts 0.7.. An sich aber egal, wie die leuchten. Es geht ja um's Prinzip :) )

und wieder von vorne.

Meine Überlegungen waren jetzt die:

- Timer wird benötigt (das nach einer gewissen Zeit die nächste Lampe leuchtet)
- Evtl. durch ein "Schieberegister" (dass das 1-Bit vom niederwertigsten, bis zum höchstwertigstem Bit läuft).

Irgendwie müsste das aber in einer Schleife passieren.

Oder sollte man hier irgendwie mit positiven und negativen Flanken arbeiten?
 
Hallo,

du kannst am einfachsten von einem Taktmerker, die dir die S7 standardmässig zur Verfügung stellt eine Flanke bilden.

Code:
u m0.5  //Taktmerker
fp m1.0 //Hilfsmerker
= m1.1 //FlankeTaktmerker

u m1.1 //FlankeTaktmerker
spbn end

l ab0
l 0
==i
s a0.0
spb end

l ab0
l 2
*i
t ab0

end: nop 0
so könnte es funzen ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Klappen tut es. Habe halt nur mein Taktmerkerbyte von 0.5 auf 100.1 geändert (erstens wollte ich es schneller haben, zweitens ist mein Taktmerkerbyte das Byte 100)

Code:
[COLOR=#ff0000]//Frage: Es ist doch so gesehen egal, [/COLOR]
[COLOR=#ff0000]ob ich als Hilfsmerker m1.0 nehme, [/COLOR]
[COLOR=#ff0000]oder m10.0, oder m0.1 ... ?[/COLOR]
u m100.1  //Taktmerker
fp m1.0 //Hilfsmerker
= m1.1 //FlankeTaktmerker
 
 
[COLOR=#ff0000]// Wieso soll er bei VKE=0 ans Ende springen? [/COLOR]
[COLOR=#ff0000]Soll es als eine Bedingung für eine Schleife gelten??[/COLOR]
u m1.1 //FlankeTaktmerker
spbn end
 
[COLOR=#ff0000]// Wieso wird ab0 als Zeitwert geladen? [/COLOR]
[COLOR=#ff0000]Wieso muss kein Timer initialisiert werden? [/COLOR]
[COLOR=#ff0000]Oder wird hier ab0 in den Akku 1 und in den Akku 2 [/COLOR]
[COLOR=#ff0000]der Wert 0 [/COLOR][COLOR=#ff0000]geladen und dann verglichen?? Falls gleich, [/COLOR]
[COLOR=#ff0000]dann setze a0.0 [/COLOR][COLOR=#ff0000]und springe ans Ende?![/COLOR]
l ab0
l 0
==is a0.0
spb end
 
 
[COLOR=red]//Und hier wird dann wohl immer um ein Bit weitergesprungen [/COLOR]
[COLOR=red](also ein Lämpchen, Bit0 -> Bit1 -> ...)[/COLOR]
l ab0
l 2
*i
t ab0
 
// 
 
end: nop 0

Auch habe ich bemerkt, dass nach dem achten Lämpchen (a0.7) eine kurze Zeit gestoppt wird, bis a0.0 wieder aufleuchtet.

Es hat wohl was mit:
Code:
l ab0
l 0
==i 
s a0.0
spb end

zu tun, oder?
 
... du brauchst keinen Timer - das macht der Taktmerker.
Und ja ... der Vergleich auf 0 des AB's bewirkt, dass der erste Ausgang wieder gesetzt wird (aber erst beim nächsten Takt). das Ganze läßt sich natürlich noch unendlich verbessern und ergänzen ...

Gruß
Larry
 
hab einfach:

Code:
l ab0
l 2
*i
t ab0
 
l ab0
l 0
==is a0.0
spb end

vertauscht (also wie oben gezeigt). Jetzt leuchtet das Lämpchen mit der Adressierung A 0.0 sofort nach A 0.7 wieder auf.
icon14.gif
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

//Frage: Es ist doch so gesehen egal, ob ich als Hilfsmerker m1.0 nehme, oder m10.0, oder m0.1 ... ?
u m100.1 //Taktmerker
fp m1.0 //Hilfsmerker
= m1.1 //FlankeTaktmerker

*ACK*

// Wieso soll er bei VKE=0 ans Ende springen?
Soll es als eine Bedingung für eine Schleife gelten??
u m1.1 //FlankeTaktmerker
spbn end

Nur alle xSekunden (Taktmerker) soll die anweisung 1x bearbeitet werden. Sonst hast keine Pausenzeit zwischen den Lämpchen


// Wieso wird ab0 als Zeitwert geladen?
Wieso muss kein Timer initialisiert werden?
Oder wird hier ab0 in den Akku 1 und in den Akku 2
der Wert 0 geladen und dann verglichen?? Falls gleich,
dann setze a0.0 und springe ans Ende?
!

*ACK*

//Und hier wird dann wohl immer um ein Bit weitergesprungen
(also ein Lämpchen, Bit0 -> Bit1 -> ...)

*ACK*
 
(....)
das Ganze läßt sich natürlich noch unendlich verbessern und ergänzen ...

Gruß
Larry

zum Beispiel so:

Code:
// folgendes im OB100 programmieren
      L     2#10000000100000001000000010000000    //Bitmuster in
      T     MD   100                    //Hilfsmwrker D-Word laden


//und das hier im OB1 oder anderswo
      U     M      0.0                  //Taktmerker
      FP    M      1.0                  //Flankenhilfsmerker
      SPBN  sp01
      L     MD   100                    //Hilfsmwrker D-Word
      RRD   1                           //rotiere das ganze um eins nach rechts 
      T     MD   100                    

Sp01: L     MD   100                    //schreibe das Resultat
      T     AB     0                    //auf ein Ausgangsbyte Deiner Wahl
 
Zurück
Oben