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
dann sind entweder ALLE Pins high oder low... d.h. du weißt immer noch nicht welcher taster gedrückt ist..
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
OK da haste recht aber hättest du eine idee wie ich das machen könnte? Gruß Tobias
Alle Taster mit Dioden auf den Int-Pin entkoppeln. Die 4 Anoden an den Int und jeden Taster mit einer Kathode verbinden. Michael
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
Oder du wechselst auf einen pinkompatiblen Atmega88, dort gibt es pin-change-interrupts fuer alle Eingänge.
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
Tobias W. schrieb:
> Geht das so oder gibt es da noch eine andere Möglichkeit?
Ein Bild sagt mehr als Tausend Worte ;-)
Mfg,
Peter
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.
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
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.
@Peter F.: fehlt da nicht noch etwas zw. Pullup (ggf. intern)? Ansonsten fast der gleiche Vorschlag wie bei meiner, nur +/- vertauscht.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.