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!
>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) ?
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?
>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.
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.
>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.
Noch was: Um Kommandos an das Keyboard zu senden, musst der FPGA die Taktleitung kontrollieren. Du benutzt sie aber nur als Eingang.
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?
Ahso...heißt das ich muss den PS2-Takt der Tastatur selber vorgeben? Dann wäre mir wohl einiges klar...
>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
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.