Hallo zusammen, versuche gerade ein altes PC/AT Keyboard mit dem Atmel anzusteuern. Leider verhält sich das Keyboard nicht wie erwartet. Ich habe das Clock Signal an INT0 und die Datenleitung an einem weiteren Portpin. Ich kann das Signal auch dekodieren. Einige Scancodes funktionieren (z.B. 0x29 für Space, 0x1c für A, etc.). Aber manche Sachen verhalten sich anders, als ich es gelesen habe. Z.B. die Pfeiltasten oder die Home/Ende Tasten, etc. senden alle den Code 0xE0, aber danach kein weiteres Byte, was nachdem was ich gelesen habe aber bei Tasten mit "extended code" so sein müsste. Ausserdem wird beim loslassen einer Taste lediglich 0xF0 gesendet, aber nicht nocheinmal der Code der Taste die losgelassen wurde. Ich habe das ganze mit zwei verschiedenen Tastaturen ausprobiert, daher denke ich, dass es an meiner Software liegen könnte. Ausserdem habe ich gelesen, dass es verschiedene "Betriebsmodi" für solche älteren Tastaturen gibt. Bin ich eventuell im falschen? Wie änder ich den? Danke schonmal! Gruss Florian
Sehr alte Tastaturen haben u.U. einen anderen Scan-Code Satz. Die mit Mini-Din-Stecker (PS2) starten alle in dem Code-Satz, den Du beschrieben hast und es sollte keine Probleme geben, selbst wenn die Tastatur nicht initialisiert ist. In dem Fall liegt´s dann wirklich an Deinem Programm.
Hmm. Aber irgendwas stimmt doch hier nicht. Die Pfeil Hoch und Pfeil Runter Taster erzeugen exakt die gleichen gesendeten Bytes. Wie soll der PC denn da unterscheiden welche Taster gedrückt wurde?
...wie decodierst du das PS2 Signal denn? Geht das evtl über Hyperterminal o.ä.? Klaus.
Ich habe die Clock an einem Interrupt Pin. Ich lese die 11 Bits (Start, 8 mal Payload, Parity, Stop) bei jedem Interrupt ein und schreib den Payload in eine Variable. Den Payload dekodieren mache ich garnicht, ich schicke einfach die empfangenen Bytes per UART an den PC um sie anzuzeigen. Und wenn ich Pfeil hoch oder Pfeil runter drücke auf der Tastatur, kommt das gleiche am PC an, etc.. Werd es nachher mal mit einer PS2 Tastatur testen. Im moment habe ich hier zwei alte Tastaturen mit dem größeren Stecker..
Da ist auf jeden Fall ein Fehler in Deinem Code; bestimmte Tasten erzeugen beim Drücken einen Scancode, der aus mehr als einem Byte besteht, die Pfeil-nach-oben-Taste z.B. 0xE0 0x48. Scancodes die mehr als 1 Byte haben fangen immer mit 0xE0 an. Scancodes der jeweiligen Taste findest Du z.B. hier: http://www.marjorie.de/ps2/scancode-set1.htm Gruß Stefan
Hallo zusammen, habe es jetzt nochmal probiert. Sieht schon etwas besser aus (z.B. wird bei den Pfeiltasten jetzt der korrekte Scancode gesendet). Aber irgendwas funktioniert hier immernoch nicht so wie es soll, habe ich das Gefühl. Könnte jemand bitte mal meinen Code ansehen? (Anhang) Danke! Gruss Flo
Ich habe das Gefühl, dass ich jedes zweite Byte verliere. Z.B. sollte die "Pause" Taste ja den Scancode "E1 14 77 E1 F0 14 F0 77" generieren. Bei mir kommt aber nur "E1 77 F0 F0" an. An der Tastatur liegt es definitiv nicht. Habe schon 4 verschiedene Tastaturen getestet. Wäre schön, wenn jemand eine Idee hat, woran das liegen könnte! Danke!
Okay, habe das Problem gelöst. Blockierende Aufrufe für langsame UART Routinen sollte man nicht in zeitkritischen ISRs aufrufen :-)
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.