PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SENDSCANKBD einfach ???



Papsi
05.03.2008, 19:51
kann mir mal einer helfen, SENDSCANKBD einfach anzuwenden.
Irgendwie verstehe ich die Bascom Hilfe nicht ](*,)

Ich möchte einfach nur ein paar Tasten von einem µC an den PC senden.

Das soll so ablaufen:
*Pseudocode an*
WENN Taster1 gedrückt DANN sende Taste A an den PC über PS2
*Pseudocode aus*

Rofo88
05.03.2008, 20:01
Unter der Hilfe findet man diesen schönen Satz.

The PS2 Keyboard and mouse emulator needs an additional commercial addon library.

Also ist das nicht so einfach ohne finanziellen Aufwand.

linux_80
05.03.2008, 20:03
Hi,
Im Beispiel-Programm enthalten:


'suited for demo : no, ADD ON NEEDED

näheres hier:
http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=35&category_id=6&option=com_phpshop&Itemid=1

Hast Du diese Lib, um die angegebenen Befehle verwenden zu können ?

Papsi
05.03.2008, 20:21
Habe ich irgendwo geschrieben, das es nichts kosten darf... ;)

Das ist mir schon bekannt, und auch nicht das Problem.
Habe mir Bascom ja auch gekauft...

Rofo88
05.03.2008, 20:48
Die Vollversion von Bascom nützt Dir nichts da brauchst Du noch die Extra-Lib die 15€ kostet (Sonderausstattung?!)

Papsi
05.03.2008, 20:52
Hallo,

mir geht es nicht um Vollversionen oder irgendwelche Extrakosten

Ich habe die Vollversion und die Lib werde ich mir nachkaufen, wenn ich weis, wie es geht mit dem Code.

Man gibt soviel Geld für Hobby und "Mist" aus, da tun mir die 15 Euro nicht weh...

Nun verstanden ;)

Gruß
Papsi

stefan_Z
05.03.2008, 23:42
Ich nehme mal an, dass man verschiedene Variablen verändert und die dann als PS/2 Befehle gesendet werden. Also Make- und Break-Codes und noch irgendwas...

elektronix00
25.03.2009, 10:40
Hi,

dieser Artikel ist zwar schon etwas älter aber vielleicht wurde in der Zwischenzeit eine Lösung gefunden. Ich selber habe mir diese Zusatz-Library ebenfalls gekauft, weiss aber nicht wie ich sie anwenden soll.
Ich möchte einfach nur 5 Tasten vom Atmega an den PC schicken: Pfeil rechts, Pfeil links, Pfeil hoch, Pfeil runter und Enter.

Vielleicht gibts ja schon ein paar Codeschnipsel.

Gruß Michael

Fusebitversteller
01.04.2009, 12:16
@elektronix00:

Wenn Du Dir die Bascom-Hilfe anschaust, findest Du einen gut dokumentierten Beispielcode:


'-----------------------------------------------------------------------------------------

'name : ps2_kbdemul.bas

'copyright : (c) 1995-2005, MCS Electronics

'purpose : PS2 AT Keyboard emulator

'micro : 90S2313

'suited for demo : no, ADD ONE NEEDED

'commercial addon needed : yes

'-----------------------------------------------------------------------------------------



$regfile = "2313def.dat" ' specify the used micro

$crystal = 4000000 ' used crystal frequency

$baud = 19200 ' use baud rate

$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 space



$lib "mcsbyteint.lbx" ' use optional lib since we use only bytes



'configure PS2 AT pins

Enable Interrupts ' you need to turn on interrupts yourself since an INT is used

Config Atemu = Int1 , Data = Pind.3 , Clock = Pinb.0

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

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

' ^-- pin connected to clock

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





Waitms 500 ' optional delay



'rcall _AT_KBD_INIT

Print "Press t for test, and set focus to the editor window"

Dim Key2 As Byte , Key As Byte

Do

Key2 = Waitkey() ' get key from terminal

