PS/2 mit AT90USB162

Gast #2165209
Lesenswert?

Hallo,
ich versuche nun schon seit Tagen eine billige PS/2 Tastaturemulation 
mit Bascom auf dem AT90USB162 zum laufen zu bringen.
Die PS/2-Erweiterung zu Bascom habe ich erworben. Selbst das einfach 
Beispiel aus der Bascom-Hilfe funktioniert nicht richtig.
Die PS/2 Data-Leitung habe ich an PD1 angeschlossen (laut Datenblatt ist 
dies auch der INT1 Anschluss, und die Clock-Leitung an PD7.
Das Beispiel müsste jede Sekunde "Mark" zum PC schicken, dort kommt aber 
jede Sekunde immer nur ein Zeichen an; so entsteht nach und nach z.B. 
sowas "krkmkamara".
Hier mal der Bascom Quelltext:
1
$regfile = "usb162.dat"
2
$crystal = 16000000
3
$hwstack = 32
4
$swstack = 8
5
$framesize = 24
6

7
Config Clockdiv = 1
8
Config Portd.6 = Output
9

10
$baud = 19200
11

12
$lib "mcsbyteint.lbx"
13

14
'configure PS2 AT pins
15
Enable Interrupts
16
Config Atemu = Int1 , Data = Pind.1 , Clock = Pind.7
17
'                 ^------------------------ used interrupt
18
'                              ^----------- pin connected to DATA
19
'                                       ^-- pin connected to clock
20
'Note that the DATA must be connected to the used interrupt pin
21

22
Dim Flag As Bit
23
Flag = 0
24

25
Do
26
   Portd.6 = Flag
27
   Sendscankbd Mark
28
   Waitms 1000
29

30
   If Flag = 1 Then
31
      Flag = 0
32
   Else
33
      Flag = 1
34
   End If
35
Loop
36

37

38
Mark:
39
Data 12 , &H3A , &HF0 , &H3A , &H1C , &HF0 , &H1C , &H2D , &HF0 , &H2D , &H42 , &HF0 , &H42

Hat jemand ne Idee woran das liegen kann? ich vermute mal etwas mit dem 
Timing

Grüße
Thomas
Gast #2525317
Lesenswert?

Hallo, bei mir lag es daran, das INT1 Pind.3 ist bei dem AT90USB162 ist 
es ebenso der Pind.3.

Also Data = Pind.3

Die 1 Sekunde würde ich perönlich mit einem Timer lösen.

$regfile = "usb162.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 8
$framesize = 24
$baud = 19200

$lib "mcsbyteint.lbx"

'configure PS2 AT pins

Config Atemu = Int1 , Data = Pind.3 , Clock = Pind.7
'                 ^------------------------ used interrupt
'                              ^----------- pin connected to DATA
'                                       ^-- pin connected to clock

Config Timer1 = Timer , Prescale = 256
On Timer1 Isr_timer1
Enable Timer1
Const Timer1_reload = 3036          'Wert für 1s bei 16MHz

Enable Interrupts

Do
nop

Loop
End
Isr_timer1:
Sendscankbd Mark
Timer1 = Timer1_reload
Return

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren