Forum: FPGA, VHDL & Co. PS2-Tastatur Wiederholrate


von Christian F. (Gast)


Lesenswert?

Hallo!

Ich versuche eine normale PC-Tastatur über die PS2-Schnittstelle auf
einem Spartan3-Board von Xilinx anzusprechen. Das heißt, Tastencodes
auslesen funktioniert, ich bin mir nur nicht ganz sicher, wie die scan
code repeat rate gesetzt werden muss und über die Schnittstelle in die
Tastatur geschrieben werden muss. Kann die Rate einmalig eingestellt
werden, oder muss das zyklisch immer wieder erfolgen? Wenn ich
beispielsweise die LEDs der Tastatur aktiviere, blinken sie immer nur
einmal kurz auf und leuchten nicht durchgehend. Wenn ich die repeat
rate nur einmal setze sehe ich nämlich keine unterschiedlichen
Auswirkungen wenn ich die Rate variiere.
Vielleicht hat ja einer von euch Erfahungen mit PS2-Programmierung und
kann mir helfen.

Danke schonmal!

von Jochen Pernsteiner (Gast)


Lesenswert?

>beispielsweise die LEDs der Tastatur aktiviere, blinken sie immer nur
>einmal kurz auf und leuchten nicht durchgehend. Wenn ich die repeat
>rate nur einmal setze sehe ich nämlich keine unterschiedlichen
>Auswirkungen wenn ich die Rate variiere.

Die LEDs sollten eigentlich permanent leuchten, falls Du sie einmal
angeschaltet hast. Auch sollte die Scan-Rate gespeichert bleiben.

Kann es sein dass Du - vielleicht unbeabsichtigt - einen Reset-Befehl
hinterherschickst (Wert = 0xff) ?

von Christian F. (Gast)


Lesenswert?

Kann ich mir eigentlich nicht vorstellen, aber ich werds nochmal in Ruhe
nachprüfen. Danke schonmal für den Tip und die Info!
Was anderes fällt mir aber gerade noch ein. Muss ich die
PS2-Datenleitung nach jedem Schreiben auf 'Z' setzen, um danach
wieder lesen zu können bzw. umgekehrt (so wie beim Speicherzugriff)?
Oder managt das der Port selber?

von Jochen Pernsteiner (Gast)


Lesenswert?

>Muss ich die PS2-Datenleitung nach jedem Schreiben auf 'Z' setzen, um
>danach wieder lesen zu können

Freilich. Wenn Du einen "inout"-Port nicht auf hochohmig setzt, ist
er es auch nicht. Von allein macht er es nicht.
Wenn er nicht auf 'Z' gesetzt wird und die liest ihn, dann liest Du
quasi den Wert des Ausgangstreibers, also den Wert den Du vorher
geschrieben hast.

von Christian F. (Gast)


Angehängte Dateien:

Lesenswert?

Ok, dann passt es schon so wie ichs gemacht hab. War mir nur nicht
sicher ob es vielleicht daran liegt, da die Datenleitung sich ja wenn
keine Taste gedrückt wird quasi "abschaltet", wenn ich das richtig
verstanden hab.
Ich schicke dir mal den Code vom Modul mit der Tastaturabfrage im
Anhang mit, konnte nämlich nichts finden wo ich evtl. einen Resetcode
geschickt haben sollte. Vielleicht kannst du ihn dir ja mal anschauen
und siehst irgendwas. Hab nämlich noch nicht soo lange Erfahung mit
FPGA-Programmierung.
Die Tastatureingabe soll für das Spiel Pong verwendet werden, wobei im
Moment die Verzögerung zwischen Tastendruck und Bewegung des Schlägers
einfach zu groß ist. Deswegen wollte ich die Wiederholrate versuchen zu
erhöhen.

von Jochen Pernsteiner (Gast)


Lesenswert?

>Vielleicht kannst du ihn dir ja mal anschauen und siehst irgendwas.

Ich sehe vor allem daß Du den Keyboardtakt als Taktsignal benutzt.
Da wundert mich nichts mehr...

Vielleicht kriegst Du das irgendwie zum Laufen, oder auch nicht.

Du solltest alle Deine externen Signale mit dem Systemtakt (= 50
MHZ-Oszillator auf Deinem Baord) abtasten.

von Jochen Pernsteiner (Gast)


Lesenswert?

Noch was:

Um Kommandos an das Keyboard zu senden, musst der FPGA die Taktleitung
kontrollieren. Du benutzt sie aber nur als Eingang.

von Christian F. (Gast)


Lesenswert?

Alle anderen noch so vorhandenen Signale in den anderen Modulen taste
ich schon mit dem normalen Systemtakt ab, aber das Lesen von der
PS2-Schnittstelle muss ich doch auf den PS2-Takt synchronisieren, sonst
kanns doch passieren, dass ich ein Bit eines Scancodes doppelt oder
garnicht lese, oder? Dachte es wird immer genau ein Bit pro PS2-Takt
über die PS2-Datenleitung geschickt. Oder hab ich da was falsch
verstanden? Deswegen versteh ich jetzt auch nicht so ganz warum ich das
Tastatursignal mit dem Systemtakt abtasten soll. Kannst du mir das mal
genauer erklären?

von Christian F. (Gast)


Lesenswert?

Ahso...heißt das ich muss den PS2-Takt der Tastatur selber vorgeben?
Dann wäre mir wohl einiges klar...

von Jochen Pernsteiner (Gast)


Lesenswert?

>Ahso...heißt das ich muss den PS2-Takt der Tastatur selber vorgeben?

Nicht ganz, schau Dir hierzu mal das hier an:

http://www.beyondlogic.org/keyboard/keybrd.htm

von Jochen Pernsteiner (Gast)


Lesenswert?

>aber das Lesen von der PS2-Schnittstelle muss ich doch auf den PS2-Takt
>synchronisieren

Wenn Du die Signale mit 50MHz abtastest sollte das schnell genug sein.
Du kannst doch einen Flankenwechsel des PS2-Taktes ganz einfach
erkennen: wenn das Signal vorher Low war und nachher High (oder
umgekehrt) dann ist's ne Flanke, und dann schaust Du dir die
Datenleitung an. Mit einem Mikrocontroller geht das ja genauso.

Wenn Du den PS2-Takt als Taktsignal benutzt, und es ist mal eine
Störung drauf, dann kommt Deine ganze Signalerkennung durcheinander.

von Christian F. (Gast)


Lesenswert?

Danke erstmal, hast mir glaube ich schon gut weitergeholfen! Bin jetzt
erstmal noch mit ein paar anderen Sachen beschäftigt, aber dann muss
ich mir die Beschreibung nochmal in Ruhe hernehmen. Meld mich falls ich
dann noch Probleme hab, danke nochmal!

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.