PS/2 Tastatur an ATMEGA 8
Hallo zusammen,
ich bin am verzweifeln.
Ich habe im Buch von Claus Kühnel (AVR mit Bascom programmieren) das mit der PS/2 Tastatur versucht. Hat nicht funktioniert, es wurden keinerlei Daten über die Ser.Schnittstelle ausgegeben. Nur der Text wurde angezeigt. Ich habe mich dann durch Internet gesucht und die versch. Dinge versucht, aber ich hatte keinen Erfolg. Ich habe eine neue PS/2 Tastatur. Mit dem Oszi sehe ich auch den Takt und die Daten auf den Pins.
Kann mir bitte jemand ein funktionierendes .hex File mit Pin belegung zukommen lassen damit ich weis ob es an mir ligt oder an der Tastatur.
Habt ihr sonst irgendwelche Ideen an was es liegen kann.
Kann es auch an den Fuse Bits liegen?
Gruss
Stefan
Hier mal den letzten Code
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40
Config Keyboard = Pinc.1 , Data = Pinc.0 , Keydata = Keydata
Dim B As Byte
Print "Eingabetest von PC-AT-Tastatur"
'Portd.7 = 1
Do
B = Getatkbd() ' Abfrage der Tastatur
If B > 0 Then
Print Chr(b)
End If
Loop
End
Keydata:
' Shift-Taste nicht gedrückt
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
' Shift-Taste gedrückt
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
Liste der Anhänge anzeigen (Anzahl: 1)
Dem möchte ich mich auch mal anschließen. Ich verwende folgenden Code:
Code:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 19200
$hwstack = 40
$swstack = 16
$framesize = 32
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
'Dim some used variables
Dim B As Byte
On Int0 Readkey
Enable Int0
Config Int0 = Falling
Enable Interrupts
Do
Loop
Readkey:
B = Getatkbd()
If B > 0 Then Print B ; " " ; Chr(b)
Return
End
'This is the key translation table
Keydata:
'Kleinbuchstaben
Data 0 , 179 , 0 , 175 , 173 , 171 , 172 , 0 , 0 , 180 , 178 , 176 , 174 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 4 , 4 , 4 , 121 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 4 , 4 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 122 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 4 , 4 , 46 , 45 , 108 , 148 , 112 , 225 , 0
Data 0 , 0 , 132 , 228 , 129 , 92 , 4 , 4 , 4 , 4 , 13 , 4 , 4 , 35 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 177 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 190 , 0
'Grossbuchstaben
Data 0 , 189 , 0 , 185 , 183 , 181 , 182 , 0 , 0 , 0 , 188 , 186 , 184 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 89 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 90 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 153 , 80 , 63 , 0
Data 0 , 0 , 142 , 0 , 154 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 187 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 191 , 0
Als erstes macht mich stutzig, dass der Interrupt auch permanent ausgeführt wird, wenn keine Taste gedrückt wird. Clock und Data sind aber nicht vertauscht, ich habe es vorher durchgepiepst.
Dann kriege ich als Ergebnis im MyAvr QuickProg (externer Quarz ist aktiviert) die im Anhang gezeigten Tasten. Innerhalb des roten Kastens habe ich nur die Taste a (97) gedrückt. Innerhalb des blauen Kasten nur die Taste u (85). Beide erscheinen auch mehrfach, wobei u hier als U dargestellt wird.
Die Tastatur selbst funktioniert unter Windows einwandfrei. Hat da jemand ne Idee? Ärger mich da jetzt schon ein paar Tage mit rum. Der Chip selbst ist was Int0 betrifft auch in Ordnung, da ich inzwischen testweise nen Programm zum Ein- und Auschalten einer LED mit Interrupt erstellt hab.
Gruß
Demian