Select Case Key2

Case "t" :

Waitms 1500

Sendscankbd Mark ' send a scan code

Case Else

End Select

Loop

Print Hex(key)



Mark: ' send mark

Data 12 , &H3A , &HF0 , &H3A , &H1C , &HF0 , &H1C , &H2D , &HF0 , &H2D , &H42 , &HF0 , &H42

' ^ send 12 bytes

' m a r k

Interessant für Dich wäre die Data-Sektion.
Die "12" gibt die Anzahl der Bytes an.
Die Anweisungen eine Taste zu drücken (make) und wieder loszulassen (break) werden in Hexadezimal angegeben. Deshalb steht vor jeder Anweisung ein "&H".
Um ein "m" auszugeben, muss es erst einmal "gedrückt" werden. Das macht man mit "3A".
Losgelassen wird das "m" dann mit "F0,3A".

Um die Hex-Angaben für die entsprechenden Tasten zu bekommen, kannst Du mal einen Blick auf einen Keyboard-Scancode werfen: http://www.marjorie.de/ps2/scancode-set2.htm

Wenn Du z.B. nur den Pfeil nach Links drücken möchtest, würde die Data-Sektion so aussehen:


Data 5 , &HE0 , &6B , &E0 , &HF0 , &H6B

Hier im Forum hat sich übrigens Rofo88 mal die Arbeit gemacht, einen Keyboard-Emulator direkt in Bascom zu schreiben (habe ich selber aber nicht getestet): https://www.roboternetz.de/phpBB2/viewtopic.php?t=38660

elektronix00
02.04.2009, 07:25
@ fusebitversteller,

danke für die schnelle und vor allem gut dokumentierte Antwort. Langsam blicke ich durch wie sich der Code aufbauen muss. Ich war nur irritiert, dass als Library die "mcsbyteint.lbx" eingesetzt wird und nicht die optionale Library, die ich extra kaufen musste. Ich werde sobald ich Zeit finde meinen Code schreiben und hier posten.

Gruß Michael

elektronix00
02.04.2009, 08:43
Hi,

ich habe nun mal den Schaltplan entworfen, so wie ich mir den Aufbau der Schaltung vorstelle. Die 5 Volt Spannungsversorgung kommt vom PC und wird über ein PS/2 Verbindungskabel mit der Platine hergestellt. Auf der Platine soll sich ebenfalls wie am PC eine PS/2 Buchse befinden.
Über die 5 verschiedenen Taster soll jeweils der entsprechende Code an den PC gesendet werden. Da ich den ATMEGA 8 auf meiner Entwicklungsumgebung programmiere, habe ich bewußt eine Programmierschnittstelle weggelassen.

Den Schaltplan habe ich angehängt.
Am Code will ich noch etwas arbeiten.

Gruß Michael

elektronix00
02.04.2009, 09:17
@ Fusebitversteller,

ich hatte heute morgen doch mal wieder keine Ruhe und habe am Code weitergearbeitet. Mit Sicherheit sind noch Fehler drin aber der Code lässt sich mit Bascom compilieren. Das ist ja schon mal was. Jetzt muss ich mir nur noch eine PS/2 Buchse besorgen, dann kann ich den Versuchsaufbau starten.

Hier schon mal mein Code. Sei doch bitte so nett und wirf einen Blick drüber. Wenn später alles korrekt läuft, werde ich alles als Komplettprojekt posten.

Gruß Michael


' Tastaturemulator
' mit ATMEGA 8
'02-04-2009


$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

$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


Config Portb = Output ' PortB als Ausgang definiert und auf High gesetzt
Portb = 255
Config Portc = Input ' PC.0 bis PC.4 / Tasteranschlüsse
Portc = 255
Config Pind.3 = Output ' Data
Config Pind.7 = Output ' Clock


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 200


If Pinc.0 = 0 Then
Sendscankbd Pfeil_hoch
Else

If Pinc.1 = 0 Then
Sendscankbd Pfeil_runter
Else

