# Funktionsbaustein Lauflicht



## maxi (2 April 2006)

Hallo alle,
ich mag mit einer 312 ein Lauflicht bauen aus LED Modulen mit je 8 Led`s die ich hinter einander stecken möchte.
Die 8 LED lassen sich einzeln ansteuern.

Dachte an ein Schieberegister im Funktionsbaustein.
Ein Byte (8) mit dem Muster der 8 Led.
1 Bit mit vorwärts oder rückwärts
1 timer für die gescheindichkeit 
Ein Byte für die Ausgänge


Wie wandel ich den das Byte (8) in 4 hintereinder hängende Bytes also in dein DW (32) im Funktionsbaustein um?
Und wie wandel ich das DW im Funktionsbaustein wieder in ein Byte um?

---

Noch eine Frage, ich habe 16 Relais Ausgangskarten.
Mit denen kann ich 3,3 Volt der LED`s schalten?


----------



## asengott (21 April 2006)

*????*

Hallo
verstehe nicht warum du ein byte in ein DW umwandel willst.
wenn ich dich richtig versanden habe dann kannst du die leds direkt mit nem ausgang steuern.
also ich würde so vorgehen
nimm ein DW setze das erste bit zyklisch immer wieder auf 1
schiebe mit der flanke eines taktgebers (zb taktmerkerbyte cpu) das DW um eine stelle nach links.
weise den einzelenen bits des DW einen ausgang (leds) zu 
fertig.
oder habe ich dich falsch verstanden ?
gruß asengott


----------



## Rainer Hönle (21 April 2006)

Initialisierung des Doppelwortes in einem Anlaufbaustein oder in einem Datenwort und zwar mit DW#16#01010101. Die Schiebung durch Rotation ersetzen und zwar RLD bzw. RRD. Danach wieder in Doppelwort speichern. Die Rotation abhängig von Vorwärts- (z.B. RLD) oder Rückwärtsbit (z.B. RRD) mit jedem Timerablauf aufrufen. Dann nur ein Byte auf den Ausgang geben. Ich hoffe, ich habe mich verständlich ausgedrückt.


----------



## Rainer Hönle (21 April 2006)

```
L     MD   116
      U     T      2
      SPB   Nix
      U     M    120.0
      SPB   Left
      RRD   1
      T     MD   116
      SPA   Nix
Left: RLD   1
      T     MD   116
Nix:  T     AB   127
      UN    T      2
      L     S5T#1S
      SV    T      2
```
Ich hoffe, das entspricht Ihren Vorstellungen. Die Initialisierung ist hier nicht aufgeführt, muss aber unbedingt so erfolgen wie oben beschrieben.


----------



## Ma_su (21 April 2006)

Hier das ganze noch etwas einfacher:

```
U     M    200.5                  // Taktmerker
      FP    M      2.0                  //Flankenauswertung
      SPBN  m002
      L     MW   102                  //Lauflicht
      INVI                               // 1er Komplement bilden
      T     MW   102
m002: NOP   0
```

oder mit schieben:


```
U     M    200.5      //Taktmerker
      FP    M      1.0       //Flankenauswertung
      SPBN  m001
      L     MW   100       //Lauflicht
      SLW   1               // Schieben um eine Stelle nach links
      T     MW   100
      UN    M    100.7    // bit 15 im Wort
      S     M 101.0        // bit 0 im Wort
m001: NOP   0
```


Wichtig ist halt wie Herr Hönle schon sagte :


> Initialisierung des Doppelwortes in einem Anlaufbaustein oder in einem Datenwort und zwar mit DW#16#01010101


----------



## maxi (23 April 2006)

Aber wenn ich ein Wort also 0101010101010101 habe
ist das als DW ja 00000000000000000101010101010101

Wenn ich hier schiebe kommt ja rechts die null rein.

Oder AHHHHHHHHHHH ich schriebe es 
L db1.dbb 0 (Da steht mein 01010101 der 8 LED drinnen)
Dann Transferiere ich
T db1.dbb2
T db1.dbb3
T db1.dbb4
T db1.dbb5

