Forum: Mikrocontroller und Digitale Elektronik PS/2 mit AT90USB162


von Scadi (Gast)


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
von Galle (Gast)


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.