Hallo, Ziel meines Projektes ist es eine Tastatur in ein System über RS232 zu integrieren. Ich benutze einen Tiny2313 um das Protokoll einer PS2/AT-Tastatur über eine serielle Schnittstelle(RS232) an einen µPC weiterzugeben und umgekehr. PS2/AT-Tastatur arbeitet mit SCANCODE-SET2. Ich gebe die HEX-Zahlen einfach nur weiter und das funktioniert von Tastatur zu PC einwandfrei. Sende ich nun Befehle von PC zu Tastatur, so erkennt er oft nach dem dritten Befehl nicht mehr den Syntax. Nach einem Neustart(kurzes unterbrechen der Betriebsspannung von der Tastatur) kann ich den Befehl Restart(0xFF), so oft ich will, hintereinander ausführen. Wenn ich zum Beispiel die Kontroll-LED anschalten möchte, schaltet er sie an, führt aber danach keinen Befehl mehr aus. Aber wenn eine Taste gedrückt wird, erhält der PC den richtigen SCANCODE. Es können nur keine Befehle mehr von der Tastatur entgegegen genommen werden. Ich arbeitete nach der Vorlage von http://www.marjorie.de/ps2/start.htm
Möglich, dass das nach dem Stopbit die Datenleitung nicht mehr ordnungsgemäß frei gegeben wir. Probier mal: (Auszug von der Vorlage) Nachdem das Stopbit empfangen wurde, bestätigt das Eingabegerät, indem Data Low gesetzt wird (Acknowledge) und ein letzter Clockimpuls ausgegeben wird. Sollte der Host die Datenleitung nach dem 11. Clockimpuls nicht freigeben, gibt das Eingabegerät solange Clockimpulse aus, bis die Datenleitung freigegeben wird (das Eingabegerät erzeugt dabei einen Fehler). Der Host kann die Übertragung jederzeit vor dem 11. Clockimpuls abbrechen, indem er Clock für mindestens 100 µs Low hält.
Danke erstmal, aber das habe ich beachtet. Im Anhang habe ich eine Aufzeichnung aus meinem Terminalprogramm zusammengefasst.
Hmmm ... vielleicht irgendwas mit dem Tastaturbuffer. Was passiert, wenn du zwischen den LED-Befehlen von der Tastatur ein paar Tasten geschickt bekommst? Bzw. wenn du zwischen den LED-Infos andere Befehle an die Tastatur schickst ? Oder gibts die Möglichkeit, dass du die Signale mal mit dem Oszilloskop anschaust ?
Sobald ein Byte fertig zum Lesen im UART-Register(UDR) steht, sperre ich die Interruptroutine die ich nutze, um Signale von der Tastatur zu empfangen. Ich lese das Byte aus und steuere die Tastatur schon an um den Befehl entgegen zunehmen(Sprich CLOCK 100µs nach LOW ziehen). Danach setze ich über den µC DATA auf LOW. CLOCK wieder von Tastatur steuern lassen und warten bis CLOCK wieder LOW. ###DATA entsprechend BIT<0> setzen, warten bis CLOCK=H und warten bis CLOCK=L.###-> Dann den Satz wiederholen bis zu STOP-BIT. Abwarten bis Acknowlegde von der Tastatur kommt und vor der Endlosschleife wieder Interrupts aktivieren. So gehe ich vor um Signale an die Tastatur zu senden.
Was passiert, wenn du zwischen den LED-Befehlen von der Tastatur ein paar Tasten geschickt bekommst? -wegen der gesperrten Interruptquelle sind in der Zeit kein Informationen von der Tastatur möglich. Da durch die Ansteuerung mit CLOCK auf LOW(100µs)der Tastaturcontroller weiß, das er einen Befehl bekommt Bzw. wenn du zwischen den LED-Infos andere Befehle an die Tastatur schickst ? -Ist möglich. Oder gibts die Möglichkeit, dass du die Signale mal mit dem Oszilloskop anschaust ? -Bekomme morgen ein Fluke zum analysieren.
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.