Forum: Mikrocontroller und Digitale Elektronik Schaltungserklärung (Philips Hue Dimming Switch)


von Christian O. (ottelo)



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

: Bearbeitet durch User
von Hagen R. (hagen)


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

: Bearbeitet durch User
von Hagen R. (hagen)


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

von Christian O. (ottelo)


Lesenswert?

Danke für die ausführliche Erklärung. Das macht Sinn.

von Peter D. (peda)


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.

von Christian O. (ottelo)


Lesenswert?

Mal eben selbst nachgeguckt...Alle Pins vom Port B können Pin change 
interrupts. Die verwendeten Pins vom Port D können nur teilweise 
external interrupt. Schon merkwürdig wieso sie nicht einfach die anderen 
Pins genommen haben. Kann echt aus dem genannten Grund von dir sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.