www.mikrocontroller.net

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


Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zacc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das macht Sinn. Einer von 3 auf Null macht Eins ist ein NAND

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@michaelg: Ja genau, denke ich zu kompliziert?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herzlichen Dank euch allen, dann werde ich das so implementieren.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.