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!
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.
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.
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 :-)
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.
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
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.
saftpresse schrieb:> ich war schneller ;)> aber ja, das war der fehler. leichtsinn...>> aus sbr wird ldi und schon funktionierts, auch ohne schleife. danke!!
Gut zu wissen. Also darf man da ruhig volle Kanne reinröhren.
(So ist mir auch geholfen. Danke)