Forum: Mikrocontroller und Digitale Elektronik Taster per SPI auslesen?


von Schorsch (Gast)


Lesenswert?

Hallo,

möglicherweise ist das Problem so trivial, dass ich es momentan einfach 
nicht sehe. Ich frage mich, ob es möglich ist mehrere (etwa 16) Taster 
per SPI auszulesen? Um nicht ständig pollen zu müssen, dachte ich, man 
könnte die parallelen Eingänge an Schieberegistern mit 
Eingangs-FlipFlops verwenden.

Solche ICs gibt es: z.B. 74HCT597 ober 74HC589

Allerdings sind diese ICs schon relativ alt, man kriegt sie kaum noch 
(meine ich zu mindest). Zudem ist es nur möglich, so wie ich das 
Datenblatt verstehe den Eingangszustand in einem Moment in die 
Kippstufen zu speichern. Gibt es andere?

Besteht die Möglichkeit die Kippstufen dauerhaft (also bis zum nächsten 
Reset) zu durch ein kurzes Tasten zu setzen? Auf diese Weise würde man 
sich das Entprellen sparen, weil ein ständiges ein und aus letzenendes 
nur in einem high resultieren würde.

Ich bin mir einfach nicht sicher, ob ich die Datenblätter richtig 
verstehe.

Nochmal die Kurzfassung, damit auch wirklich klar ist, was ich meine:
1. Ich drücke irgendwann kurz (~150 µs) auf einen Taster
2. Dieses Signal kippt eine Kipptstufe auf High um, die sonst low zeigt
3. Irgendwann ganz viel später, vielleicht 10x pro Sekunde wird das 
Shiftregister, an welchem die FlipFlop ausgänge liegen per SPI 
ausgelesen und die FlipFlops resettet.

Da muß doch irgendwo ein Haken sein, sonst würden dass doch all so 
machen...

Besten Dank im Vorraus
Schorsch

von holger (Gast)


Lesenswert?

>1. Ich drücke irgendwann kurz (~150 µs) auf einen Taster

Das schaffst du im Leben nicht.

von Sesk K. (zeborok)


Lesenswert?

Man kann doch mit Parallel->Seriell Schieberegistern (gibt ja jene mit 
gepufferten Eingängen und jene ohne) solche Dinge realisieren. 74xx165 
oder x597. Schau mal hier: 
http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI#Eing.C3.A4nge

von Schorsch (Gast)


Lesenswert?

Ok 150µs ist etwas kurz, lass es 200 oder 300 µs sein, mehr glaube ich 
ist es wirklich nicht....

Bei den genannten Schieberegistern u.a. xx165 müssen so wie ich das 
verstehe die Eingangslatche immer getriggert werden, das heißt doch, das 
man nur den Status der zum Triggerzeitpunkt gelegt wird darstellen kann 
- oder verstehe ich das falsch?

Ich möchte erst auf den einen Taster drücker, dann vielleicht noch auf 
einen zweiten. Beide tasten-anschläge sollen immer in einem high im 
Eingangslatch resultieren - unabhängig von einem Trigger

Oder stehe ich total auf dem Schlauch?

Schorsch

von Matthias L. (Gast)


Lesenswert?

>Beide tasten-anschläge sollen immer in einem high im
>Eingangslatch resultieren

Wozu?

Es reicht doch, wenn du beide Tasten in der SW hast.

Also baue eine klassische Tastenmatrix auf und lese das per SW ein.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Schorsch schrieb:
> Ok 150µs ist etwas kurz, lass es 200 oder 300 µs sein, mehr glaube ich
> ist es wirklich nicht....

Immer noch zu niedrig gepokert!

von Helfer (Gast)


Lesenswert?

Du drückst die Taste mit der Hand/dem Finger? Ist's eine schliessende 
oder nur "feuernde" Taste? Mikrosekunden? Das will ich sehen! ;D

Vermutlich bist du mit einem 74xx165 PISO bestens bedient. Der MC kann 
die "im Schlaf" mehrere 100x pro Sekunde abfragen um festzustellen, ob 
Tasten gedrückt sind. Entprellen in der SW ist auch keine Hexerei. :)

von Guido Körber (Gast)


Lesenswert?

Einigen wir uns mal auf einige Millisekunden für einen sehr schnellen 
Tastenanschlag, so knapp zweistellig mindestens. Die Tasten alle 4 ms 
abfragen und dann warten ob die für mindestens 4 Abfragen konstant 
bleiben reicht völlig aus um auch ganz extrem schnelle Tastenanschläge 
sicher zu erkennen.

Der Haken bei Deiner Lösung ist der große Hardwareaufwand, Du brauchst 
zwei Chips, mit einer 4x4 Matrix braucht man nur 8 Portpins.

von Peter D. (peda)


Lesenswert?

Schorsch schrieb:
> Ok 150µs ist etwas kurz, lass es 200 oder 300 µs sein, mehr glaube ich
> ist es wirklich nicht....

Miß es dochmal nach, Du wirst staunen:
Ein Mensch braucht typisch 300.000µs = 300ms.
Im Alter wird es noch mehr.

Ein Polling im Timerinterrupt alle 10..50ms ist dicke ausreichend und 
kostet kaum CPU-Last.


Peter

von Guido Körber (Gast)


Lesenswert?

Gut trainierte Gamer kommen unter 100 ms und klassisch ausgebildete 
Schreibmaschinenkräfte kriegen so was auch hin.

Lachkrämpfe erzeugen bei mir aber Leute die ernsthaft erzählen sie 
würden den Unterschied zwischen einer USB Low Speed Maus und einer Full 
Speed Maus erkennen.

von Michael A. (Gast)


Lesenswert?

Guido Körber schrieb:
> Gut trainierte Gamer kommen unter 100 ms und klassisch ausgebildete
> Schreibmaschinenkräfte kriegen so was auch hin.

Man muß das mit der Entprellung ja nicht übertreiben, wie bei manchem 
Fahrstuhl, wo man schon mal aus Versehen gegen die Tasten stoßen darf, 
ohne dass etwas passiert und man beim Drücken innerlich erstmal 
"EinSchimpanse" zählen muß, damit der was mitkriegt.

von Willi W. (Gast)


Lesenswert?

Guido Körber schrieb:
> Gut trainierte Gamer kommen unter 100 ms und klassisch ausgebildete
> Schreibmaschinenkräfte kriegen so was auch hin.

Wer auf der Schreibmaschine 4000 Anschläge schreibt, ist schon ganz 
zufrieden. Das wären rund 150 ms pro Tastendruck. Mit "alle 4..10ms mal 
nachgeguckt" kriegt man das prima mit ;-)

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.