tbs1-bo / ea_rpi_modul

Python Bibliothek für ein E/A-Modul für den RaspberryPi.
1 stars 0 forks source link

Unterstützung für das Dimmen in eapi.net #2

Closed pintman closed 8 years ago

pintman commented 8 years ago

Vorschlag von elektroschule:

Ich habe noch eine paar Ideen für eapi.net. Es wäre nicht schlecht, wenn man die LEDs einzeln ansprechen könnte. Beispielweise könnte man die ersten sechs Bit des übertragenen Byte nutzt. xxaaabbb: x=beliebig, a=gibt an, ob LED geschaltet werden soll, b=gibt an, auf welchen Wert die LED geschaltet werden soll. Beispiel1: ??1001?? schaltet die erste LED an, die zweite und dritte LED bleiben unberücksichtigt. Beispiel2: ??1010?1 schaltet die erste LED aus, die dritte LED an und die zweite LED bleibt unberücksichtigt.

Vielleicht fällt dir noch ein besseres System ein, wie man die LED einzeln ansprechen kann.

Die ersten beiden Bit könnte man noch nutzen um die LED in 4 Stufen zu dimmen. 00 = 25%, 01 = 50%, 10 = 75&, 11 = 100 %

pintman commented 8 years ago

Coole Idee. Ich war schon am grübeln, das ganze auf drei Bytes zu verteilen. Aber dein Vorschlag gefällt mir auch sehr gut. Werde ich mal umsetzen.

pintman commented 8 years ago

OK, ich fasse es noch einmal zusammen.

Das Bitmuster ist wie folgt aufgebaut:

1 2 3 4 5 6 7 8
h h a a a b b b

Bit 1-2: Helligkeit: 00: 25%, 01: 50%, 10: 75%, 11: 100% Bit 3-5: LED Rot (3), Gelb (4) oder Grün(5) soll geschaltet werden (1) oder nicht (0) Bit 5-8: Wert (0 oder 1) auf den dir rote (6), gelbe (7) oder grüne (8) LED geschaltet werden soll.

Die Verteilung der Helligkeitswerte gefällt mir noch nicht richtig, wegen der Asymmetrie.

elektroschule commented 8 years ago

Die Verteilung der Helligkeitswerte gefällt mir noch nicht richtig, wegen der Asymmetrie.

Durch das herkömmliche Ausschalten über die b-Bits hat man ja noch eine fünfte Dimmstufe.

pintman commented 8 years ago

Gegenvorschlag:

Es werden drei Bytes gesendet, eines für jede Farbe (rot, gelb und grün).

Das gesendete Byte muss jeweils einen Wert zwischen 0 und 100 aufweisen. Dieser Wert wird für die Helligkeit (0=aus, 100=volle Helligkeit) verwendet. Hat das Byte den Wert 255 (binär 11111111), wird es ignoriert und die Anzeige der LED wird nicht verändert.

pintman commented 8 years ago

Eine weitere Variante käme weiterhin mit einem Byte aus:

aabb bbbb

Mit den ersten beiden Bits (a) wird die LED angesprochen: 00=Rot, 01=Gelb, 10=Grün, 11=ignoriert oder reserviert für spätere Erweiterungen :).

In den folgenden 6 Bits (b) wird der Helligkeitswert kodiert. Mit 6 Bits ergeben sich 2^6=64 Helligkeitsstufen von 0 (000000) bis 63 (111111).

elektroschule commented 8 years ago

Die 3-Byte-Variante gefällt mir etwas besser. Ich würde aber vielleicht 128 Schaltstufen wählen:

abbb bbbb

Das a-Bit gibt an, ob die LED berücksichtigt wird und die b-Bits geben die Stufe an. In etwa so:

if byte > 127:
    p.ChangeDutyCycle((byte-128)/127*100)
pintman commented 8 years ago

Bringt die genauere Auflösung denn einen Vorteil? Da der Parameter von ChangeDutyCycle zwischen 0 und 100 liege muss, dachte ich, dass es auch nur eine Auflösung von 100 Schritten gibt.

elektroschule commented 8 years ago
p.ChangeDutyCycle(dc)  # where 0.0 <= dc <= 100.0

Zumindest scheint er auch Dezimalzahlen zu akzeptieren. Wie genau es tatsächlich aufgelöst wird, weiß ich nicht. Ob der Effekt sichtbar ist, müsste man mal ausprobieren.

Man hätte halt eine schöne glatte Anzahl und könnte alle Werte zwischen x000 0000 und x111 1111 nutzen und nicht nur bis x110 0100.

pintman commented 8 years ago

Dagegen spricht, dass ich ungern mit Dezimalzahlen jongliere. Ich favorisiere daher die Variante mit den 100 Werten. Du hast recht, dass einige Werte ungenutzt bleiben. Vielleicht kann man später mit ihnen noch etwas machen. :)

pintman commented 8 years ago

In Version 0.2.6 habe ich die Version mit den drei Bytes, die jeweils zwischen 0 und 100 liegen umgesetzt. Du darfst gerne testen. :)

pintman commented 8 years ago

Version 0.2.7 hat nun auch einen angepassten Testclient, der mit python3 -m eapi.net startclient gestartet werden kann und Werte zwischen 0 und 100 an den Server schicken kann.