If Pinc.2 = 0 Then
Sendscankbd Pfeil_rechts
Else

If Pinc.3 = 0 Then
Sendscankbd Pfeil_links
Else

If Pinc.4 = 0 Then
Sendscankbd Enter
Else

End If
End If
End If
End If
End If

Loop

Return

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

Enter:
Data 3 , &H5A , &HF0 , &H5A

stefan_Z
02.04.2009, 13:52
PS/2 Buchsen sind fast teurer als ein altes PS/2 Keyboard...
Ich habe meiner Tastatur einfach ein 2. Anschlußkabel spendiert - mit Pinheader am Ende :-)

Fusebitversteller
02.04.2009, 14:24
@elektronix00: Der Code sieht soweit ganz gut aus (testen kann ich es momentan nicht, da mir die Zeit dazu fehlt).
Ein kleiner Schönheitsfehler: Zwischen Deiner Loop-Schleife und der ersten Data-Sektion (Pfeil_hoch) steht ein "Return". Das kann eigentlich weg, da es sich da bestimmt ziemlich einsam fühlt :cheesy:
Dein Schaltplan schaut auch ok aus.

@stefan_Z: Also bei Reichelt kostet eine Printbuchse (EB-DIO M06) 0,36€ - dafür bekomme ich keine PS/2-Tastatur O:)

stefan_Z
02.04.2009, 14:42
@stefan_Z: Also bei Reichelt kostet eine Printbuchse (EB-DIO M06) 0,36€ - dafür bekomme ich keine PS/2-Tastatur O:)

OK, hatte das so verstanden, dass du NUR die Buchse brauchst... dann wäre der Versand schon teurer als das Teil!

elektronix00
03.04.2009, 06:15
Hi @ all,