und schon habe ich ein Word mit abfrage db1.dbw2
oder ein DW mit auch Abfrage db1.dbd2

oder?


----------



## Rainer Hönle (23 April 2006)

Haben Sie mein Beispiel getestet? Funktioniert es bei Ihnen nicht? Soll mehr als eine LED gleichzeitig an sein? Wenn ja wieviele und in welchem Muster?


----------



## volker (23 April 2006)

maxi schrieb:
			
		

> Aber wenn ich ein Wort also 0101010101010101 habe
> ist das als DW ja 00000000000000000101010101010101


 
das obere ist ein wort. 16bit
das untere ein dword. 32 bit.

das beispiel von reiner schiebt nicht, sondern rotiert (rrd).
wenn also rechts ein high-bit rausgeschoben wird, wird dieses wieder an bit 31 eingetragen


----------



## Ma_su (23 April 2006)

Oh, habe gerade gesehen das mir ein Fehler unterlaufen ist!

Bei meinem Beispiel darf man natürlich nicht Laden:
L     DW#16#1010101    (Hex-Zahl) 
binär = 0000_0001_0000_0001_0000_0001_0000_0001

sondern:
L     2#1010101010101010 (binär-Zahl)

außerdem wandert bei mir nicht nur eine Led, wie bei Herrn Hönle von rechts nach links, sondern jede zweite  immer einen weiter nach rechts.
Also  1010 1010 1010 1010
nach 0101 0101 0101 0101

Also hätte ich nicht schreiben sollen


> Hier das ganze noch etwas einfacher:



sonder hier das ganze *völlig anders*:

Man möge mir verzeihen, das nächste mal lese ich genauer.



Gruß Marc


----------



## volker (23 April 2006)

Ma_su schrieb:
			
		

> außerdem wandert bei mir nicht nur eine Led, wie bei Herrn Hönle von rechts nach links, sondern jede zweite immer einen weiter nach rechts.
> Also 1010 1010 1010 1010
> nach 0101 0101 0101 0101


 
logisch. 
betrachte das 32-bit-muster als kreis von dem du nur eine seite siehst (16bit). das bitmuster wird einfach nur immer im kreis geschoben


----------



## Ma_su (23 April 2006)

Das mit dem Kreis war schon klar!  

Ich hatte nur bei L DW#16#1010101 nicht hex im Kopf, sondern habe es als binär zahl gelesen.

Was mich noch interessiert, da ich mit rdl noch nicht´s  gemacht habe
ist warum noch die Zeile:

```
U     M    120.0
SPB   Left
...
...
Left: RLD   1
      T     MD   116
```

m120.0 hat doch mit Md 116 garnichts zu tuen, oder ?

Gruß Marc


----------



## Rainer Hönle (24 April 2006)

Ma_su schrieb:
			
		

> Das mit dem Kreis war schon klar!
> 
> Ich hatte nur bei L DW#16#1010101 nicht hex im Kopf, sondern habe es als binär zahl gelesen.
> 
> ...


Stimmt, der hat damit nichts zu tun. Aber in der Aufgabenstellung stand 





> 1 Bit mit vorwärts oder rückwärts


 und genau dieses Bit ist es.


----------



## Rainer Hönle (24 April 2006)

maxi schrieb:
			
		

> Aber wenn ich ein Wort also 0101010101010101 habe
> ist das als DW ja 00000000000000000101010101010101
> 
> Wenn ich hier schiebe kommt ja rechts die null rein.
> ...


Wenn jede zweite LED an ist, wie erkennt man dann die Richtung? 
M.E. nach funktioniert mein Code für alle Musterlängen die eine Zweierpotenz sind (1, 2, 4, 8). Sollte eine Musterlänge von 3 (z.B. 2 aus, 1 an) erforderlich sein, so muss der Code natürlich umgeschrieben werden.
Was ist nun eigentlich die genaue Aufgabenstellung? Welche Muster sollen verwendet werden?


----------

