Schaltungserklärung (Philips Hue Dimming Switch)

OP #5308828
Lesenswert?

Ich habe zuhause ein Philips Hue System installiert, mit einigen Lampen, 
Motion Sensoren und Schaltern. Damit ich mein vorhandenes 
Schalterprogramm (GIRA S-Color) weiterverwenden kann, anstatt die Hue 
Dimming Schalter daneben zu kleben, habe ich diese auseinandergebaut und 
in meine Schalterdosen integriert. Nebenbei habe ich die Schaltung der 
Platine analysiert, damit ich die SMD Touchbuttons gegen GIRA Taster 
tauschen kann.

Mir ist aufgefallen, dass die Entwickler eine verrückte Schaltung 
verwenden, anstatt einfach 3V über die Taster auf 4 GPIOs zu legen. Mir 
ist noch nicht ganz klar, wie diese funktioniert (siehe Anhang). Der 
verwendete Microcontroller ist vom Typ Atmel M2564RFR2. Die Taster sind 
"paarweise miteinander verschaltet" und gehen dann jeweils zu zwei 
GPIOs. Insgesamt also 4 GPIOs, die aber nicht normal verwendet werden. 
An PD0, PD1 liegt 3V an (interner Pullup). An den anderen PD4, PD5 liegt 
keine Spannung an = 0V. Lege ich nun einfach 3V an z.B. PD4, passiert 
nichts. Ziehe ich PD0 oder PD1 auf GND, passiert auch nichts. Nur die 
Kombination PD0 auf PD4 legen usw. funktioniert. Dabei fällt sinkt die 
3V auf 0.
LAut Handbuch können alle 4 (5 mit Reset) GPIOs als externer Interrupt 
verwendet werden, bestimmt um den uC aufzuwecken. Aber warum die 
Schaltung so aufgebaut wurde, verstehe ich nicht. Kann mir da einer 
helfen? Ich wollte es nur rein informativ wissen.

Eine Anleitung zum Umbau habe ich auf ottelo.jimdo.de
#5309451
Lesenswert?

Der AVR wird in einen Deep Sleep Modus versetzt aus dem man nur mit 
einem Low Level Triggered Interrupt rauskommt. Dh. PD1,PD0 werden mit 
PullUps auf Eingang gesetzt und deren Low Level INTs aktiviert. PD4,PD5 
(die keinen solchen IQR unterstützen) als Ausgänge auf Low Level. Nun 
geht der AVR in den Sleep Modus. Wird eine der 4 Tasten betätigt so wird 
einer der zwei Low Level IRQs an PD1/PD0 die MCU aufwecken. Nun wird zur 
Auswertung bei zB. PD0-IRQ die Pins PD4 und PD5 nacheinander von 
Low-Level auf High-Z Input programmiert und gleichzeitig PD0 abgefragt. 
So hat man 4 Taster die auf 2 Low-Level IRQs gemappt sind und damit den 
AVR aufwecken können. Und man kann jede der Kombinationen über vier 
Taster gleichzeitig drücken und unterscheiden. Geschickt würde ich sagen 
da eben diese Low-Level-Triggered Eingänge bei AVRs dünn gesäht sind, 
heist nicht jeder Pin unterstützt das und der Pin-Change Interrupt kann 
den AVR nicht aus den tiefen Sleep Modis aufwecken.

Gruß hagen
#5309466
Lesenswert?

Das geht auch einfacher.
Man benötigt nur einen Pin wie PD0 mit PullUp und Low-Level-IRQ Feature. 
Alle anderen Pins gehen über einen Taster an diesen gemeinsammen Input. 
Die MCU wird bei Low-Level am Pin PD0 aufgeweckt und ruft die PD0 
Low-Level-ISR auf. In dieser werden dann alle Taster-Pins auf High-Z 
geschaltet und nacheinander abgefragt indem man sie auf 
Low-Level-Ausgang setzt. So benötigt man nur einen Pin und dessen 
Low-Level-IRQ samt ISR, statt wie oben eben zwei solcher ISRs.

Gruß Hagen
#5309613
Lesenswert?

Hagen R. schrieb:
> Der AVR wird in einen Deep Sleep Modus versetzt aus dem man nur mit
> einem Low Level Triggered Interrupt rauskommt.

Es gibt 8 Interruptpins bzw. fast alle Pins können Pin-Change-Interrupt. 
An den fehlenden Aufwachquellen liegt es daher nicht.

Vermutlich gibt es auch eine Bedieneinheit mit mehreren Tasten und dann 
spart die Matrixabfrage Pins.
Und für die Sparvariante mit nur 4 Tasten wollte man nicht extra das 
ganze Programm umschreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren