PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit PC-AT-Tastatur



tiller
18.07.2008, 16:54
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

tiller
18.07.2008, 16:56
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

tiller
18.07.2008, 19:03
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?

tiller
18.07.2008, 19:41
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.

tiller
19.07.2008, 16:17
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?

tiller
20.07.2008, 18:01
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

tiller
21.07.2008, 13:35
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

tiller
21.07.2008, 14:12
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

tiller
21.07.2008, 14:37
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.

tiller
22.07.2008, 13:31
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

tiller
23.07.2008, 15:16
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

tiller
24.07.2008, 13:25
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?