Archiv verlassen und diese Seite im Standarddesign anzeigen : AT-Keyboard emulieren
ch.ruder
31.01.2007, 16:25
Hallo zusammen,
Ich habe 8 Tasten, mit denen ich gewisse Funktionen an einem Computer über die Tastaturschnittstelle (PS/2) steuern will. Meine erste Idee war, einen Tastaturcontroller auszubauen und den mit den Tasten verbinden. Da die Zuweisung der Tasten ändern kann und die Tasten auch anderswertig genutzt werden sollen, wird das zu umständlich.
Nun ist meine Idee, einen Controller nachzuprogrammieren. Das Protokoll zur Übertragung der einzelnen Tasten ist ja nicht so schwierig, auch die Tastencodes sind im Internet auffindbar. Jedoch finde ich keine Infromationen zur initialisierung. Was will der PC beim Starten alles wissen und was muss man Antworten? Hat jemand von euch Erfahrung damit?
Gruss
Christian
Hallo Christian
ich habe das zwar nicht alles gerade parat, aber ich weis wò's steht, meine beiden PC_ Intern haben das gewiss darin. Alternativ könte man ein wenig sniffen. Eins weiss ich noch aus dem Hut. Es ist ein 11 bit Protokoll und die Datenübertragung erfolgt synchron alles übrige später.
...
Jedoch finde ich keine Infromationen zur initialisierung. Was will der PC beim Starten alles wissen und was muss man Antworten? Hat jemand von euch Erfahrung damit?
Gruss
Christian
Ich hab mal sowas mit'm 8051er gebaut.
Ohne Initialisierung, ohne Protokolle einzuhalten.
Ist zwar quick & dirty, funktioniert (bei mir) trotzdem...
ch.ruder
31.01.2007, 20:16
@buz11: Das Bois lässt sich umgehen aber wie sieht's mit WinXp o.ä. aus. Mit welchem OS benutzt du die Schaltung?
Ich kann mir auch vorstellen, dass es Mainboard abhängig ist, denn manchen kann man die Tastatur ausziehen, wieder anschliessen und weiterschreiben.
Gruss
Christian
Habe hier ne ausführliche HW beschreibung gefunden.
http://de.wikipedia.org/wiki/PS/2-Schnittstelle
erschienen bei
http://www.addison-weslay.de
Befehle an die Tastatur:
edh :LED's schalten
eeh :echo gibt eeh zurück
f0h :scancode schalten/ identifizieren
f2h :identifiziert tastatur rückgabe ACK=at-tastatur, ACK+abh+41h= MFIItastatur
f3h :wiederholrate einstellen
f4h :aktivierung
f5h :Standard/deaktiviert
f6h :Standard/aktiviert
feh :resend
ffh : reset
sorry bin knapp an Zeit bei Bedarf mehr dazu.
ich denke f2h und eeh sind die entscheidenden code außerdem kanst du die tastatur über f0h per software steuern und eigene code hinzufügen :)
Also wenn das mit dem Wiki soweitergeht, kann ich bald meine Platten downgraden!
Aber das ganze noch mal in Englisch :p unter http://www.beyondlogic.org/keyboard/keybrd.htm
Gruß,
Arne
ch.ruder
01.02.2007, 10:52
Vielen Dank für die Links. Einen Teil habe ich auch schon selbst gefunden (Bei Wikipedia & den dazugehörigen Links schau ich immer zuerst nach). Das "Problem" ist einfach, dass auf diesen Seiten die Schnittstelle von der anderen Seite angeschaut wird (Keyboard -> Controller).
@Winne: Guter Tip mit dem Buch. Ein Kollege von mir sollte das noch haben. (Ich hätte nie daran gedacht).
Gruss
Christian
Mir ist Dein Problem jetzt nicht ganz klar - wenn ich Dich richtig verstanden habe, möchtest Du die normale Tastertur um eine weitere ergänzen und beide gleichzeitig am PS/2-Port betreiben!?
Die Links enthalten doch alle Daten, wann PC/Tastatur was macht, um das zu realisieren. In jedem Fall muß ein MC die Eingabegeräte händeln, damit der PC denkt, daß nur ein Eingabegerät angeschlossen ist.
Gruß,
Arne
P.S.
:alertblac Beim Experimentieren aufpassen: Es gibt einen Tastatur-Code für den PWR-Button am Rechner. In der Regel wird ein Power-Down ausgeführt, bei dem keine Möglichkeit mehr zum Speichern der einzelnen Applikationen besteht.:eek:
http://de.wikipedia.org/wiki/Scancode
Tastaturbefehle
Wird die Tastatur zurückgesetzt (PC schickt Reset = $FF), antwortet sie bei erfolgreichen Basic assurance test mit Bat = $AA
Wird die Tastatur zurückgesetzt und es gibt einen Fehlerfall, beispielsweise klemmt eine Taste, reagiert sie mit BatE1 = $FC oder BatE2 = $FD.
Der Test der Kommunikation erfolgt vom PC mit Echo = $EE und die Tastatur antwortet ebenfalls mit Echo = $EE.
Allgemein werden alle Kommandos zur Tastatur mit Acknowledge Ack = $FA von der Tastatur bestätigt. Stimmt etwas nicht mit den Daten, kommt ein Misunderstand Misu = $FE.
Wird die Tastatur Read ID = $F2 nach ihren Typ gefragt, antwortet eine MF2-Tastatur mit 2 Bytes ID1 = $AB und ID2 = $83.
Ist der Tastaturpuffer voll, reagiert die Tastatur mit Full = $FF
Der vom PC kommende Befehl Set LED = $ED gefolgt von einem Byte, steuert die Leuchtdioden (Bit 0..2 = ScrlLock, NumLock, CapsLock; Bit 3..7 = 0).
Vom PC Set Codeset = $F0 gefolgt von einem Byte, wählt das Code-Set 1..3 aus.
Vom PC Set Codeset = $F0 gefolgt von 0 fragt ab, welches Code Set aktiv ist.
Vom PC der Befehl Set Speed = $F3 gefolgt von einem Byte, steuert die Verzögerung (Bit 5, 6) und Wiederholungsrate (Bit 0..4).
Vom PC Enable = $F4 aktiviert den Scanvorgang und Disable = $F5 deaktiviert den Scanvorgang.
Vom PC Set Default = $F6 setzt alles auf Standardwerte.
Vom PC Resend = $FE dient zum Wiederholen des letzten Codes.
Code-Sets
Die Codetabelle der PC-Tastatur ist ein ziemliches Durcheinander. Schon früh hat man versucht, sie zu systematisieren und daher für die MF-Tastatur drei Codetabellen definiert:
Scan Code Set 1
Scan Code Set 2 (heutiger Standard)
Scan Code Set 3
Wo ist das Problem? Es ist alles beschrieben, was von der Tastatur erwartet wird, man muss es nur umsetzen. Auch das Protokoll ist höchst klar beschrieben (Link im vorherigen Beitrag). Dein Tastaturemulator muss nur reagieren wie erwartet. Sogar der Powerup und die BAT_Sequenz sind beschrieben. Damit ließe sich gar nen eigener Treiber für eine eigene Tastatur schreiben und alles so richtig verwurschteln.;)
Hw : 2 Bit Leitungen sind stadardmäßig als Input geschaltet und werden zum senden von low durch setzen des Richtungsregisters(Datta_Direktion_Register) bei stehenden Datenbit(low) low gezogen. Um ein High_Bit zu senden wird das DDR_Bit einfach wieder auf Input geschaltet. Nur aktiv auf high solltest du die Leitungen auf keinen Fall setzen. Das gäbe ne Kollision, wenn der PC gerade versucht die Leitung low zu ziehen.
ch.ruder
01.02.2007, 14:32
@Winne: Danke für den Link. Jetzt sollte es klar sein. :)
@Arne: Nein ich will "meine" Tastatur anstelle einer normalen Tastatur betreiben.
Danke & Gruss
Christian
Übrigens, Das Clock funktioniert eher wie Strobe bei der Centronix, als wie ein echtes Clock. Es signalisiert die Gültigkeit des Pegels auf der Dataleitung. Steht Data stabil wird Clock kurz high gezogen. Die fallende Flanke von Clock bendet das Data_Bit jetzt kann Data gewechselt werden. Im übrigen dient Clock dem Handshaking um Bisy zu signalisieren.
@buz11: Das Bois lässt sich umgehen aber wie sieht's mit WinXp o.ä. aus. Mit welchem OS benutzt du die Schaltung?
Ich kann mir auch vorstellen, dass es Mainboard abhängig ist, denn manchen kann man die Tastatur ausziehen, wieder anschliessen und weiterschreiben.
Gruss
Christian
OS = win98se und xp
hardware= Athlon64 auf nForce4, Duron auf VIA KT133
Funkentratzer
01.02.2007, 23:03
Wenn Du irgendwo doch ein kleines USB-Buchserl hast:
http://www.obdev.at/products/avrusb/hidkeys.html , vielleicht hilfts was.
Hallo,
ich habe mich in letzter Zeit intensiv mit Tastaturen beschäftigt. Ich habe sowohl Tastaturen, als auch Hosts nachprogrammiert. Ganz so trivial ist es nicht. Die Daten sind beispielsweise, je nach dem ob gerade der Rechner Daten schickt oder ob sie von der Tastatur kommen, mal auf Clock=high bzw. auf Clock=low gültig. Mit dem ACK bit siehts ähnlich aus. Auf der Seite www.marjorie.de (http://www.marjorie.de) gibts dazu auch noch nen bisschen zu lesen. Außerdem muss die Tastatur bei heutigen Boards während der initialisation eine bestimmte Kennung senden, sonst kommt nen Keyboard-Error.
Falls du genaueres wissen willst, sag bescheid.
Grüße
Michael
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.