Forum: Mikrocontroller und Digitale Elektronik 4 Taster an einen Interrupt


von Tobi W. (todward)


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

von ... .. (docean) Benutzerseite


Lesenswert?

dann sind entweder ALLE Pins high oder low...

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

von Virus 7. (virus744)


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

von Tobi W. (todward)


Lesenswert?

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

Gruß
Tobias

von Michael W. (retikulum)


Lesenswert?

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

von Frank K. (bandit_x)


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

von Jan M. (mueschel)


Lesenswert?

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

von Tobi W. (todward)


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

von Peter F. (piet)


Angehängte Dateien:

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

von Klaus W. (mfgkw)


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.

von Peter D. (peda)


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

von Michael_ (Gast)


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.

von Klaus W. (mfgkw)


Lesenswert?

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

von Tobi W. (todward)


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

von Peter F. (piet)


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

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.