Tastatur - ASCII Code dezentral generieren?

Hallo,
mal ne Frage laienhaft ins Blaue. Soweit ich verstehe drückt man bei einer Tastatur einen Knopf, nach bestimmten Methoden erfährt ein Chip welche das war, dieser generiert dann einen Ascii-Code und schickt ihn an den Computer. Soweit richtig?

Spricht etwas dagegen mehrere Chips in einem Gerät zu haben die dezentral - also maximal direkt an der Einzeltaste den Code generiert, der dann blos noch weitergeleitet wird?

in meine letzte Frage greifend, wie groß müsste ein Chip mit der Fähigkeit einen Asciii Code für 2 bis 6 Tasten zu generieren

danke schonmal :slight_smile:

Hallo.

Der Chip sitzt in der Tastatur und sendet einen Scancode an den Computer. Dort wird diesem Scancode mittels länderspezifischer Code-Tabelle ein ASCII-Code zugeordnet.

Wenn du die Chips an die Einzeltasten hängen willst, ja. Tastaturen sind als Matrix aufgebaut. Ganz grob: Es gibt „Drive Lines“ und „Sense Lines“. Die „Drive Lines“ werden nacheinander „aktiv“ geschaltet, dann wird jeweils geschaut, auf welcher „Sense Line“ sich dieser Zustand „aktiv“ ablesen läßt. Jeder Kombination ist eine Taste zugeordnet.
Sind nun mehrere gleiche Chips angeschlossen, kommen die sich möglicherweise in die Quere.

Das sollte selbst mit dem kleinsten 8bit-Microcontroller machbar sein (z.B. irgendein Pic oder ATtiny), sofern er genügend Pins hat. Bei so wenigen Tasten lohnt sich eine Matrix übrigens nicht. Da schließt man die Tasten besser direkt an Eingangspins an. Die Machbarkeit hängt dann noch ein bißchen davon ab, wie man die Codes weiterleiten will, wobei selbst mit kleinen Controllern z.B. USB realisierbar ist.

Was hast du denn vor?

Gruß

Kannitverstan

Es ist ein unterteiltes Eingabegerät. Ich möchte einzelne Tastenblöcke ablesen. Es ist alles relativ Verwinkelt und auf Kleinbau angewiesen. Ich kann auch definitiv nicht fette Kabelstränge verlegen (daher dezentrale Chips - hauptsächlich um den Leiter/Kabelwust zusammenzufassen bevor er problematisch wird)

Ok Ascii-Code ist vielleicht falsch ausgedrückt, Zuordnungscode halt

meine Überlegung:

von 5 Tasten, eine gedrückt = Signal > dezentraler Chip = ScanCode > zentraler „Routerchip“> Computer

von 50 Tasten eine gedrückt = Signal > zentraler Chip (oder „direkt an Eingangpins“) = Scan Code > Computer

soweit ich es verstehe, ist der Unterschied nur eine Chip-Instanz mehr - kostet das signifikante Reaktionszeit? das wäre mein Hauptbedenken

Inwieweit kämen sich Chips „in die Quere“? Ich würde schon einen zentralen Sammelchip zwischenschalten.

Es geht nicht darum es selber zu bauen, ich will nur wissen was technisch machbar ist.

Hallo,

Früher war es üblich, dass der Tastaturdecoder die Tastenbetätigung direkt in ASCII umgewandelt hat. Der Anschluss war dann meistens parallel, also 8-9 Bits, selten befand sich eine serielle Schnittstelle auf dem Controller. Dies liegt historisch auch daran, dass es Tastaturcontroller schon lange vor den ersten Mikroprozessoren gab und eine serielle Schnittstelle sehr viele Transistoren benötigt. Dies hätte damals die benötigte Chipfläche mindestens verdoppelt und den Chip entsprechend verteuert.

Manche PCs, wie z.B. der PET, haben die Tasten direkt in einem Treiber mit der CPU ausgewertet, das sparte die Kosten für den Tastaturcontroller.