zuerst mal vielen Dank für die Mühe und die Kontrolle meiner Schaltung / Code.
Ja, genau diese Buchse habe ich bei Reichelt bestellt, ich mag einfach einen sauberen Aufbau. Da ich nebenbei eine kleine Firma betreibe und somit recht viele Bauteile und Platinenmaterial benötige, bestelle ich regelmäßig bei Reichelt. Conrad liegt zwar Luftlinie nur ca. 1 km von mir entfernt, aber dort zahlt man ja immer noch die Rezeptgebühr mit (weil Aphotekerpreise) 8-[

Wenn ich den Testaufbau fertig habe, werde ich berichten.

Gruß und schönes Wochenende

Michael aus Saarbrooklyn

elektronix00
22.04.2009, 07:11
Hi @ all,

ich konnte die Tage meinen Tastaturemulator erfolgreich testen. Wie man im Code sieht ist das eigentliche Programm recht klein, nur die Datensätze für die Scancodes im unteren Teil füllen den Code aus. Ich habe mir die Arbeit gemacht und die gebräuchlichsten Scancodes eingegeben. Nach Bedarf kann man die Datensätze erweitern. So kann man schnell mal im Programm Tasten ändern oder hinzufügen. Den Quartz konnte ich sogar weglassen und den ATMEGA intern mit 8 MHz takten. Für alle hier noch den Code.

Gruß Michael




' Tastaturemulator
' mit ATMEGA 8
'11-04-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 = Output ' PortB als Ausgang definiert und auf High gesetzt
Portb = 255
Config Portc = Input ' PC.0 bis PC.4 / Tasteranschlüsse
Portc = 255

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 Pinc.0 = 0 Then
'Sendscankbd Pfeil_hoch
Sendscankbd Taste_a
Else

If Pinc.1 = 0 Then
'Sendscankbd Pfeil_runter
Sendscankbd Taste_b
Else

If Pinc.2 = 0 Then
'Sendscankbd Pfeil_rechts
Sendscankbd Taste_c
Else

If Pinc.3 = 0 Then
'Sendscankbd Pfeil_links
Sendscankbd Taste_d
Else

If Pinc.4 = 0 Then
Sendscankbd Enter
Else

End If
End If
End If
End If
End If

Loop

'einige Tastatur - Scancodes / wird noch ergänzt
'------------------------------------------------

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

Enter:
Data 3 , &H5A , &HF0 , &H5A

Taste_esc:
Data 3 , &H76 , &HF0 , &H76

Taste_space:
Data 3 , &H29 , &HF0 , &H29

'------------------------------------------------

Taste_f1:
Data 3 , &H05 , &HF0 , &H05

Taste_f2:
Data 3 , &H06 , &HF0 , &H06

Taste_f3:
Data 3 , &H04 , &HF0 , &H04

Taste_f4:
Data 3 , &H0C , &HF0 , &H0C

Taste_f5:
Data 3 , &H03 , &HF0 , &H03

Taste_f6:
Data 3 , &H0B , &HF0 , &H0B

Taste_f7:
Data 3 , &H83 , &HF0 , &H83

Taste_f8:
Data 3 , &H0A , &HF0 , &H0A

Taste_f9:
Data 3 , &H01 , &HF0 , &H01

Taste_f10:
Data 3 , &H09 , &HF0 , &H09

Taste_f11:
Data 3 , &H78 , &HF0 , &H78

Taste_f12:
Data 3 , &H07 , &HF0 , &H07

'------------------------------------------

Taste_a:
Data 3 , &H1C , &HF0 , &H1C

Taste_b:
Data 3 , &H32 , &HF0 , &H32

Taste_c:
Data 3 , &H21 , &HF0 , &H21

Taste_d:
Data 3 , &H23 , &HF0 , &H23

Taste_e:
Data 3 , &H24 , &HF0 , &H24

Taste_f:
Data 3 , &H2B , &HF0 , &H2B

Taste_g:
Data 3 , &H34 , &HF0 , &H34

Taste_h:
Data 3 , &H33 , &HF0 , &H33

Taste_i:
Data 3 , &H43 , &HF0 , &H43

Taste_j:
Data 3 , &H3B , &HF0 , &H3B

Taste_k:
Data 3 , &H42 , &HF0 , &H42

Taste_l:
Data 3 , &H4B , &HF0 , &H4B

Taste_m:
Data 3 , &H3A , &HF0 , &H3A

Taste_n:
Data 3 , &H31 , &HF0 , &H31

Taste_o:
Data 3 , &H44 , &HF0 , &H44

Taste_p:
Data 3 , &H4D , &HF0 , &H4D

Taste_q:
Data 3 , &H15 , &HF0 , &H15

Taste_r:
Data 3 , &H2D , &HF0 , &H2D

Taste_s:
Data 3 , &H1B , &HF0 , &H1B

Taste_t:
Data 3 , &H2C , &HF0 , &H2C

Taste_u:
Data 3 , &H3C , &HF0 , &H3C

Taste_v:
Data 3 , &H2A , &HF0 , &H2A

Taste_w:
Data 3 , &H1D , &HF0 , &H1D

Taste_x:
Data 3 , &H22 , &HF0 , &H22

Taste_y:
Data 3 , &H35 , &HF0 , &H35

Taste_z:
Data 3 , &H1A , &HF0 , &H1A

Taste_0:
Data 3 , &H45 , &HF0 , &H45

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_6:
Data 3 , &H36 , &HF0 , &H36

Taste_7:
Data 3 , &H3D , &HF0 , &H3D

Taste_8:
Data 3 , &H3E , &HF0 , &H3E

Taste_9:
Data 3 , &H46 , &HF0 , &H46

da_miez3
05.02.2013, 18:01
hm weiß jetzt nicht ob es sich lohnt die 15eu zu investieren, in der hobbykasse ist ebbe :( .
meine frage wäre ob und wie ich tastenkombinationen senden kann. also meinetwegen alt+f4 oder strg+v aber nur einen taster auf meinem board drücken muss.

danke schonmal :)

grüße da_miez