mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4 Taster an einen Interrupt


Autor: Tobi W. (todward)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich lese  hier schon eine Zeitlang mit und ihr habt mir acuh schon das 
ein oder andere mal geholfen und jetzt hab ich mich dann auch mal hier 
angmeldet.

Mein problem ist hoffentlich einfach zu lösen.
Ich will einen Reaktionszeitmessgerät bauen! Die hardware ist eigentlich 
schon so gut wie fertig aber hier ist auch gleich das Problem. Ich 
möchte gerne die Taster per interrupt auswertet. da ich aber an meinem 
Atmega8 keine vier externen Interrupts zur Verfügung hab, dachte ich mir 
ich schließe alle 4 Taster an den einen einen Interrupt an und 
zusätzlich an jedem taster geht dann noch ein kabel an Portb um dort 
dann den jeweiligen taster in der ISR auszuwerten.


Portb.0 o----+---- <Taster 1>--------| GND
             |
Portb.1 o----+---- <Taster 2>--------| GND
             |
Portb.2 o----+---- <Taster 3>--------| GND
             |
Portb.3 o----+---- <Taster 4>--------| GND
             |
INT2    o----+

Geht das so oder gibt es da noch eine andere Möglichkeit?

Gruß
Tobias

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann sind entweder ALLE Pins high oder low...

d.h. du weißt immer noch nicht welcher taster gedrückt ist..

Autor: Virus 744 (virus744)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Möglichkeit 1:
An den passenden Stellen Dioden einfügung und hoffen dass die Pegel dann 
noch ausreichend sind.

Möglichkeit 2:
Taster nehmen, die "4-Polig" sind, und somit 2 getrennte Taster in einem 
realisiert sind.

Mfg

Autor: Tobi W. (todward)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK da haste recht aber hättest du eine idee wie ich das machen könnte?

Gruß
Tobias

Autor: Michael W. (retikulum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alle Taster mit Dioden auf den Int-Pin entkoppeln. Die 4 Anoden an den 
Int und jeden Taster mit einer Kathode verbinden.
Michael

Autor: Frank Kellner (bandit_x)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie Virus schon geschireben hat, jeden Taster über eine Diode an den 
interrupt anschliessen.

Oder eben ohne Interrupt arbeiten. Ich weiss nicht wie viel dein 
Controller schon zu tun hat. Aber meistens hat der noch genug Zeit die 
Taster zu pollen.

Bei der Interruptmethode musst du auf jedenfall noch das prellen der 
Taster abfangen, da sonst bei jedem Tastendruck mehrere Interrupts 
ausgelößt werden.

Gruß,
Frank

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder du wechselst auf einen pinkompatiblen Atmega88, dort gibt es 
pin-change-interrupts fuer alle Eingänge.

Autor: Tobi W. (todward)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre ne möglichkeit den Controller zu wechseln.

Aber wenn ich mir recht überlege was der mega8 machen muss kann ihc auch 
pollen.
denn ich habe nur eine Timer ISR die eine variable im 1ms takt 
hochzählt, einen Sub der den LCD kram übernimmt und das wars. Also 
könnte ich in der Hauptschleife auch die Taster pollen.

Somit wäre das ganze gelöst
Danke an alle, die ihre ideen mit eingebracht haben. das mit Dioden 
werde ich mir mal merken.

Gruß
Todward

Autor: Peter F. (piet)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tobias W. schrieb:
> Geht das so oder gibt es da noch eine andere Möglichkeit?

Ein Bild sagt mehr als Tausend Worte ;-)

Mfg,
Peter

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andere Möglichkeit:
Um einen Interrupt auszulösen bei mindestens einem gedrückten
Taster könnte man die 4 Eingänge jeweils negieren (bzw. gleich
Pulldown nach GND, Taster gegen VCC), dann alle vier erstens
ver-OR-et auf den Interrupteingang sowie zweitens zusätzlich
an je einen Eingang.
Wenn der Interrupt auslöst, liest man die 4 Eingänge und weiß,
wer der Schuldige war.

So ähnlich hatte ich mal Signalketten von Drehgebern auf
einen IR gelegt, wobei ich da zusätzlich jeden Flankenwechsel
haben wollte und deshalb die Einzelsignale nicht mit OR sondern
XOR verknüpft hatte.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst Du mit dem Interrupt?

Du fragst die Tasten einfach im 1ms Interrupt ab und gut is.

Wobei 1ms eh geschönt ist. 10ms Schritte reichen für nen Menschen dicke 
aus.


Peter

Autor: Michael_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte mal die AVR-Instruktion AVR240 ansehen. Dort wird gezeigt. wie man 
eine 4x4-Tastatur anschließt und nur einen Int. benötigt. Läßt sich 
leicht auf weniger Tasten anpassen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter F.: fehlt da nicht noch etwas zw. Pullup (ggf. intern)?
Ansonsten fast der gleiche Vorschlag wie bei meiner,
nur +/- vertauscht.

Autor: Tobi W. (todward)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Was willst Du mit dem Interrupt?
>
> Du fragst die Tasten einfach im 1ms Interrupt ab und gut is.
>
> Wobei 1ms eh geschönt ist. 10ms Schritte reichen für nen Menschen dicke
> aus.
>
>
> Peter

10ms ist doch um die reaktionszeit meiner meinung zu viel.
Die tasten abfrage in die timer isr zu packen wäre auch ne möglichkeit.

gruß
Tobi

Autor: Peter F. (piet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> @Peter F.: fehlt da nicht noch etwas zw. Pullup (ggf. intern)?
> Ansonsten fast der gleiche Vorschlag wie bei meiner,
> nur +/- vertauscht.

Oh, sorry, ja.
Weils mehr oder weniger selbstverständlich ist hatte ich es nicht extra 
erwähnt ;-)
Natürlich die Internen Pullups am Int-Pin und den Tasten-Pins anschalten 
nicht vergessen.

Low-Active ist das ganze da der AVR aus dem Power Down nur mit nem Low 
Level aufwacht.

Mfg,
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.