Forum: Mikrocontroller und Digitale Elektronik Logik / Kann das so funktionieren?


von Thomas L. (tom)


Lesenswert?

Hallo zusammen.

Ich habe hier einen Atmega8 an dem schon ein bischen Periphere hängt. 
Das Ding verbringt eigentlich die meiste Zeit im Schlaf (Batterie!). 
Aufgeweckt werden soll es nur durch einen externen Interrupt.

Momentan hängt am externen Interrupt genau ein einzelner Schalter. Aus 
diesem einen sollen nun drei Stück werden. Ich hab jedoch nur einen 
externen Interrupt zur Verfügung, mit dem ich den Atmega aufwecken kann 
(sofern ich die Angaben im Datasheet richtig verstehe).

Ich habe mir nun folgendes überlegt. Ich schließe die Buttons an PD0-PD2 
an, die Buttons sind jeweils Lowaktiv (interner PullUp aktiv). 
Zusätzlich gehe ich mit jedem Button zu einem Logischen NAND. Der 
Ausgang von diesem hängt wiederum dann am externen Interrupt.
In der ISR frage ich ab, welcher Button denn nun gedrückt wird und lege 
mich dann schlafen.

Habe ich irgendwas übersehen? Ist das so möglich?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Ich kann Dir nicht ganz folgen, was willst Du machen? Du willst diese 
drei Taster unterscheiden koennen und jeder soll jeweils den Interrupt 
ausloesen?

von Zacc (Gast)


Lesenswert?

Ja, das macht Sinn. Einer von 3 auf Null macht Eins ist ein NAND

von Thomas L. (tom)


Lesenswert?

@michaelg: Ja genau, denke ich zu kompliziert?

von Johannes M. (johnny-m)


Lesenswert?

Thomas Linder wrote:
> Ich habe mir nun folgendes überlegt. Ich schließe die Buttons an PD0-PD2
> an, die Buttons sind jeweils Lowaktiv (interner PullUp aktiv).
> Zusätzlich gehe ich mit jedem Button zu einem Logischen NAND. Der
> Ausgang von diesem hängt wiederum dann am externen Interrupt.
> In der ISR frage ich ab, welcher Button denn nun gedrückt wird
Ja, habe ich auch schon mal gemacht, aber mit ein paar mehr Tasten

> Habe ich irgendwas übersehen? Ist das so möglich?
Das geht problemlos. Ist in solchen Fällen ne elegante Lösung.

von Michael U. (amiga)


Lesenswert?

Hallo,

Je Taster eine Diode mit Anode am INT-Eingang und Kathode am Taster 
erledigt das auch. PullUps ein, INT bei fallender Flanke.

Gruß aus Berlin
Michael

von Thomas L. (tom)


Lesenswert?

Herzlichen Dank euch allen, dann werde ich das so implementieren.

von Peter D. (peda)


Lesenswert?

Warum der Aufwand?

Einfach den gemeinsamen Pin der 3 Taster an den Interrupt (interner 
Pullup ein) und die 3 anderen Anschlüsse auf Pins.

Im Sleep die 3 Pins auf Low und schon kriegst Du nen Interrupt, wenn ein 
Taster gedrückt wird.

Dann alle der Reihe nach auf Input (nicht auf High, sonst gibts 
Datenkämpfe, wenn 2 Tasten gedrückt sind) und prüfen, wann der Interupt 
auch auf high geht (Taste gefunden).

Man muß nicht immer gleich unnütz zusätzliche Hardware dranpappen.


Peter

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.