www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PC/AT Keyboard verhält sich nicht wie erwartet


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...wie decodierst du das PS2 Signal denn?

Geht das evtl über Hyperterminal o.ä.?

Klaus.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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..

Autor: S. Seegel (energizer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Flo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, habe das Problem gelöst. Blockierende Aufrufe für langsame UART 
Routinen sollte man nicht in zeitkritischen ISRs aufrufen :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.