Forum: Mikrocontroller und Digitale Elektronik Oszillatorproblem tiny2313 PS/2 Interface


von Gast (Gast)


Lesenswert?

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

von Michael P. (desilva)


Lesenswert?

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)?

von Gast (Gast)


Lesenswert?

> 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

von Falk B. (falk)


Lesenswert?

@ 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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.