IBM ging dann beim IBM-PC einen geteilten Weg. Die Tastatur liefert einen Scancode. über eine serielle Schnittstelle. Der Scancode besteht aus der Tastennummer und einem Bit, welches informiert ob die Taste gedrückt oder losgelassen wurde.
Im PC befindet sich dann der Tastaturtreiber, welcher den Scancode z.B. in ASCII übersetzt (es gibt auch noch andere Codes).
Dies hatte einige Vorteile. Traditionell verwendete IBM EBCDIC auf ihren anderen Rechner und nicht ASCII. Für ein IBM-Eigenes Betriebssystem, mit EBCDIC, hätte man sonst eine andere Tastatur benötigt.
Zudem gibt es noch das Problem mit den unterschiedlichen Tastatur-Layouts, je nach Land und Sprache. Früher benötigte Jede Ausführung einen anderen Kontroller, bzw. dieser musste irgendwie anders programmiert und getestet werden.
Mit dem Scancode konnte IBM nur eine einzige Tastatur herstellen und auch testen, erst am Ende mussten dann die Tastenkappen noch richtig aufgesteckt werden.
Heute ist es noch einfacher, dafür sind die Tasten schneller abgegriffen. Hergestellt wird nur eine Tastatur mit schwarzen Kappen. Als letzter Schritt wird dann die Tastatur mit einem Laser passend graviert. Dies gibt die maximale Flexibilität für die Produktion. Es ist im Prinzip kein zusätzlicher Aufwand 2 Tastaturen mit ägyptischen Hieroglyphen herzustellen, dazu muss dem Laser nur die richtige Datei übergeben werden und dies geht ganz ohne Unterbrechung der Produktion. Die Herausforderung liegt dann beim verpacken, da muss die passende Bedienungsanleitung und CD in die richtige Schachtel :slight_smile:

MfG Peter(TOO)

Das ist alles gut zu wissen. Sehr interessant. Bin in dem Thema leider noch sehr unbewandert. Danke schon mal.

Frage bleibt aber: verringert der Durchlauf durch ein oder zwei Zwischenchips die Reaktionszeit der Tasten wesentlich?

Nach meiner Laienvorstellung muss doch der erste „dezentrale Chip“ erstmal einen mindestens 8-Bit Code auf die Reise schicken der dann nochmal vom „Routerchip“ bearbeitet wird - wie ist die zeitliche Dimension dieses Vorgangs

Die Tastatur verfügt über viele Tasten. Mit traditionellen Ascii Tabellen soll sie ohnehin nur bedingt arbeiten. Mir gehts erstmal um technische Machbarkeiten.

Hallo!

Erstmal: Geht es immernoch darum, daß du 3x2x1mm Platz für Chips hast? Dann vergiß es, das ist deutlich zu wenig Platz, da bekommst du nicht mal die Kabel dran.

Zur technischen Umsetzung: Man muß keine 8 Bit übertragen, denn die dezentralen Chips werden keine 256 Tasten haben. Mit drei Bits könnte man acht Tasten verwalten, alles andere übernimmt der zentrale Chip dann.
Allerdings haben die meisten Microcontroller ne serielle Datenübertragung wie I2C und SPI eingebaut, die zwar immer 8 Bit verschickt, aber auch deutlich schneller ist, als wenn man ihnen ne 3Bit-Übertragung beibringt. Und 115000Bit/s schaffen die meisten. Die Verzögerung durch mehrere Chips wird sich daher sicherlich deutlich geringer als 1ms ausfallen, das ist kein Problem.

Übrigens, wenn man viele Tasten hat, benutzt man meist ne Matrix zum Auslesen, und verdrahtet nicht jede Taste einzeln:

       |   |   |
    ---1---2---3
       |   |   |
    ---4---5---6
       |   |   |
    ---7---8---9

Man hat hier drei waagerechte und drei senkrechte Leitungen. Beim Drücken der Taste 7 wird die dritte waagerechte mit der ersten senkrechten verbunden. So braucht man nur sechs Leitungen für neun Tasten. Nachteil: wenn man 5 und 7 gleichzeitig drückt, ist das das gleiche wie 4 und 8.
Für 50 Tasten käme man mit 5x10=15 Leitungen aus. Wenn du die Tasten in zehn Gruppen mit je 5 Tasten unterteilst, bekommst du unterm Strich mehr Kabel.

1 Like

Hallo.

Wenn du das mit einem Mikrocontroller machst, wird die Verarbeitungszeit irgendwo im einstelligen ms-Bereich liegen. Kommt drauf an, wie schnell das Ding getaktet ist und wie effizient es rechnen kann.
Dazu kommt eine Entprellzeit von ebenfalls mindestens 10ms (das kommt auf die Qualität der Tasten an).
Dazu kommt evtl. die Zykluszeit einer Abfrage über alle Chips, wenn du sie über ein Bussystem (z.B. I2C) mit dem „zentralen“ Chip verbindest, was sich bei vielen verteilten Einheiten durchaus anbietet.
Und oben drauf noch die Verarbeitungszeit des zentralen Chips, auch irgendwo bei ein paar ms.
Die Wahrnehmbarkeitsschwelle („ich drücke eine Taste und es tut sich nix“) liegt bei ca. 40…60ms - da dürftest du auf jeden Fall drunter liegen, falls das für dich relevant ist.
Eine Alternative zum Mikrocontroller als „dezentrale“ Chips könnten „IO Expander“ sein. Die werden in der Regel auch über I2C oder SPI an einen Mikrocontroller angeschlossen.

