Tach, Ich habe keine wirkliche Frage. Ich möchte mich nur mal öffentlich über dieses elende PS2-Protokoll aufregen! Mein Problem schien erst mal ganz simpel. Ich habe ein LED-Laufschrift, die ich per µC ansteuere und wollte nur mal eine PS2-Tastatur anschließen. Wenn kein PC angeschlossen ist sollte der µC der Host sein. Wenn ein PC angeschlossen ist sollte mein µC in den "Stealth"-Mode übergehen und nur den Traffik abhören (Und natürlich alle anzeigbaren Tastenanschläge auf der LED-Laufschrift ausgeben). Ich habe mir gedacht: schön ein interupt-getriggertes Schieberegister und nach 11 Takten hab ich meine Daten. NEIN! Wenn der PC sendet hat man plötzlich 2 Takte mehr. Und ein START-Bit sieht bei PS2 genauso aus wie jedes andere Bit. Deshalb lässt sich darauf nicht syncronisieren. (Da lob ich mir doch I2C z.B.) Worauf man syncen kann, dass ist die Anforderung vom PC zu schreiben. Da kommt nämlich ein laaaanger Takt auf der Clockleitung. Also muss eine Zeitmessung implementiert werden, die diese Anforderung erkennt und das Schieberegister neu vorbereitet. So reagiert man auch gleich auf den Busy-Zustand. Denn wenn man die Maus bewegt, ist der PC außer Stande die Tastatur zu verarbeiten und zieht deshalb die Clock-Leitung auf LOW um die Komunikation zu unterbinden. Das sind dann natürlich keine Daten für mich. Mein PC nimmt jedes Frame sang und klanglos hin. Mein Laptop hingegen Blockiert nach jedem Frame die Leitung durch einen Clockimpuls, den man auch nicht ins Schieberegister schieben darf. Und wenn man dann endlich die richtigen Daten rausgefriemelt hat, geht das Chaos erst richtig los. Völlig zusammenhangslose Tastencodes. Oder 8 Byte die übertragen werden wenn man mal kurz die "Pause"-Taste drückt. Sinnlos!! Momentan verzweifle ich an nichtdokumentierten Byte die ich empfange: Wenn ich die Rollentaste drücke wird das Byte gesendet und Windows setzt die Statusleds der Tastatur. Alles schön nach Protokol. Wenn ich aber auf der MS-Bildschirmtastatur die Rollentaste drücke, liegen Bytes auf der Leitung die es garnicht geben sollte. Aber die LED geht trozdem an. Ich bin einfach nur gerade massiv angepisst, weil ich nicht weiß wo mein Fehler liegt und ob überhauptr ein Fehler vorliegt. Also wenn ihr mich fragt, wird sich dieses Protokoll nicht durchsetzten lach Ich geh jetzt mal auf Arbeit, da weiß ich wenigstens was passiert wenn ich einen Knopf drücke :) CU Harry
Ach komm, was deine Vorfahren in einen wirklich strunzdoofen MCS48 mit 64Byte Ram implementieren konnten wirst du doch wohl auch schaffen. :-) Und nebenbei das Protokoll ist syncron. Da asyncron irgenwas detektieren zu wollen ist auch gefaehrlich weil das Timing der Tastaturen nicht immer gleich ist. Ich hatte frueher auch mal den 4Mhz Quarz meiner Tastatur durch einen mit 6Mhz ersetzt weil mir der Tastaturrepeat zu langsam war. Was dich aber interessieren koennte, es gab in der Ct mal einen dicken Artikel ueber die Tastaturen und wie man sie ansteuert. War IMHO gedacht um sie an einen ST anzuschliessen. Und das Tastaturen prinzipiell zwei verschiedene Modis (XT/AT) koennen und sich dazwischen automatisch umschalten weisst du sicher auch schon? Olaf
Ja das anschließen und programieren einer Tastatur am µC war noch recht einfach (ich habe zumindest keine 64 Byte RAM verbraucht :D ). In meiner Anwendung ist die Tastatur aber am PC angeschlossen und der µC hört nur passiv zu. Und dabei kommt ein ganz schönes Clock-Impulse-Wirrwar zusammen den man erst mal entwirren muss, um die eigentlichen Nutzdaten heraus zu picken. Mit "synconisieren" meine ich: Das Erkennen irgendeines Ereignisses, welches wir verrät was sich auf der Data-Leitung befindet, befand oder befinden wird. Wenn zB beim I2C ein STOP-Bit erkannt wird - und das ist etwas unverwechselbares - dann weiß man: meine Daten liegen fertig im Register. Hier sieht das Stopbit aus wie jedes Andere und der Recher KANN gleich noch einen Clock-Impuls nachlegen. Das muss man erst mal verarbeiten. Im Nachhinein wäre es sicher cleverer gewesen die Tastatur und den PC getrennt an den µC anzuschließen. Aber zu spät... @ Travel Rec. Die Ausarbeitung von deinem Link ist bereits meine Hauptinfoquelle. http://www.marjorie.de/ps2/ps2.pdf Sind da wirklich ALLE Befehle aufgelistet, die eine Tastatur versteht? Ist z.B. 0xFE die einzige "Fehler"-Antwort, oder gibt es noch Fehlernummern? Ich habe gelegentlich 0xE9 empfangen. Ich würde prizipel von einem Fehler in meinem Code ausgehen. Aber die zyklichen 0xF4 ("Enable") und FA ("ACK") Befehle kommen richtig bei mir an und auch andere bidirektionale Gespräche empfängt der µC fehlerfrei. Und deshalb frage ich mich, ob 0xE9 nicht vieleicht doch irgendwo erlaubt ist. Ich tüftel einfach noch ein wenig, das wird schon und wenn nicht, dann ignoriere ich es einfach :D Trotzdem muss ich sagen: Diese Art der Komunikation ist eine der ... die ich je ausprobiert habe.
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.