Forum: Mikrocontroller und Digitale Elektronik PS2-Tastatur am Atmega


von fifo (Gast)


Lesenswert?

Hallo, irgendwie spielt die Tastatur verrückt.
Die Anschlüsse stimmen alle.
Es sind exakt 4,9 Volt Betriebsspannung.
Nehme clock und data ab zum Atmega644p

Ob ich ein "C" programm nehme oder ein Programm von Bascom, es fangen 
beim starten des Atmegas die drei Dioden oben rechts auf der Tastatur an 
zu blinken und hören nicht wieder auf.
Daten werden nicht erkannt.

Erst wenn ich die Ps2-Tastatur wieder an den Pc anschliesse und der Pc 
hochgefahren ist, gehen die drei dioden aus und die Tastatur 
funktionierrt am Pc.
Das gleiche spiel wiederholt sich immer, die Tastatur ist also 
funktionsfähig.

Was ist das?

gruss

von Oliver J. (skriptkiddy)


Lesenswert?

Wie ist deine Schaltung? Wie ist dein Programm?
Sonst wird das hier eher nichts mit der Hilfe.

Gruß Skriptkiddy

von Joachim B. (jojo84)


Lesenswert?

Sieht mir eher nach Troll aus...

von Oliver J. (skriptkiddy)


Lesenswert?

Joachim B. schrieb:
> Sieht mir eher nach Troll aus...
Duchaus möglich. Aber habe es aber auch schon oft gesehen, dass Menschen 
sich hier einfach nur nicht richtig Nettiquetten-konform ausdrücken.

von bitte löschen (Gast)


Lesenswert?

fifo schrieb:
> Erst wenn ich die Ps2-Tastatur wieder an den Pc anschliesse und der Pc
> hochgefahren ist, gehen die drei dioden aus ..

Deine Tastatur empfängt Energiesignale von Außerirdischen. Kein Grund 
zur Beunruhigung!

von fifo (Gast)


Lesenswert?

das ist der Bascom-code:

$regfile = "m644pdef.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40


'connect PC AT keyboard clock to PIND.2
'connect PC AT keyboard data to PIND.4

'The GetATKBD() function does not use an interrupt.


Config Keyboard = Pind.2 , Data = Pind.43 , Keydata = Keydata


Dim S As String * 12
Dim B As Byte


$serialinput = Kbdinput

Print "hello"



Do

' B = Getatkbd()     'get a byte and store it into byte variable

'When no real key is pressed the result is 0

'So test if the result was > 0

' If B > 0 Then

'    Print B ; Chr(b)

' End If


'The purpose of this sample was how to use a PC AT keyboard

'The input that normally comes from the serial port is redirected to the

'external keyboard so you use it to type

Input "Name " , S

'and show the result

Print S

'now wait for the F1 key , we defined the number 200 for F1 in the table

Do

   B = Getatkbd()

Loop Until B <> 0

Print B

Loop

End


Kbdinput:

$asm

push r16           ; save used register
push r25
push r26
push r27

Kbdinput1:

rCall _getatkbd   ; call the function

tst r24           ; check for zero

breq Kbdinput1     ; yes so try again

pop r27           ; we got a valid key so restore registers
pop r26
pop r25
pop r16

$end Asm
Return


B = Getatkbd()

'This is the key translation table


Keydata:

'normal keys lower case

Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0

Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 
50 , 0

Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 
114 , 53 , 0

Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 
, 55 , 56 , 0

Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 
112 , 43 , 0

Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0

Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0

Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 
0 , 0


'shifted keys UPPER case

Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0

Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 
0

Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 
37 , 0

Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 
40 , 0

Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 
63 , 0

Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0

Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0

Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 
0 , 0

gruss

von fifo (Gast)


Lesenswert?

Schaltung :
- +5 Volt (bei mir 4,9 Volt)
- Masse
- Clock an Int0 644p> PD2
- Data an einem 644p> PD4

oben ist ein Fehler : Data = Pind.43  > Pind.4

gruss

von Otto (Gast)


Lesenswert?

Sind Pull-Up vorhanden ?

von Detlev T. (detlevt)


Lesenswert?

Und wo sind die 4k7-Pullups?

von fifo (Gast)


Lesenswert?

hmm..., oh...
Ich habe 2 4k7-Pullups für das i2ceeprom24c256.
Welche Leitungen von der Tastatur müssen denn da dran, kann ich die da 
mit anschliessen?

gruss

von Otto (Gast)


Lesenswert?

clock und data von der Tastatur über Widerstand an +5V

von fifo (Gast)


Lesenswert?

jup, danke.
jetzt läuft es.

ich habe garnicht an die pullups gedacht.

gruss

von atmega8 (Gast)


Lesenswert?

Guten Tag,
ich habe ein ähnliches Problem mit einer PS/2 Tastatur aber ich verwende 
die in App note AVR313 enthaltene Software (avr-gcc port), umgeschrieben 
auf einen ATmega8. Die Tastatur wird auch initialisiert (die 3 LEDs 
leuchten kurz auf) aber es werden keine Zeichen über den UART 
ausgegeben. Selbst mit 4k7 pull-ups klappt es nicht. Da ich nun bereits 
die Schaltung mehrfach überprüft habe, stellt sich mir die Frage, ob 
dies nur mit manchen Tastaturen klappt aber nicht mit allen. 2 Habe ich 
bereits erfolglos getestet. Gibt vielleicht es eine Möglichkeit die 
Tastatur zur Kooperation zu überreden? Für kompetente Hilfe wäre ich 
bereits im Vorfeld zu Dank verpflichtet.

von Andreas (Gast)


Lesenswert?

atmega8 schrieb:
> Gibt vielleicht es eine Möglichkeit die
> Tastatur zur Kooperation zu überreden?

Kommt drauf an. Hast Du eine zugängliche Tastatur oder hat sie sich in 
der Vergangenheit eher störrisch gezeigt? Bist Du psychologisch 
vorgebildet?

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.