PS2 Maus Emulator

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PS2 Tastaturen und Mäuse sind zwar schon eine weile nicht mehr grossflächig in Benutzung, da das PS2 Protokoll aber im gegensatz zu USB "eher gemütlich" daherkommt ist es wesentlich einfacher zu handhaben als USB. Standardmässig kann Bascom nur die Tasten einer PS2 Tastatur einlesen.
    Hier geht es aber um den zusätzlich zu erwerbenden PS2/AT Mouse und Keyboard Emulator welcher es ermöglicht eine Maus und/oder ein Keyboard zu emulieren.
    So etwas wird z.b. für CNC Steuerungen eingesetzt die auch über Keyboard gesteuert werden können. So muss man nicht ein Komplettes Keyboard an der Anlage haben.
    Kein PS2 mehr am PC? Ein USB-PS2 wandler bzw IC schafft Abhilfe, somit meldet sich die Tastatur oder die Maus wieder als USB Gerät.


    [/b]
    Zuerst noch etwas grundsätzliches zum Keyboard: Jedes Keyboard sendet beim drücken (MAKE) einer Taste und beim loslassen einer Taste (Break)
    jeweils einen code. Diese heissen scan codes. Heisst die Taste Shift einmal kurz gedrückt sendet den code &H12, &HF0, &H12. Hier sieht man schön das man manche Codes zerlegen muss, nur Shift drücken nutzt ja wie in Zeile 28 nichts. Also zerlegen in MAKE: &H12, dann den Buchstaben t senden, dann das BREAK für shift.
    Der scancode muss an anfang die Menge der zu Übertragengen codes angeben, im fall von CTRL_ALT_entf sind es also 11
    Hier eine auflistung der Scancodes, bitte beachten das diese für ein Englisches Tastaturlayout sind, z.b. kommt dann bei eingestelltem Duetschen Layout statt einem z ein Y auf dem Computer raus. computer-engineering.org/ps2keyboard/scancodes2.html
    Hier einmal als Beispiel:

    Quellcode

    1. $regfile = "m328pdef.dat" 'Der ATMEGA328P wird genutzt
    2. $crystal = 8000000 'Es werden die internen 8MHz genutzt
    3. $hwstack = 150
    4. $swstack = 150
    5. $framesize = 150
    6. $lib "at_emulator.lib"
    7. Config Atemu = Int1 , Data = Pind.3 , Clock = Pind.7
    8. 'PS2 Tastatur sim config - Datapin MUSS ein INT pin sein, 2,2K pullups an Data und Clock leitung notwendig
    9. Enable Interrupts
    10. do
    11. wait 5
    12. 'schreibt nach 5 Sekunden= Test
    13. Sendscankbd Taste_shift_up 'Shift make code senden
    14. waitms 300
    15. Sendscankbd Taste_t 'T senden
    16. waitms 300
    17. Sendscankbd Taste_shift_down 'Shift BREAK code senden
    18. waitms 300
    19. Sendscankbd Taste_e
    20. waitms 300
    21. Sendscankbd Taste_s
    22. waitms 300
    23. Sendscankbd Taste_shift 'Hier wird weiter klein geschrieben da der BREAK direkt nach dem MAKE code gesendet wurde
    24. waitms 300
    25. Sendscankbd Taste_t
    26. waitms 300
    27. loop
    28. ' *** Scancodes ***
    29. Taste_e:
    30. Data 3 , &H24 , &HF0 , &H24
    31. Taste_s:
    32. Data 3 , &H1B , &HF0 , &H1B
    33. Taste_t:
    34. Data 3 , &H2C , &HF0 , &H2C
    35. Taste_shift:
    36. Data 3 , &H12, &HF0, &H12
    37. Taste_shift_up:
    38. Data 1 , &H12
    39. Taste_shift_down:
    40. Data 2 , &HF0, &H12
    41. Taste_ctrl_alt_entf:
    42. Data 11 , &H14 , &H11 , &HE0 , &H71 , &HE0 , &HF0 , &H71 , &HF0 , &H11 , &HF0 , &H14
    Alles anzeigen


    Aber es geht natürlich noch mehr, wir können auch die Maus mitbenutzen, angegeben wird die Verschiebung in Pixel:
    Die Funktioniert mit dem Befehl PSMOUSEXY oder einzelne Pixel mit scancodes:








    Quellcode

    1. $regfile = "m328pdef.dat" 'Der ATMEGA328P wird genutzt
    2. $crystal = 8000000 'Es werden die internen 8MHz genutzt
    3. $hwstack = 150
    4. $swstack = 150
    5. $framesize = 150
    6. Dim A as Byte
    7. Enable Interrupts
    8. $lib "at_emulator.lib"
    9. Config Atemu = Int1 , Data = Pind.3 , Clock = Pind.7
    10. 'PS2 Tastatur sim config - Datapin MUSS ein INT pin sein, 2,2K pullups an Data und Clock leitung notwendig
    11. CONFIG PS2EMU= int0 , DATA = PIND.2, CLOCK=pind.6
    12. 'PS2 Maus sim config - Datapin MUSS ein INT pin sein, 2,2K pullups an Data und Clock leitung notwendig
    13. do
    14. wait 5
    15. 'schreibt nach 5 Sekunden= Test
    16. Sendscankbd Taste_shift_up 'Shift make code senden
    17. waitms 300
    18. Sendscankbd Taste_t 'T senden
    19. waitms 300
    20. Sendscankbd Taste_shift_down 'Shift BREAK code senden
    21. waitms 300
    22. Sendscankbd Taste_e
    23. waitms 300
    24. Sendscankbd Taste_s
    25. waitms 300
    26. Sendscankbd Taste_shift 'Hier wird weiter klein geschrieben da der BREAK direkt nach dem MAKE code gesendet wurde
    27. waitms 300
    28. Sendscankbd Taste_t
    29. waitms 300
    30. wait 5
    31. PS2MOUSEXY 30 , 0, 0 '30 pixel nach rechts
    32. waitms 500
    33. for A = 1 to 30 'jetzt mal als Scancode, 30x ein pixel nach oben
    34. Sendscan Mouseup
    35. Waitms 10
    36. next A
    37. waitms 500
    38. PS2MOUSEXY -30 , 0, 0 '30 pixel nach links
    39. waitms 500
    40. PS2MOUSEXY 0 , -30, 0 '30 pixel nach unten
    41. waitms 500
    42. sendscan R_close 'Maustasten funktionieren auch als Scancode, rechte Taste gedrückt
    43. waitms 500
    44. sendscan R_open 'Maustasten funktionieren auch als Scancode, rechte Taste losgelassen
    45. waitms 500
    46. PS2MOUSEXY 0 , 0, 1 'linke Maustaste gedrückt
    47. waitms 500
    48. PS2MOUSEXY 0 , 0, 0 'linke Maustaste losgelassent
    49. waitms 500
    50. loop
    51. ' *** Scancodes ***
    52. Taste_e:
    53. Data 3 , &H24 , &HF0 , &H24
    54. Taste_s:
    55. Data 3 , &H1B , &HF0 , &H1B
    56. Taste_t:
    57. Data 3 , &H2C , &HF0 , &H2C
    58. Taste_shift:
    59. Data 3 , &H12, &HF0, &H12
    60. Taste_shift_up:
    61. Data 1 , &H12
    62. Taste_shift_down:
    63. Data 2 , &HF0, &H12
    64. Taste_ctrl_alt_entf:
    65. Data 11 , &H14 , &H11 , &HE0 , &H71 , &HE0 , &HF0 , &H71 , &HF0 , &H11 , &HF0 , &H14
    66. Mouseup:
    67. Data 3 , &H08 , &H00 , &H01
    68. R_open:
    69. Data 3 , &H08,&H00,&H00
    70. R_close:
    71. Data 3 , &H0a,&H00,&H00
    Alles anzeigen

    486 mal gelesen