Archiv verlassen und diese Seite im Standarddesign anzeigen : Tastatur (PS2) imitieren mit einem Mega8
Douser182
03.03.2008, 16:32
Hallo Leute,
Ich will mit einem ATMega8 eine PS2 Tastatur imitieren, damit mein Mega8 zb einen Text schreiben kann. Leider finde ich nur Informationen zum Anschluss einer Tastatur am Mega aber nicht zum imitieren.
Das ganze dürfte eigentlich ja gar nicht so schwer sein, da Bascom offenstichtlich PS2 unterstützt.
Hat von euch, irgendjemand schon einmal so etwas gemacht?
Vielen Dank im voraus!
Douser
SENDSCANKBD heißt der Befehl der das möglich macht. Du mußt beachten das Du mit den PS2 Scanncodes arbeiten mußt. Also um eine Tastenzeichen zu Senden mußt Du 3 Bytes Senden : 1 Byte Makecode und 2 Byte Breakcode.
Douser182
03.03.2008, 16:44
In Bascome Hilfe habe ich diesen Code gefunden, aber zur Zeile "Config Atemu =..." gib es die Fehlermeldung "Library file not found"
$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
The PS2 Keyboard and mouse emulator needs an additional commercial addon library.
Also wirds doch nicht ganz so einfach wenn man sich diese LIB nicht noch dazukauft.
http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=35&category_id=6&option=com_phpshop&Itemid=1
Douser182
03.03.2008, 17:21
Weißt du vielleicht, wo man diese Lib noch bekommen kann?
Christopher1
03.03.2008, 18:14
Kaufen, anders wohl auf legalen Wege nicht ;-)
Ja wenn Du das mit der Lib machen willst wirst Du die kaufen müssen.
oder
1. das Senden selber Programmieren ( das PS2-Protokoll ist nicht so schwer)
2. in C bzw. Assembler wirds so was schon frei und fertig geben
3. im Netz suchen ob es schon mal einer ohne die Lib mit Bascom geproggt hat
MfG RoFo
Douser182
03.03.2008, 19:11
Das problem beim selber schreiben ist nur, dass ich so etwas noch nie gemacht habe! Werde mich noch a bissal umsehen und versuchen, es selber zu Programmieren
Danke für eure Unterstützung
Douser182
09.03.2008, 12:02
Morgen,
Wollte mir gerade bei MCS die Lib kaufen, aber die haben irgendwelche Probleme mit ihrem Server. Da kommt immer die Meldung "Server ist im daugenblick zu beschäftigt!" und das ganze seit gestern Abend.
Jatzt muss ich das Protokoll doch selber schereiben, habe aber keine Ahnung davon. Meine Suche im Netz war auch nicht wirklich erfolgreich.
Hoffe einer von euch kann mir dabei helfen.
Ich will eigenlich nur dem PC die Standart Tasten sagen, die auf jeder Tastatur vorkommen.
http://de.wikipedia.org/wiki/PS/2-Schnittstelle
Die weiterführenden Links sind auch nicht schlecht
EDIT:
ich habe a mal schnell was zusammengeschrieben
$regfile = "m32def.dat"
$crystal = 16000000
Declare Sub Senden
Declare Sub Senden0
Declare Sub Senden1
Dim X As Byte
Dim Y As Byte
Dim Z As Byte
Dim Send As Byte
Dim Parity As Byte
Daten Alias Pina.0
Datenport Alias Ddra.0
Clock Alias Pina.1
Clockport Alias Ddra.1
For Y = 0 To 29 ' sendet "hallo AVR"
Send = Lookup(y , Dat)
Call Senden
Next
Do : Loop 'endlosschleife
'######################### Unterprogramme #################################
Senden:
Do : Loop Until Clock = 1 And Daten = 1 'warte bis PC empfangsbereit
'Startbit (immer 0)
Call Senden0
'8 Datenbists
For X = 0 To 7
If Send.x = 0 Then '0 Senden
Call Senden0
Else '1 Senden
Call Senden1
End If
Next
'parity
If Parity.0 = 0 Then
Call Senden0
Else '1 Senden
Call Senden1
End If
'Stopbit (immer 1)
Call Senden1
Parity = 0
Return
Senden0: 'Sendet eine 0 über PS2
Datenport = 1 'Daten auf Output
Daten = 0 'Daten auf low
Clockport = 1 'Clock auf Output
Clock = 0 'Clock auf 0
Waitus 30 '30µS warten
Clockport = 0 'Clock auf Input
Waitus 5 '5 µS warten
Datenport = 0 'Daten auf Input
Return
Senden1: 'Sendet eine 1 über PS2
Clockport = 1 'Clock auf Output
Clock = 0 'Clock auf 0
Waitus 30 '30µS warten
Clockport = 0 'Clock auf Input
Incr Parity
Return
Dat:
Data &H33 , &HF0 , &H33 , &H1C , &HF0 , &H1C , &H4B , &HF0
Data &H4B , &H4B , &HF0 , &H4B , &H44 , &HF0 , &H44 , &H29
Data &HF0 , &H29 , &H12 , &H1C , &HF0 , &H1C , &H2A , &HF0
Data &H2A , &H2D , &HF0 , &H2D , &HF0 , &H12
Hi Rofo88!
Der Beispielcode sieht im Grunde gut aus, allerdings ergibt die Syntax Prüfung in BASCOM bei mir einen Fehler in den drei Zeilen wo folgendes versucht wird:
Im Senden 0 Unterprogramm:
Daten = 0 'Daten auf low
Clock = 0 'Clock auf 0
Im Senden1 Unterprogramm:
Clock = 0
Da kommt dann immer der folgende Fehler in BASCOM:
Error 230: You can not write to a PIN register [PINA.0], etc.
Irgendeine Erklärung, bzw. Modifikation des Codes um es zum Laufen zu bringen ?
Gruß,
Oscar10
Mach aus
Daten Alias Pina.0
Clock Alias Pina.1
einfach:
Daten Alias Porta.0
Clock Alias Porta.1
@zerush
Das wird leider nicht funktionieren da Daten und Clock auch als Input abgefrag werden.
@oscar10
Also ich habe Bascom 1.11.9 da läufts! Welche Version hast Du?
Rofo88:
Ich habe leider noch die 1.11.8.7....
@oscar10
So, das sollte auch mit der älteren Version laufen
$regfile = "m32def.dat"
$crystal = 16000000
Declare Sub Senden
Declare Sub Senden0
Declare Sub Senden1
Dim X As Byte
Dim Y As Byte
Dim Send As Byte
Dim Parity As Byte
'Hier bitte die Portdaten eintragen
Daten Alias Pina.0
Datenport1 Alias Porta.0
Datenport Alias Ddra.0
Clock Alias Pina.1
Clockport Alias Ddra.1
Clockport1 Alias Porta.1
For Y = 0 To 29 ' sendet "hallo AVR"
Send = Lookup(y , Dat)
Call Senden
Next
Do : Loop 'endlosschleife
'######################### Unterprogramme #################################
Senden:
Do : Loop Until Clock = 1 And Daten = 1 'warte bis PC empfangsbereit
'Startbit (immer 0)
Call Senden0
'8 Datenbists
For X = 0 To 7
If Send.x = 0 Then '0 Senden
Call Senden0
Else '1 Senden
Call Senden1
End If
Next
'parity
If Parity.0 = 0 Then
Call Senden0
Else '1 Senden
Call Senden1
End If
'Stopbit (immer 1)
Call Senden1
Parity = 0
Return
Senden0: 'Sendet eine 0 über PS2
Datenport = 1 'Daten auf Output
Datenport1 = 0 'Daten auf low
Clockport = 1 'Clock auf Output
Clockport1 = 0 'Clock auf 0
Waitus 30 '30µS warten
Clockport = 0 'Clock auf Input
Waitus 5 '5 µS warten
Datenport = 0 'Daten auf Input
Return
Senden1: 'Sendet eine 1 über PS2
Clockport = 1 'Clock auf Output
Clockport1 = 0 'Clock auf 0
Waitus 30 '30µS warten
Clockport = 0 'Clock auf Input
Incr Parity
Return
Dat:
Data &H33 , &HF0 , &H33 , &H1C , &HF0 , &H1C , &H4B , &HF0
Data &H4B , &H4B , &HF0 , &H4B , &H44 , &HF0 , &H44 , &H29
Data &HF0 , &H29 , &H12 , &H1C , &HF0 , &H1C , &H2A , &HF0
Data &H2A , &H2D , &H
Hallo,
was muss ich bei Dat als DATA eingeben, damit er mir nur ein "m" an den PC sendet?
Gruß
Papsi
http://www.marjorie.de/ps2/scancode-set2.htm
Schaue Dir die Tabelle mal an.
MakeCode : 3A BrakeCode : F0,3A
also
Data &H3A , &HF0 , &H3A
Aha - das mit den Daten im HexFormat ist jetzt klar...
ABER
Wenn ich dein letztes Programm probiere und es starte, dann piept mein PC nur sooft, wie die HEx Sachen gesendet werden.
Also pro &Hxx einmal
Anschluss und Portbelegung sollte nicht das Problem sein.
???
:EDIT
Muß ich evtl. noch was zw. PC und µC hängen.
Habe jetzt die beiden Ausgangspins A.0 und A.1 direkt an die PS2 Buchse geklemmt.(altes Tastaturkabel)
Nein, da muß nichts mehr dazwichen. Aber die Masse darfst Du nicht vergessen!
GND und +5V habe ich natürlich auch verbunden...
Ich habe bei mir mal die Clock- und Datenleitung verdreht dann fängt er auch an zu piepen. Kann also sein das es vertaucht is. Die +5V-Leitung brauchst Du nicht zu verbinden wenn die die nicht zur Spannungsversorgung des µC brauchst.
da_miez3
19.02.2013, 21:19
Wo genau müssen denn Clock und Data ran? Sind in dem Code doch auf dem selben Pin,oder? Hats schon jemand zum laufen gebracht?
Grüße
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.