Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit PC-AT-Tastatur
Hallo Leute,
mein Vorhaben besteht darin, eine konventionelle PC-Tastatur mit PS2-Anschluss an RN-Control 1.4 anzuschließen. Geschafft hatte ich das Ganze vor einiger Zeit schonmal, allerdings funktioniert nun irgendetwas nicht. Eigentlich passiert beim Betätigen einer Taste rein garnichts. Das Programm habe ich seit damals nicht verändert, schaut es euch mal an:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Keyboard = Pind.4 , Data = Pind.2 , Keydata = Keydata
Config Portc = Output
Config Portd.7 = Output
Dim Key As Byte
Dim I As Byte
For I = 0 To 7
Portc.i = 1
Next
Portc.0 = 0
Do
Key = 0
Key = Getatkbd();
If Key = Asc( "a") Then
Portc.1 = 0
Sound Portd.7 , 400 , 300
Waitms 10
Portc.1 = 1
End If
Loop
End
Keydata:
'normal keys lower case
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
'shifted keys UPPER case
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
Habe die Tastatur an eine externe 5V-Versorgung angeschlossen (ich ging davon aus, dass Rot und Schwarz die Versorgungsleitungen darstellen^^). Gelb und Weiß sind demnach Clock und Data, hab die beiden auch schon vertauscht, was ebenfalls keine Verbesserung mit sich bringt. Schalte ich den Saft ein, leuchten die drei LEDs der Tast. kurz auf. Danach passiert nichts mehr. Ich habe es auch schon mit einer anderen Tastatur (USB inkl. PS2-Adapter) versucht, das gleiche Spiel.
Könnt ihr mir helfen? Weiß nicht weiter.
Gruß, tiller
Die Tastatur, die ich eigentlich verwenden wollt (die mit USB und PS2-Adapter) habe ich mit Hilfe folgendes Schemas angeschlossen, ich gehe ma davon aus, dass die Belegung der Buchse dort richtig beschrieben ist.
http://de.wikipedia.org/wiki/PS/2-Schnittstelle
Sollte doch eigentlich funktionieren mit dem Adapter, oder? Muss ich da zusätzlich was beachten bei USB?
Duke of Doom
18.07.2008, 17:56
Eigentlich sollte die Belegung auf Wikipedia stimmen. Ich habe meine PS/2 implementireung auch mit dieser Belegung realisiert. Versuch es einfach einmal ohne Adapter mit einer "echten" PS/2 Tastatur.
Sendet die Tastatur eigentlich gar nicht oder kommen nur fehlerhafte daten an
Bei der ersten Tastatur handelt es sich um eine "echte" PS2-Version, die Alternative (die ich eigentlich verwenden wollte) hat einen USB-Stecker. Angeschlossen ist die erste. Keine Ahnung, ob sie irgendwelche Daten sendet. Ich glaube nicht, denn auch wenn der Quelltext
...
If Key <> 0 Then
...
lautet, passiert absolut nichts.
Hast du deine Tastatur ebenfalls so angeschlossen wie ich? Sprich an PortD.2 und PortD.4? Ist es egal, welcher Pin als Data und welcher als Clock verwendet wird?
Wahrscheinlich habe ich einen Fehler bei der Verkabelung gemacht. Wie kann ich herausfinden, welche Ader was ist? Sprich Vcc, Ground, Data, Clock
becki133
18.07.2008, 20:03
Hallo,
Schraub die Tastaur auf und schau auf die Platine .
Ich hatte glück das es bei mir draufstand .
Gruß Holger
Duke of Doom
18.07.2008, 22:04
Ich hab keinen Atmel verwendet sondern einen PIC. Vom Funktionsprinzip sieht das folgen aus:
Die Taktleitung liegt auf einen Pin der den externen Interrupt auslösen kann.
Wenn die Tastatur Daten senden will geht die Tktleitung auf High und die ISR wird aufgerufen. Dann empfange ich über die Datenleitung, die eigentlich auf einem belibigen anderen Pin liegen kann, jeweils ein Byte und verarbeite dieses.
auf der platine steht nichts drauf, aber ich bin mir mittlerweile recht sicher, die adern richtig zu deuten. auf der datenleitung liegen 4,89V an, auf clock 5,2V. beide brechen beim betätigen der tastatur etwas ein.
vllt ist das keyboard einfach defekt, es handelt sich um ein wirklich uraltes cherry-gerät. werd mir wohl mal ne andere ps2-tast. zum testen besorgen. oder weiß vllt jemand noch einen rat?
auch die neue tastatur bringt keine verbesserung. da muss ja irgendwas faul sein mit der verkabelung. würde aber bedeuten, dass im wiki was falsches steht.
kann es nicht sein, dass ich bei der software was falsch mache oder am board irgendwas umgestellt werden muss? kann es vielleicht sein, dass portd.2 und 4 bereits verwendet werden? prinzipiell könnte ich das ganze doch mit 2 beliebigen digitalen I/Os versuchen, oder? irgendwo liegt der fehler, nur wo...?
guenter1604
20.07.2008, 19:46
Hallo Tiller,
als erstes würde ich mir mal nach getatkbd() erstmal anzeigen lassen was da abgeholt wurde. Entweder per Display oder serieller Schnittstelle. Vernünftige Ergebnisse erzielst du nur, wenn du einen Interrupt auslöst. Damit stellst du sicher, daß auch nur bei Tastendruck tatsächlich was geschieht.
Wenn du möchtest, kannst du unter http://www.gerold-online.de/cms/index.php?id=136 dir das nötige rausziehen.
MfG Günter
guenter1604
20.07.2008, 19:54
Hallo Tiller,
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
On Int0 Isr0
Enable Int0
Config Int0 = Falling
Enable Interrupts
Do
'tu was geniales...
Loop
'---------------------------------------------------------------------------
' Isr0
' Interruptroutine für die Tastatur
' der externe Interrupt 0 überwacht die Dataleitung der Tastatur
'---------------------------------------------------------------------------
Isr0: 'interrupt routine
Taste = Getatkbd()
Select Case Taste
Case 13:
'Entertaste
Case Else:
If Taste <> 0 Then
'tu was geniales...
End If
End Select
Set Gifr.intf0
Taste = 0
Return
Hallo Günter,
vielen Dank für deine Hilfe. Dank dir konnte ich das Ganze jetzt zum Laufen bringen. Allerdings bedurfte es zusätzlich einer mir absolut unerklärlichen Änderung der Verkabelung. Laut deinem Quelltext liegt Clock ja an Portd.2, Data an Portd.6, in dieser Konstellation tut sich allerdings wie auch zuvor absolut nichts. Lasse ich den Quelltext unverändert, schließe aber Clock an Portd.1 an, arbeitet alles tadellos. Ändere ich die Sotware auf Portd.1, streikt die Tastatur erneut. Kannst du dir das erklären?
Gruß, tiller
Tadellos stimmt leider nicht ganz, manchmal funktioniert's, manchmal nicht. Ich kann die LED (siehe Quelltext) maximal einmal an und wieder ausschalten, danach tut sich nichts mehr.
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Dim I As Byte
Dim Key As Byte
Config Portc = Output
Config Portd = Input
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
For I = 0 To 7
Portc.i = 1
Next
Portc.0 = 0
On Int0 Isr0
Enable Int0
Config Int0 = Falling
Enable Interrupts
Do
'tu was geniales...
Loop
'---------------------------------------------------------------------------
' Isr0
' Interruptroutine für die Tastatur
' der externe Interrupt 0 überwacht die Dataleitung der Tastatur
'---------------------------------------------------------------------------
Isr0: 'interrupt routine
Key = Getatkbd()
Select Case Key
Case Asc( "a")
Portc.1 = 0
Case Asc( "s")
Portc.1 = 1
End Select
Set Gifr.intf0
Key = 0
Return
Keydata:
'normal keys lower case
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
'shifted keys UPPER case
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
Bluesmash
21.07.2008, 14:31
du sprichts von einer externen 5V speisung...
kann es sein dass du die beiden gnd's nicht miteinander verbunden hast?
gruss bluesmash
Nachtrag:
Die PS/2-Tastatur scheint eine Macke zu haben, mit der bereits erwähnten USB-Modell und einem Adapter funktioniert's wesentlich besser, fast perfekt um genau zu sein. Manchmal geht's einfach nicht weiter. Keine Reaktion mehr auf Tastendruck. Ein Reset des Boards schafft Abhilfe.
@Bluesmash:
Wie meinst du das genau? Welche beiden GNDs?
Bluesmash
21.07.2008, 14:43
du hast im ersten post geschrieben das du die Tastatur an einer externen 5V Quelle angeschlossen hast. Diese Quelle hat ja ein GND und die Quelle welche den uC versorgt hat ein GND diese beiden musst du verbinden damit beide geräte das gleiche bezugspotenzial haben.
gruss bluesmash
guenter1604
21.07.2008, 14:57
Hallo tiller,
kannst du mal ein Foto deines Versuchsaufbaus posten?
danke.
Klar kann ich ein Bild posten.
http://home.arcor.de/highlaenden/rn.JPG
Angeschlossen ist das ISP-Kabel, das Micro-Servoboard (Spannung und RS232). An PortD ist das grüne Kabel (1) Clock, das einzelne Weiße (6) Data und das Weiße neben dem Grünen unbelegt.
Achso, wegen der Spannungsversorgung. Mit extern meinte ich, dass ich die Spannung nicht am Board abzapfe. Das Netzteil ist allerdings das gleiche, es handelt sich um ein ATX-NT aus dem PC-Bereich.
guenter1604
22.07.2008, 22:50
Hallo tiller,
lange ungeschirmte Leitungen zum Tastaturstecker, Masse nimmt einen anderen Weg. Das könnten Fehlerquellen sein. Schau doch das Signal mal mit dem Oszi an.
Achja, die internen Pullup-Wiederstände fallen mir auch noch ein.
Günter
Hallo Günter,
Ich habe leider keine Möglichkeit, von solch einem Gerät Gebrauch zu machen. Das Bild oben habe ich aktualisiert, die Kabel zur PS/2-Buchse sind etwa 10cm lang, meinst du, es liegt an Ihnen? Mittlerweile geht übrigens wieder garnichts mehr. Hatte zwischendurch wieder etwas mit dem Servoboard experimentiert und die Lüsterklemmen durch Lötverbindungen ersetzt. Erklären kann ich mir den Totalausfall wiederum nicht. Wie meinst du das mit den Pullup-Widerständen? Was ist mit denen?
Werd mir wohl am besten selbst 'ne Tastatur basteln, dann kann ich die Tasten auch gleich so anordnen, wie sie für mich am besten liegen. Kannst du mir 'ne Seite nennen, wo ich mich darüber informieren kann? Im RN konnte ich leider nichts finden, vielleicht hab ich's aber auch einfach übersehen. Lohnt sich deiner Meinung die Anschaffung des Buches über Bascom-Programmierung von Claus Kühnel? Hatte nur mal kurz reingeschaut und dort auch etwas über Tastaturen gefunden.
Gruß, tiller
guenter1604
23.07.2008, 16:48
Hallo Tiller,
leg mal die Masseleitung von der PS2 Tastatur nicht ans Netzteil sondern möglichst nah an die Massepins des Prozessors
Günter
Hab ich an mereren Stellen getestet, es tut sich nichts. Lötverbindungen der Data/Clock-Leitungen habe ich ebenfalls überprüft, alles in Ordnung.
Mir wird das jetzt zu blöd, ich bau mir selbst ne Tastatur, Pins habe ich genügend frei, die Lösung mit der PC-Tastatur habe ich auch eigentlich nur bevorzugt, da sie angeblich so einfach ein sollte, bei mir soll's halt nicht sein. Ich benötige 10 Taster, mit 'ner Matrix-Tastatur belege ich da 7 Pins, nicht wahr?
Wie funktioniert das genau? Ich schalte die Pins auf high und ziehe sie beim Betätigen eines Tasters auf Masse, oder? Und wie frage ich das Ganze dann in Bascom ab?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.