serielle Maus nachbilden

Gast #1959855
Lesenswert?

Hallo!
Ich versuche gerade mit einem ATMega8 eine serielle Maus nachzubilden. 
Nur irgendwie funktioniert das ganze nicht so. Der Mauszeiger bewegt 
sich sporadisch, aber nicht so wie ich es eigentlich erwarte. der code 
ist im anhang, das mausprotokoll kann man leicht im internet finden.

hat jemand eine idee wo mein denkfehler liegt?

ich hoffe ihr könnt mir helfen!
Angehängte Dateien:
Gast #1959881
Lesenswert?

an int0 hängt über eine kleine schaltung aus diode und widerstand rts. 
dass der rechner die maus  als solche erkennt, muss ja sobald rts 1 ist, 
ein M gesendet werden.
aber erkannt wird mein uC ja. sonst würde sich der zeiger garnicht 
bewegen.
#1959884
Lesenswert?

Was mir an deinem Code nicht gefällt:
Du bläst da Full-Speed Bytes raus, ohne Rücksicht auf Verluste. So 
schnell kann doch kein Mensch eine Maus bewegen, wie du die RS232 dicht 
machst.

Das weiß auch der Empfänger und versucht meistens hintereinander 
eintreffende Mausbewegungen zu einer einzigen zusammen zu fassen um 
nicht wegen jeder Kleinigkeit im Betriebssystem eine komplette Kette an 
Nachrichten bis rauf zum Benutzerprogramm auszulösen. Wenn du deine Maus 
schnell hin und her bewegst, siehst du auch, dass der Cursor irgendwann 
anfängt in größeren Sprüngen sich zu bewegen.

Probier doch mal nach einerm Datenpaket eine Pause einzulegen.
#1959901
Lesenswert?

saftpresse schrieb:
> die bytes werden ja nur gesendet, wenn einer der vier kontakte
> geschlossen ist. aber das mit der pause klingt sinnvoll. wieviel wäre
> denn angebracht?

Keine Ahnung, probier einfach mal.
Lieber länger als zu kurz. Kürzer kann man immer gehen.
Ich würde einfach mal mit 1 Sekunde anfangen (oder was man eben billig 
mit ein paar ineinander geschachtelten Registerschleifen bekommt, die 
Zeit an sich ist ja nicht wichtig. Größenordnungsmässig 1 Sekunde). Wenn 
der Cursor jede Sekunde um 1 Pixel nach rechts hoppelt, sieht man das ja 
schon.

Es geht ja nur darum, erst mal abzuklären ob das auch wirklich das 
Problem ist. Bis jetzt ist es ja mehr eine Hypothese :-)
#1959938
Lesenswert?

zb so
1
       ldi   r21, $FF
2
wait0: ldi   r20, $FF
3
wait1: dec   r20
4
       brnz  wait1
5
       dec   r21
6
       brnz  wair0

bei Bedarf dann eben nochmal mit r22 eine Schleife aussen rum legen. Und 
wenn das nicht reicht noch ein mit r23, solange bis du mit deiner 
Taktfrequenz auf irgendwas bei 1 Sekunde kommst.

Oder in die innerste Schleife einen nop einfügen. Hauptsache es braucht 
Takte und wird oft ausgeführt.
Gast #1960002
Lesenswert?

danke! brachte aber leider keine änderung :(
wenn man die daten mitschneidet, kann man sehen, dass irgendwas 
definitiv nicht stimmt. die bytefolge ist immer gleich:

0000:  M  4D  077 115 01001101

0001:  _  5F  095 137 01011111
0002:  ?  3F  063 077 00111111
0003:  ?  3F  063 077 00111111

0004:  _  5F  095 137 01011111
0005:  ?  3F  063 077 00111111
0006:  ?  3F  063 077 00111111

0007:  _  5F  095 137 01011111
0008:  ?  3F  063 077 00111111
0009:  ?  3F  063 077 00111111

0010:  _  5F  095 137 01011111
0011:  ?  3F  063 077 00111111
0012:  ?  3F  063 077 00111111

0013:  _  5F  095 137 01011111
0014:  ?  3F  063 077 00111111
0015:  ?  3F  063 077 00111111
...
Gast #1960013
Lesenswert?

ah, ich bin doch ein depp :D

natürlich kann es nicht gehen, wenn man mittels sbr immer nur einzelne 
bits setzt. irgendwann hat man natürlich 0b1111111 und es geht nicht 
weiter. richtig ist natürlich ldi :D
#1960016
Lesenswert?

saftpresse schrieb:
> danke! brachte aber leider keine änderung :(
> wenn man die daten mitschneidet, kann man sehen, dass irgendwas
> definitiv nicht stimmt. die bytefolge ist immer gleich:

Das würde man allerdings an einer Mausschnittstelle erwarten.

Nur: Was wird da eigentlich übertragen


sbr mausbyte1, 0b1000000


Ich denke nicht, dass das das ist was du willst.
sbr bedeutet 'Set Bit In Register'
Ich denke allerdings du wolltest hier  Load Register with value

   ldi  mausbyte1, 0b1000000

sinngemäss auch bei allen anderen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren