Hallo, ich versuche eine Matrix Folientastatur abzufragen und laufe dabei in ein paar Probleme. 1. Sobald ich 2 Tasten drücke, kann ich diese entweder nur vertikal oder horizontal erkennen (je nachdem ob ich Spalten oder Zeilen abfrage). 2. Ab 3 gedrückten Tasten sind, wie bekannt, Fehler möglich. Diese kann man natürlich Hardwareseitig durch Dioden beheben, leider ist dies dem Hersteller der Folientastatur aber nicht möglich. In diversen Quellen wird dann von einer "Fehlererkennung mittels intelligenter Software" geredet. Leider komme ich da nicht auf den richtigen Zweig. Vielleicht hat einer von euch ein paar Tips. Zur Beschaltung: Die gesammte 4x4 Tastatur hängt am PORTB. Hierbei hat jeder PIN (also auch die treibenden Pins) einen 10k Pulldown bekommen (soll, sofern nicht eine bidirektionale Abfrage nötig ist später geändert werden). Vielen Dank schoneinmal Philipp
@ Philipp Schaefer (pschaefer) >1. Sobald ich 2 Tasten drücke, kann ich diese entweder nur vertikal oder >horizontal erkennen (je nachdem ob ich Spalten oder Zeilen abfrage). Dann muss man halt immer zweimal abfragen. >Zur Beschaltung: Die gesammte 4x4 Tastatur hängt am PORTB. Hierbei hat >jeder PIN (also auch die treibenden Pins) einen 10k Pulldown bekommen Ist OK, wenn gleich ich Pull-Ups nehmen würde, weil der AVR auch intern Pull-Ups hat. >(soll, sofern nicht eine bidirektionale Abfrage nötig ist später >geändert werden). Lass es so, die zwei Widertände treiben dich nicht in den Ruin.
Welche "diversen Quellen" reden da immer von "intelligenter Software"? Prinzipiell hast du da nämlich erst mal keine Chance. Bestenfalls durch gleichzeitige Auswertung sowohl der Zeilen und der Spalten kannst du versuchen, da mehr herauszufinden.... Und wenn du dir mal überlegst, wieviele Kombinationen von Mehrfachbetätigung bei 16 Tasten möglich sind, dann solltest du einfach sagen: Mehrfachbetätigung = Fehler BTW: Pullups sind üblicher...
Du könntest dir zur Fehlererkennung merken, ob bzw. welche Taster gedrückt und losgelassen wurden. Niemand wir zwei oder mehr Taster genau gleichzeitig drücken. Das heißt du erkennst, dass ein Taster gedrückt wurde und kurz darauf wird noch einer gedrückt, ohne dass der vorherige losgelassen wurde -> Fehler
Das Problem ist leider, dass es wichtig ist 2 Taster, die gleichzeitig gedrückt sind erkannt werden müssen. Das ganze ist ein Prototyp und soll nachher auf eine Matrix von bis zu 8x8 angewendet werden. Und da dieses Feld für eine Steuerung angewendert werden soll, ist es etwas ungemütlich wenn dort Phantomtasten erscheinen, die dann Maschinenfunktionen steuern. Mir erklärt sich noch nicht ganz warum 2 gleichzeitig gedrückte Taster und deren Erkennung abhängig von der Abfrage ist (also Spalten/Zeilen Abfrage). Kann dies damit zusammenhängen, dass dann ein als Ausgang und low eingestellter Port nach oben gezogen werden muss und der µC das nicht schafft? Die Konfiguration sieht momentan so aus: Am PORTB hängen an den Pins 0-3 die 4 Spalten, an Pin 4-7 die Zeilen (die ich auch abfrage). Das DDR B = 0xF0; Außerdem hängt an jedem Pin ein Pulldown. Mit dieser Konfiguration kann ich nur horizontal und diagonal 2 Tasten erkennen. Nie vertikal. Wenn ich das jetzt genau umdrehe, also DDRB auf 0x0F; und auf die Zeilen Strom gebe und die Spalten abfrage, dann kann ich vertikal und diagonal Tasten erkennen. Dies erschließt sich mir überhaupt nicht.
Philipp Schaefer schrieb: > Am PORTB hängen an den Pins 0-3 die 4 Spalten, an Pin 4-7 die Zeilen > (die ich auch abfrage). Das DDR B = 0xF0; Außerdem hängt an jedem Pin > ein Pulldown. Wenn Du keine Dioden in der Tastatur verbaut hat, darfst Du nur jeweils einen Anschluss als Ausgang definieren. Alle anderen Anschlüsse des Ports müssen Eingänge sein. Sonst ist es möglich, dass bei zwei gleichzeitig gedrückten Tasten, zwei Ausgänge des µC kurzgeschlossen werden. Zwei gedrückte Tasten kann man noch sicher erkennen. Drei gedrückte Tasten (je nach Kombination) nicht mehr. Gruß John
John Bauer schrieb: > Wenn Du keine Dioden in der Tastatur verbaut hat, darfst Du nur jeweils > einen Anschluss als Ausgang definieren. Alle anderen Anschlüsse des > Ports müssen Eingänge sein. Sonst ist es möglich, dass bei zwei > gleichzeitig gedrückten Tasten, zwei Ausgänge des µC kurzgeschlossen > werden. Perfekt, dann weiß ich schonmal woher das Problem 1 herkommt und werde das gleich morgen mal austesteten. John Bauer schrieb: > Zwei gedrückte Tasten kann man noch sicher erkennen. Drei gedrückte > Tasten (je nach Kombination) nicht mehr. Wie kann ich denn erkennen, ob mehr als 2 Tasten gedrückt sind? Oder ist das auch gar nicht möglich. Ich brauche maximal 2 gleichzeitig drückbare
@ Philipp Schaefer (pschaefer) >> Wenn Du keine Dioden in der Tastatur verbaut hat, darfst Du nur jeweils >> einen Anschluss als Ausgang definieren. Alle anderen Anschlüsse des >> Ports müssen Eingänge sein. Sonst ist es möglich, dass bei zwei >> gleichzeitig gedrückten Tasten, zwei Ausgänge des µC kurzgeschlossen >> werden. Das ist aber auch sonst so. Nur eine der Spalten wird aktiv auf (low) gezogen, die anderen per Pull Up auf High, snd also auch hochohmig. Wenn man dann die Zeilen ausliest, seht man, welche Taste gedrückt ist. Erkennt man mehr als 1 Low, sind mindestens zwei Tasten gedrückt. Erkennt man das bei mehreren Spalten, sind mehr als zwei Tasten gedrückt. >Wie kann ich denn erkennen, ob mehr als 2 Tasten gedrückt sind? Wenn du Phantomtasten erkennst. Das spuckt dir deine Routine aus, wenn sie denn richtig programmiert wurde. > Oder ist das auch gar nicht möglich. Doch. > Ich brauche maximal 2 gleichzeitig drückbare Das kann man, indem man zweimal scannt, einmal horizontal und einmal vertikal.
Falk Brunner schrieb: > Das kann man, indem man zweimal scannt, einmal horizontal und einmal > vertikal. Reicht es nicht einmal zu scannen? - erste Spalte auf Ausgang und auf high und die vier Zeilen abfragen - zweite Spalte auf Ausgang und auf high und die vier Zeilen abfragen - das gleiche mit der dritten und vierten Spalte Wenn jetzt insgesamt mehr als zwei Bits bei der Zeilenabfrage auf high waren, dann waren mehr als zwei Tasten gedrückt.
@ John Bauer (johnbauer) >> Das kann man, indem man zweimal scannt, einmal horizontal und einmal >> vertikal. >Reicht es nicht einmal zu scannen? Hmmm, kann sein.
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.