Hallo, ich arbeite gerade an einem PS/2-Mausinterface mit unterschiedlichem Erfolg: Ich benutze den internen Oszillator des tiny 2313 und habe folgendes Problem: Mein Interface arbeiten nur stabil bei 512kHz (int. 4MHz CKDIV8). Versuche ich auf 1MHz zu gehen, kann ich die Maus nicht mehr mit Befehlen beschicken (Resetdaten empfangen geht noch, aber auch nicht immer 100%ig). Bei 4MHz geht nix mehr. Ich bin ziemlich aufgeschmissen und kann das Problem (zumal ich kein Oszilloskop habe) überhaupt nicht einordnen. Es gibt eigentlich nur eine Timing relevante Stelle im Code welche von mir auch entspr. Takt angepasst wird (Pull-Down-Time für Send-Mode). Ansonsten gibt ja die Maus immer den Takt vor (hängt bei mir am Interrupt). Die int. Pull-Ups des µC für DATA/CLK habe ich auch schon gegen ext. getauscht (10k). Abblockkondensator 47nF ist auch vorhanden. Auch ext. Takt vom STK bringt keine Abhilfe - über 512kHz ist das Verhalten = Voodoo. Zwei weitere µC verhalten sich identisch. Für jeden Hinweis bin ich sehr dankbar. Gruß (noch) Gast
Ah... was hast Du denn für Vorstellungen von PS/2 :-) Die Clockfrequenz MUSS zwischen 10 und 20 kHz liegen, also etwa 40 µs low/40 µs high.. Alles andere ist WEIT außerhalb jeder Spec! Du kennst die berühmten PS/2 Beschreibungen von Adam Chapweske (gibt's auch in deutscher Übersetzung)?
> Du kennst die berühmten PS/2 Beschreibungen von Adam Chapweske > (gibt's auch in deutscher Übersetzung)? Ja, die habe ich auch benutzt. >Die Clockfrequenz MUSS zwischen 10 und 20 kHz liegen, also etwa 40 µs >low/40 µs high.. Das verstehe ich nicht. Clock wird doch vom Device (in diesem Fall die Maus) generiert. Daran wird das Timing des Host doch angekoppelt. Ich generiere nirgens einen eigenen Takt. Ich würde mit 512kHz ja zufrieden sein, wenn ich die höhere Frequenz nicht für PWM benötigen würde. Noch Tipps? Ist irgendwas besonderes beim Tiny bekannt? Andere PS/2 Quelltexte machen eigentlich nichts anderes als ich. Kann irgendwie bei höherem Takt die Spannungsversorung einbrechen (habe außer der Maus aber keine andere Last am µC). Diverse Mäuse habe ich auch schon probiert. Verhalten bei allen gleich. (Danke für die Antwort) (noch) Gast
@ Gast (Gast) >Das verstehe ich nicht. Clock wird doch vom Device (in diesem Fall die >Maus) generiert. Daran wird das Timing des Host doch angekoppelt. Ich >generiere nirgens einen eigenen Takt. Na dann ist ein Fehler in deiner Taktankopplung. >Kann irgendwie bei höherem Takt die Spannungsversorung einbrechen (habe Nein. Mit 5V läuft der Tiny mit bis zu 20 MHz. Mfg Falk
Wenn Du mit verschiedenen Takten arbeitest, mußt Du Deine Timer-Werte oder Zählvariablen in den Routinen, die das PS2-Taktsignal relativ zu den Daten abtasten, entsprechend anpassen. Es muß von den Taktflanken bis zum Lesen der Daten immer eine gewisse Zeit vergehen, da Du sonst ungültige Daten zu lesen bekommst.
Hallo, nun da ich die Lösung des Problems gefunden habe, will ich das Thema auch damit abschliessen. Hauptursache für das Problem war ein vergessenes 'NOP' beim OUT/IN DDR-Wechsel auf der 'DATA'-Leitung. (Nach dem gesendeten Stopbit auf DATA versuche ich den 'ACK'-Zustand auszulesen.) Mit 'NOP' (was ja auch so dokumentiert ist) funktioniert jetzt alles. (Warum das ganze bei 512kHz CLK klappt, bleibt trotzdem ein Rätsel...) Gruß (noch) Gast
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.