Tastaturemulator

 
Vor einiger Zeit kam ein Freund zu mir und bat mich, eine Platine für ihn herzustellen. Er baute gerade an einer Musikbox basierend auf einen Windows XP Rechner mit Touchscreen. Als Musiksoftware hatte er sich für die Software Silverjuke entschieden. Was jetzt noch fehlte war eine Minitastatur, da er optional für die Steuerung von Silverjuke ca. 10 Tasten benötigt.

Ursprünglich haben wir dafür eine gekaufte PC-Tastatur ausgeschlachtet und die Controllerplatine mit meiner selbstgebauten Platine verbunden.
Dadurch hatte er nun die Möglichkeit über Lötpunkte die gewünschten Tasten selber auszuwählen.

Dies erschien mir aber sehr aufwendig, zumal eine neue Tastatur immerhin 15 Euro kostete. Ich suchte nach einer besseren Lösung.

Zu der Zeit hatte ich gerade begonnen mit Bascom zu arbeiten. Ich fand heraus, dass es sogar für meine neue Idee eine eigene Library gab, die man optional zur Software kaufen konnte. Ich zögerte nicht lange, kaufte mir Bascom als Vollversion und bestellte gleich diese Library mit.

Die neue Platine besteht nun aus einem ATMEGA 8 mit Sockel, einem Widerstand, einem Kondensator sowie einer PS/2 Printbuchse.

Die Versorgungsspannung erhält die Platine über das PS/2 Kabel vom PC.
Je nach Änderung des Bascom-Codes / Tastaturbefehls lassen mit dieser Minitastatur viele Programme unter Windows steuern.

 

   

 

Klick für Originalgrösse 
(Klicken um Originalbild zu sehen)

 
Einfachhalber habe ich Lötösen genommen um die Verbindungen zu den Tastern herzustellen. Da sich die Taster alle in einem gemeinsamen Feld befinden ist es einfacher, die eine Seite der Taster miteinander zu verbinden und über eine gemeinsame Leitung auf der Platine mit GND zu verlöten (hier schwarzes Kabelende).

Die andere Seite der Taster werden nun jeweils mit einer Lötöse verbunden.
 
 
Und nun noch der Beispielcode. Hier wurde der Code für die Pfeiltasten, das Pluszeichen sowie für die Zahlen von 1 bis 5 geschreiben (Leider kann man ohne die Library "at_emulator.lib" nicht viel damit anfangen. Um den Code zu ändern, zu erweitern und dann zu compilieren muss man diese Library dazukaufen):


'************************************
'* Tastaturemulator / Silverjuke *
'* mit ATMEGA 8 *
'* 26-10-2009 *
'************************************

$regfile = "m8def.dat"
$crystal = 8000000

$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame

$lib "at_emulator.lib"

Config Portb = Input ' PB.0 bis PB.5 als Eingang definiert / Tasteranschlüsse
Portb = 255 ' und auf High gesetzt
Config Portc = Input ' PC.0 bis PC.4 als Eingang definiert / Tasteranschlüsse
Portc = 255 ' und auf High gesetzt

Enable Interrupts ' you need to turn on interrupts yourself since an INT is used
Config Atemu = Int1 , Data = Pind.3 , Clock = Pind.7

' ^------------------------ used interrupt

' ^----------- pin connected to DATA

' ^-- pin connected to clock

'Note that the DATA must be connected to the used interrupt pin

Do

Waitms 150

If Pinb.0 = 0 Then
Sendscankbd Pfeil_hoch
Else

If Pinb.1 = 0 Then
Sendscankbd Pfeil_links
Else

If Pinb.2 = 0 Then
Sendscankbd Pfeil_runter
Else

If Pinb.3 = 0 Then
Sendscankbd Pfeil_rechts
Else

If Pinb.4 = 0 Then
Sendscankbd Taste_plus
Else

If Pinb.5 = 0 Then
Sendscankbd Taste_1
Else

If Pinc.0 = 0 Then
Sendscankbd Taste_2
Else

If Pinc.1 = 0 Then
Sendscankbd Taste_3
Else

If Pinc.2 = 0 Then
Sendscankbd Taste_4
Else

If Pinc.3 = 0 Then
Sendscankbd Taste_5
Else

End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

Loop

' *** Scancodes ***

'------------------------------------------ 'Steuerungstasten

Pfeil_hoch:
Data 5 , &HE0 , &H75 , &HE0 , &HF0 , &H75

Pfeil_runter:
Data 5 , &HE0 , &H72 , &HE0 , &HF0 , &H72

Pfeil_rechts:
Data 5 , &HE0 , &H74 , &HE0 , &HF0 , &H74

Pfeil_links:
Data 5 , &HE0 , &H6B , &HE0 , &HF0 , &H6B

'------------------------------------------ 'Zahlen

Taste_1:
Data 3 , &H16 , &HF0 , &H16

Taste_2:
Data 3 , &H1E , &HF0 , &H1E

Taste_3:
Data 3 , &H26 , &HF0 , &H26

Taste_4:
Data 3 , &H25 , &HF0 , &H25

Taste_5:
Data 3 , &H2E , &HF0 , &H2E

Taste_plus:
Data 3 , &H79 , &HF0 , &H79