10.09.2004, 17:06
Hallo zusammen
ich habe hier ein sehr spezielles problem, aber evtl. hat ja hier jemand einen Lösungsvorschlag für mich.
Also 1. versuch ich mal zu erklären was ich vorhabe, und wie:
Also ich habe hier einen Atmega8 an dem habe ich ein AT Keyboard angeschlossen, und benutze dafür die von Bascom mitgelieferte Library für das AT (Ps/2) Keyboard. Das ganze geht auch ganz gut, wenn ich auf der Tastatur etwas type erscheint das in einem Terminal programm ohne probleme auf dem pc.
Hier mal der Code dazu:
$baud = 2400
'The GetATKBD() function does not use an interrupt.
'But it waits until a key was pressed!
Config Keyboard = Pinb.1 , Data = Pind.3 , Keydata = Keydata
'Dim some used variables
Dim S As String * 500
Dim B As Byte
Dim C As String * 3
'In this example we use SERIAL(COM) INPUT redirection
$serialinput = Kbdinput
'Show the program is running
Do
B = Getatkbd()
If B > 0 Then
C = Str(b)
If B < 100 Then
C = Format(c , "000")
End If
Print C
End If
Loop
End
Also wie man hier sehen kann sende ich den Ascii Code an den PC. Wenn der ascii Code kleiner als 100, also weniger als 3 stellen füge ich noch ne 0 dazu. Ich habe erst vor 2 wochen mit Basic angefangen, also kann das gut sein das das auch einfacher geht.
Nun zum eigentlichen problem:
Ich versuche das ganze auf dem PC mit einem Visual Basic programm auszulesen. Ich benutze dazu das MS Comm 6.0 Interface.
Das MS Comm erstellt eine subroutine die immer ausgeführt wird, wenn "RTroshold" Daten empfangen wurden. Ich habe Rtreshold auf 3 gesetzt.
Die subroutine wird auch immer ausgeführt, aber folgendes problem:
bei der 1. Tase kommt z.b. 051 als ascii Code an,
bei der 2. Taste ist es dann aber evtl schon " 51".
Ich weiss das die Daten vom atmega8 korrekt an den PC gesendet werden, das sehe ich ja im Terminal Programm.
Hat nun einer ne Idee wie ich das ganze synchronisieren kann??
leider kann ich ja waitkey() im bascom nicht benutzen, da ja das $serialinput = Kbdinput gesetzt ist, das den return key nicht versteht, dann dann könnte ich z.b. vor den ascii code nen buchstaben setzen (s051) und im Visual Basic schauen ob dieser vorne steht.
Ich freue mich schon über jede Antwort
ich habe hier ein sehr spezielles problem, aber evtl. hat ja hier jemand einen Lösungsvorschlag für mich.
Also 1. versuch ich mal zu erklären was ich vorhabe, und wie:
Also ich habe hier einen Atmega8 an dem habe ich ein AT Keyboard angeschlossen, und benutze dafür die von Bascom mitgelieferte Library für das AT (Ps/2) Keyboard. Das ganze geht auch ganz gut, wenn ich auf der Tastatur etwas type erscheint das in einem Terminal programm ohne probleme auf dem pc.
Hier mal der Code dazu:
$baud = 2400
'The GetATKBD() function does not use an interrupt.
'But it waits until a key was pressed!
Config Keyboard = Pinb.1 , Data = Pind.3 , Keydata = Keydata
'Dim some used variables
Dim S As String * 500
Dim B As Byte
Dim C As String * 3
'In this example we use SERIAL(COM) INPUT redirection
$serialinput = Kbdinput
'Show the program is running
Do
B = Getatkbd()
If B > 0 Then
C = Str(b)
If B < 100 Then
C = Format(c , "000")
End If
Print C
End If
Loop
End
Also wie man hier sehen kann sende ich den Ascii Code an den PC. Wenn der ascii Code kleiner als 100, also weniger als 3 stellen füge ich noch ne 0 dazu. Ich habe erst vor 2 wochen mit Basic angefangen, also kann das gut sein das das auch einfacher geht.
Nun zum eigentlichen problem:
Ich versuche das ganze auf dem PC mit einem Visual Basic programm auszulesen. Ich benutze dazu das MS Comm 6.0 Interface.
Das MS Comm erstellt eine subroutine die immer ausgeführt wird, wenn "RTroshold" Daten empfangen wurden. Ich habe Rtreshold auf 3 gesetzt.
Die subroutine wird auch immer ausgeführt, aber folgendes problem:
bei der 1. Tase kommt z.b. 051 als ascii Code an,
bei der 2. Taste ist es dann aber evtl schon " 51".
Ich weiss das die Daten vom atmega8 korrekt an den PC gesendet werden, das sehe ich ja im Terminal Programm.
Hat nun einer ne Idee wie ich das ganze synchronisieren kann??
leider kann ich ja waitkey() im bascom nicht benutzen, da ja das $serialinput = Kbdinput gesetzt ist, das den return key nicht versteht, dann dann könnte ich z.b. vor den ascii code nen buchstaben setzen (s051) und im Visual Basic schauen ob dieser vorne steht.
Ich freue mich schon über jede Antwort