Forum: Mikrocontroller und Digitale Elektronik (WakeUp-)Interrupt über viele Schalter


von Der D. (derdaniel)


Angehängte Dateien:

Lesenswert?

Hallo,

vorweg mein Aufbau:
Kreisförmig angeordnete Reeds werden von einem Magneten so geshaltet das 
mehrere nebeneinander an sind (ist leider baugrößen bedingt so).
Diese werden per SPI über 74HC165er ausgelesen.
Das "ausgeschaltete" Gerät/AVR (in wirklichkeit im Power Down) soll 
jetzt bei einem Schaltvorgang per Interrupt geweckt werden.

Mein Problem:
Wie bekomme ich es hin das ohne ständiges Wecken des AVRs ein 
Schaltvorgang erkannt wird/ein Interrupt ausgelöst wird?
Einfaches zusammenfassen per OR Gatter oder Dioden geht nicht, da ja 
mehrere Geschaltete sind (das ist auch mein Größtes Problem).
Im moment habe ich den Schaltplan wie im Anhang (R1,5,7 Sind PullUps und 
R2,6,8 sind die "Schalter"), der macht mich aber absolut nicht 
glücklich.
Gibt es dafür spezielle Bausteine oder eine Bessere Schaltung?


Danke für Hilfe!

von (prx) A. K. (prx)


Lesenswert?

Controller mit Pin-Change Interrupt verwenden. Die Schalter so mit 
Dioden koppeln, dass bei beispielsweise maximal 3 gleichzeitig aktiven 
Schaltern erst jeder 4. Schalter am gleichen Pin landet. Dann tut sich 
bei jeder Änderung was an den Pins.

Wenn die anderen Enden der Schaltergruppen selektiv vom Controller 
angesteuert werden, dann kannst du über die entstehende Matrix auch 
gleich einige Shifter einsparen.

von Seltener Gast (Gast)


Lesenswert?

Daniel Steffen schrieb:

> Einfaches zusammenfassen per OR Gatter oder Dioden geht nicht, da ja
> mehrere Geschaltete sind

Die Pin-Change-Interrupt-Methode ist zwar besser; wenn man es aber 
dennoch mit Gattern machen möchte, geht das sehr wohl, nämlich mit 
beliebig vielen hintereinandergeschalteten EXOR-Gattern. Sowas gibt's 
auch fertig als "Paritätsprüfer", z.B. CD40101 oder 74HC280 mit 9 
Eingängen oder CD4531 mit 13 Eingängen.

Wann immer sich ein Eingangspegel ändert, ändert sich auch der Ausgang 
des gesamten Konstrukts - und könnte somit einen Interrupt auslösen. 
Problematisch wird das nur, wenn sich zwei Eingänge gleichzeitig 
ändern...

von Der D. (derdaniel)


Lesenswert?

@ A. K.:
Kannst du deine Methode bitte nochmal genauer erklären?
Ich steh aufm Schlauch und weiß echt nicht was du meinst.


@Seltener Gast:
XOR Gatter, darauf hätte ich auch selbst kommen können.
Vielen dank für den Wink!!!

von Peter D. (peda)


Lesenswert?

Entweder einen extra ATtiny nehmen und diesen per Pin-Change aufwachen 
lassen.

Oder den PCF8574 per I2C auslesen, der hat einen Interruptausgang.

Bei beiden spart man sich auch den externen Pullup je Taster ein.


Peter

von (prx) A. K. (prx)


Lesenswert?

Daniel Steffen schrieb:

> Kannst du deine Methode bitte nochmal genauer erklären?
> Ich steh aufm Schlauch und weiß echt nicht was du meinst.

Sorry für die Prosa, aber CAD auf einem Netbook macht wenig Freude.

Ich nehme hierfür mal an, dass maximal 3 benachbarte Schalter der 
insgesamt N Stück eingeschaltet sein können. Sind es mehr, dann 
entsprechend anpassen.

Du benötigst 4 Input-Pins mit Pin Change Interrupt, die internen Pullups 
eingeschaltet. An den ersten Pin kommt über eine Diode pro Schalter die 
"obere" Seite der Schalter 1,5,9,13,... an den zweiten 2,6,10,14,... 
usw.

Zusätzlich benötigst du N/4 Output-Pins oder Schieberegister-Pins. An 
den ersten davon kommt das "untere" Ende der Schalter 1-4, an den 
zweiten 5-8 usw. So kannst du zur Abfrage der Reihe nach die 4er Gruppen 
auswählen und feststellen, welche Schalter davon eingeschaltet sind.

Für den Powerdown stellst du sämtliche dieser Ausgänge auf low. Wann 
immer sich an den Schaltern etwas rührt wird sich an den Input-Pins 
etwas ändern und er wacht auf.

Gesamtaufwand für Schalter-Abfrage plus Fähigkeit zum Powerdown-Wakeup: 
N Dioden plus 4 Input-Pins plus N/4 Output Pins oder N/(8*4) 
SIPO-Schieberegister-ICs. Das dürfte weniger sein, als du bisher allein 
für die Abfrage vorgesehen hattest.

von (prx) A. K. (prx)


Lesenswert?

PS: Ergibt Stromverbrauch im Powerdown für 3x pininterne Pullups auf low 
gezogen. Ist das zu viel, dann hochohmigere externe Pullups verwenden.

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.