-
-
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
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo Stefan,
für dieses Projekt:
http://www.gerold-online.de/cms/index.php?id=136
hab ich die Datenleitung auf den externen Interrupt 0 gelegt und dann Taste = Getatkbd() in diesem Interrupt erledigt. Ohne Interrupt hab ichs auch nicht hinbekommen
Gruß Günter
-
Hallo Günter,
Danke, oweh Interupt hört sich schon wieder kompliziert an.
Gruss
stefan
-
Erfahrener Benutzer
Robotik Einstein
Ich habs mal ganz ohne den Befehl gemacht.
Also Datenleitung auf irgend nen Pin, Clock auf nen Interrupt. Und dann einfach die Bits zu Fuss abfragen. Hat den Vorteil, dass eben das Programm selbst nicht blockiert und man auch "freier" ist, da dort auch Sondertasten erkannt werden können, die der Bascom-Befehl z.B. nicht kennt.
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo Stefan,
wichtig ist, daß die Leitung Data an Pin D6 kommt. An diesem Pin ist der Interrupt 0 herausgeführt. Sobald der ATMega an dem Pin eine fallende Flanke sieht, wird ISR0 ausgeführt:
Dim Taste As Word
On Int0 Isr0
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
Enable Int0
Config Int0 = Falling
Enable Interrupts
do
'dein genialer Code
if taste > 0 then print chr(Taste)
loop
Isr0: 'interrupt routine
Taste = Getatkbd()
return
Code ist ungeprüft, hoffentlich habe ich auf die Schnelle nix übersehen...
P.S. schau dir mal Keydata aus meinem Beispiel an, da sind auch äöü und ß richtiggestellt...
Günter
-
Hallo Günter,
irgendwo ist da der Wurm drin. Ich bekomme keine Daten von der Tastatur.
Gruss
Stefan
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo Stefan,
schreib mal ein:
print "test" in die Interruptroutine um festzustellen:
-wird der Interrupt überhaupt ausgelöst,
-werden überhaupt Daten zur ser. Schnittstelle gesandt.
Günter
-
Hallo Günter,
wenn ich den print "test" in die Int rotut. eintrage und eine Tase auf der Tastatur drücke kommen massen an Test an de ser Schnittstelle an aber sonst nichts.
Das geht schon mal.
Gruss
Stefan
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo Stefan,
das ist doch schonmal was!
Es kommen Pulse an, diese werden auch im Inetrrupt behandelt und ausgegeben.
Dann würde ich mal auf vertauschte Data und Clockleitung tippen, oder auf ne defekte Tastatur. Jedenfalls wird der Fehler außerhalb des ATMega liegen.
Günter
-
Erfahrener Benutzer
Robotik Einstein
Idee: Mal die Interrupts zählen und im Sekundentakt ausgeben lassen.
Ist die Zahl nach bei jedem Tastendruck gleich, hängt die Clock-Leitung dran. Variiert die, dann isses Data.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen