-
Hallo Tiller,
Code:
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.
Code:
$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
-
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?
-
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
-
Hallo tiller,
kannst du mal ein Foto deines Versuchsaufbaus posten?
danke.
-
Klar kann ich ein Bild posten.
Bild hier
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.
-
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