Technisch machbar ist vieles. Um die optimale Lösung zu finden, müßte man schon mehr Details haben:
Wie viele Tasten insgesamt?
Wie ist die Aufteilung auf die einzelnen Blöcke?
Welche Strecken liegen zwischen den Tastenblöcken?
Wie sind die Umgebungsbedingungen (Einbauraum, Temperaturen, EMV-Störungen, …)?
etc. pp.

Gruß

Kannitverstan

1 Like

Hallo,

Das kann man mit zusätzlichen Dioden einfach lösen.
Es gibt aber, mit einem Mikroprozessor, auch noch andere Lösungswege.

Der Fachbegriff für das Problem ist 2-Key-rollover oder n-Key-rollover. Findet man als Angabe in den entsprechenden Datenblättern zu Tastatur-Controllern oder Software-Modulen.

MfG Peter(TOO)

1 Like

alles klar, danke für die Erklärung und Illustration, so hab ich mir Matrizen auch vorgestellt, aber in meinem Fall nicht unbedingt sinnvoll, es sind ja pro element nur 6 Tasten

8 Bit wären dann sicher ideal, soweit ich verstehe könnte ich ja dann 128 Tasten verwalten plus 1 bit für den „state“ (also gedrückt oder nicht)

also würde ich ja theoretisch einen 8 bit controller chip mit 12 (da 6 Tasten) Pins benötigen richtig? Matrix wären dann wohl nur 5 aber will ich eher nicht wegen doppeldrück. Wie groß ist sowas in mm? ich recherchier auch mal

aber die wichtigste info ist schon mal, dass der zeitverlust nicht relevant ist, ich denke so im gamer bereich kann man mit bis 5 ms schon leben, die leute spielen ja online spiele mit 30 ms pings, danke schonmal :+1:

@PeterTOO hab sogar zufällig bei google patent das patent zum überwinden von rollovers gefunden ^^

Hallo!

Eine Tastatur ist eigentlich darauf ausgelegt, daß immer nur eine Taste gleichzeitig gedrückt ist (abgesehen von SHIFT, STRG und so) Mit 8 Bit könnte man daher 256 Tasten verwalten. Sobald eine Taste gedrückt wird, wird ein Wert von 0 bis 255 gesendet, sonst nicht.

Wenn geplant ist, mehrere Tasten gleichzeitig zu drücken, muß mans ich was anderes überlegen, aber das ist alles überhaupt kein Problem für die Datenübertragung.
Wichtig ist, daß man das mit der Matrix der Tasten hinbekommt. Wie irgendwer schon schrieb, kann man das mit einer Diode an jeder einzelnen Taste lösen, aber ich weiß ja nicht, ob du dafür Platz hast.

Und ich bleib dabei, den Platz, den du deiner Elektronik lässt ist viel zu gering, auch für wenige Tasten. Selbst mit 6 Tasten kommst du ja noch auf 5 Leitungen für die Matrix, zwei zur Spannungsversorgung, und ein bis zwei für die Datenkommunikation. Die müssen ja auch an deine Platine ran.

1 Like

soweit ich verstehe ist doch die Matrix nur ein Weg um Leitungen zu sparen, ich verstehe nicht ganz warum das unbedingt notwendig ist

ich würde die 6 Tasten direkt mit dem Scancode-Erzeuger verbinden - sind dann 12 Pins - plus spannung wie du sagst, kein Drama oder? damit spar ich mir doch dann die ganzen Rollover-Sorgen

so ein 18 Pin Kamerad sollte das doch handlen können, ist mir zwar immernoch ein bisschen groß aber krieg ich schon irgendwie integriert

http://www.produktinfo.conrad.com/datenblaetter/150000-174999/165143-da-01-en-PIC16F54_I_P.pdf

ah danke, perfekte Erklärung zu den Reaktionszeiten, kann leider nicht zu viele Details verraten, ist halt teil der Erfindung, die Strecken sind extrem kurz - wie bei einer normalen Tastatur

die länge der Entprellzeit überrascht mich, aber vielleicht hab ich auch eine falsche Vorstellung von den zeitlichen Dimensionen

eine optimale Lösung suche ich in dem Stadium noch nicht, nur was in etwa machbar ist, die genauen Grenzen erfahr ich ja dann vom Hersteller, aber das Wissen ist schon mal sehr wertvoll :+1: