FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: jungeradleresw am 15 Januar 2015, 22:13:42

Titel: Bitmuster ausgeben
Beitrag von: jungeradleresw am 15 Januar 2015, 22:13:42
Hallo zusammen.

Meine Siemens S5 gibt so langsam den Geist auf, sie  soll durch einen RPI B+ ersetzt werden.
Zur Ausstattung: 32 Digitale Eingänge und 32 Digitale Ausgänge.
Zur Funktion: 32 Stromstoßschalter. Eingang  1 1x tasten = Ausgang 1 an, Eingang 1 noch mal tasten =Ausgang 1 aus  usw.

Ich habe keine Lust den ganzen Schrank umzubauen.

Mein vorhaben.:

In die Gehäuse der alten S5 sollen selbst gebaute Platinen einziehen. Bestückt mit Multiplexer und DFlipFlop in Cmos-technik.
(im Versuchsaufbau hat es Funktioniert)

Ich benötige für mein Vorhaben 8 GPIO's als Ausgang konfiguriert mit denen ich dann ein Bitmuster senden möchte

Von Fhem brauche ich 64 Schaltbefehle als impuls (es sollen keine Taster an den RPI angeschlossen werden und es soll auch keine Rückmeldung von den Platinen zum RPI geben) die jeweils ein bestimmtes Bitmuster an die Platinen weitergeben.

Beispiel:  Ich möchte den ehemaligen Ausgang 12 einschalten dazu benötige ich das Bitmuster  0011011 nun soll der 8. GPIO als Impuls den Schaltbefehl geben.
Zum Ausschalten des ehemaligen Ausgang 12 benötige ich das Bitmuster 0001011 und auch wieder den 8. GPIO als Impuls für den Schaltbefehl.

Das Bitmuster kann stehen bleiben bis das nächste Bitmuster gesetzt wird.


Das habe ich mit Fhem soweit mit DOIF auch hinbekommen.

define ScheBit1 RPI_GPIO 20
attr ScheBit1 direction output
attr ScheBit1 room RPI_GPIO

define ScheBit2 RPI_GPIO 26
attr ScheBit2 direction output
attr ScheBit2 room RPI_GPIO

define ScheBit3 RPI_GPIO 16
attr ScheBit3 direction output
attr ScheBit3 room RPI_GPIO

define ScheBit4 RPI_GPIO 19
attr ScheBit4 direction output
attr ScheBit4 room RPI_GPIO

define ScheBit5 RPI_GPIO 13
attr ScheBit5 direction output
attr ScheBit5 room RPI_GPIO

define ScheBit6 RPI_GPIO 12
attr ScheBit6 direction output
attr ScheBit6 room RPI_GPIO

define ScheBit7 RPI_GPIO 6
attr ScheBit7 direction output
attr ScheBit7 room RPI_GPIO

define ScheBit8 RPI_GPIO 5
attr ScheBit8 direction output
attr ScheBit8 room RPI_GPIO

define Durchgang dummy
attr Durchgang eventMap on:on off:off
attr Durchgang room Scheune

define Sattelkammer dummy
attr Sattelkammer eventMap on:on off:off
attr Sattelkammer room Scheune

define Heuboden dummy
attr Heuboden eventMap on:on off:off
attr Heuboden room Scheune

define Bit48 dummy
attr Bit48 eventMap on:on off:off
attr Bit48 room Scheune

define 0Ein dummy
attr 0Ein eventMap on:on off:off
attr 0Ein room Scheune

define 0Aus dummy
attr 0Aus eventMap on:on off:off
attr 0Aus room Scheune

define Warten dummy
attr Warten eventMap on:on off:off
attr Warten room RPI_GPIO

define Anwahl dummy
attr Anwahl eventMap on:on off:off
attr Anwahl room RPI_GPIO,Scheune

define ON1 DOIF ([Durchgang] eq "on") ((set ScheBit1,ScheBit2,ScheBit3,ScheBit4,ScheBit5,ScheBit6,ScheBit7 off))
attr ON1 do always
attr ON1 room Scheune
attr ON1 wait 0

define ON2 DOIF ([Sattelkammer] eq "on") ((set ScheBit2,ScheBit3,ScheBit4,ScheBit5,ScheBit6,ScheBit7 off), set ScheBit1 on)
attr ON2 do always
attr ON2 room Scheune
attr ON2 wait 0

define ON3 DOIF ([Heuboden] eq "on") ((set ScheBit1,ScheBit3,ScheBit4,ScheBit5,ScheBit6,ScheBit7 off), set ScheBit2 on)
attr ON3 do always
attr ON3 room Scheune
attr ON3 wait 0

define ScheuneEin DOIF ([0Ein] eq "on" and [Anwahl] eq "on") (set ScheBit5 on, set ScheBit8 on) \
DOELSEIF ([0Ein] eq "on" and [ScheBit5] eq "on" and [ScheBit8] eq "on")(set ScheBit5 off , set ScheBit8 off, set 0Ein off, (set Durchgang,Sattelkammer,Heuboden,Bit48 off), set Anwahl off)
attr ScheuneEin do always
attr ScheuneEin room Scheune
attr ScheuneEin wait 0:0.5

define ScheuneAus DOIF ([0Aus] eq "on" and [Anwahl] eq "on") (set ScheBit8 on) \
DOELSEIF ([0Aus] eq "on" and [ScheBit8] eq "on")(set ScheBit8 off, set 0Aus off, (set Durchgang,Sattelkammer,Heuboden,Bit48 off), set Anwahl off)
attr ScheuneAus do always
attr ScheuneAus room Scheune
attr ScheuneAus wait 0:0.5

define Wahl DOIF ([LichtScheune] ne "off") (set Anwahl on) DOELSEIF ([Anwahl] eq "off") ((set Anwahl,0Ein,0Aus off))
attr Wahl do always
attr Wahl room Scheune


Das Problem bei der Sache ist das ich momentan das Bitmuster Vorwählen muß (Bsp: Durchgang) und danach auf einschalten oder ausschlten drücken muss.

Es sollen in Fhem für jeden ehemaligen SPS Ausgang 2 definierte Taster zu sehen sein. Aus/Ein.
Solange der Impuls anliegt muss eine weitere Befehlsabage geblockt werden oder in Warteschlange gehen.

Und da komme ich nicht weiter.

Ich hoffe das ich mich einigermaßen verständlich ausgedrückt habe und ihr mir ein paar Tipps geben könnt.

Mit freundlichen Grüßen

Ingo



Titel: Antw:Bitmuster ausgeben
Beitrag von: micha.deckert am 18 Januar 2015, 14:32:16
Hallo Ingo,

ich suche selbst nach einer Lösung für 32 Oder 40 IOs. Ich hab bis jetzt Schieberegister, komme also mit 4 GPIOs aus (DATA IN, DATA OUT, CLOCK, STROBE), die GPIO sind dafür aber evtl. zu langsam. Ich versuche den Weg zu gehen, mir ein eigenes Modul zu schreiben, das regelmäßig pollt. Leider komme ich aktuell auch nicht weiter. Kannst Du deine Schaltung (Skizze) mal hier einstellen oder mir persönlich schicken?

Michael