Logik / Kann das so funktionieren?

OP #753376
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?
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.
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.