Hi!
Ich hab eine alte Maus gefunden, und würde gerne die darin enthaltenen Gabellichtschranken benutzen.
Die Maus ist eine Logitech 459C.
Ich würde mich freuen wenn einer eine passende Schaltung, zum zählen der Impulse, kennt.
MFG
Rasmus
Druckbare Version
Hi!
Ich hab eine alte Maus gefunden, und würde gerne die darin enthaltenen Gabellichtschranken benutzen.
Die Maus ist eine Logitech 459C.
Ich würde mich freuen wenn einer eine passende Schaltung, zum zählen der Impulse, kennt.
MFG
Rasmus
Mann nimmt nen 74 94er und häng die Gabellichtschranke dran. ab und zu Liest man mit dem µC den Wert des Zählers aus und resettet ihn.
In der Maus-Gabellichtschranke sind zwei Lichtschranken (pro Bewegungsrichtung) einem Gehäuse integriert, die phasenverschobene (180°) Impulse abgeben weil sie etwas versetzt angeordnet sind. Insgesamt also vier Lichtschranken pro Maus.
Um mit einer Maus-Gabellichtschranke nicht nur eine Wegstrecke messen zu können, sondern auch die Bewegungsrichtung erkennen zu können reicht ein Zähler-IC (z.B. 7494) allein nicht aus. Du musst die beiden Impulsreihen gleichzeitig auswerten. Dazu gibt es sog. Quadraturencoder-Chips. Ich glaub' ich hab' irgenwo noch ein paar rumliegen. Der Quadraturencoder hat zwei Eingänge, nämlich die beiden phasenverschobenen Impulsreihen und zwei Ausgänge: ein Richtungssignal und einen Ausgang für die zu zählenden Impulse.
Ich dachte es wird nur die Strecke und nicht die Richtung gebraucht.
Wie heißt den dieser Quadraturencoder-Chips???
Und dieser 74 94er zählt der Automatisch die gesamten Impulse???
Und wie geibt er sie dann aus? seriel?? parallel???
Parallel. Der 7494 ist ein zähler.
Wenn ich die Maus so lasse, müsste ich doch nur das PS2 Signal so umwandeln, das ich es mit einem AVR auswerten kann.
Leider kenne ich keinen passenden IC .
MFG
Rasmus
Dieses IC steckt häufig in Mäusen. In dem Datenblatt ist die Schnittstelle zu den Gabellichtschranken beschrieben und die Codes, die die Maus zum PC schickt bzw. von diesem empfängt.
http://nexus.cs.usfca.edu/~cruse/cs630/em84502.pdf
Oft meint man, die Maus würde nur zum PC senden. Stimmt aber nicht, sie empfängt auch vom PC bestimmte Codes. Blöderweise auch noch über ein- und dieselbe Leitung. Ich glaube, es ist wirklich einfacher, nur die Doppel-Lichtschranke zu verwenden. Ich schau mal, ob ich das 8-polige Encoder-IC noch finde. Die Eingänge kannst du direkt mit der Lichtschranke verbinden und die Ausgänge an einen auf-/abwärts Zähler anschließen. Ich schon mal so was gebaut. Das größte Problem dabei waren übrigens die Spikes, die in der Leistungselektronik von Relais und anderen Störenfrieden erzeugt wurden. Das Zähler-IC (ich glaube es war ein 74..193) hat sie manchmal mitgezählt. :-s Der 74..94 ist übrigens ein Schieberegister und zum zählen von Impulsen nicht geeignet. :-k
und so funktioniert das PS/2 Maus-Protokoll
http://www.enseirb.fr/~nouel/coursvh...ris/souris.pdf
Ich habe das gleiche auch auf englisch, allerdings nur auf Papier. Die Seite, die ich mir vor einiger Zeit ausgedruckt habe existiert inzwischen leider nicht mehr im WWW :cry:
Das ist wirklich sehr kompliziert.
@avatar
Da du es schon mal gebaut hast, könntest du mir nicht den Schaltplan zuschicken?
Ich möchte das ganze zur Positionsbestimmung benutzen.
Meint ihr das Das genau genug ist?
MFG
Rasmus
Die Genauigkeit hängt nicht nur von der Mess-Elektronik ab, sondern in erster Linie von der Mechanik. Um die Messgenauigkeit zu berechnen, musst du einfach die maximal zu messende Wegstrecke durch die Anzahl der Impulse dividieren, die die Gabellichtschranke beim messen dieser Strecke liefern würde.
Ist dir die Genauigkeit zu gering, kannst du versuchen, durch einen anderen mechanischen Aufbau, die Genauigkeit zu erhöhen (Übersetzung mit Zahnrädchen oder ähnlichem) so dass eben mehr Impulse pro Wegstrecke geliefert werden. Der Zähler muss dann so dimensioniert werden, dass er im worst case nicht überläuft. Das geschieht einfach durch Kaskadierung mehrerer Zählstufen.
Hallo "Gast" von gestern 12:35 Uhr:
Hier die Antwort wegen deiner Anfrage zu dem Encoder-Chip.
Er heißt LS7084 Datenblatt: http://www.lsicsi.com/pdfs/LS7083_84.pdf
An den Eingängen vom LS7084 (zweite Abb.von oben) Pin 4 und 5 schließst du die beiden Ausgänge von deiner Gabellichtschranke an. Die Ausgänge vom LS7084 kannst du entweder direkt mit deinem µC verbinden (wobei ich Pin8 an einen interruptfähigen Eingang anschließen würde) oder du gibst die beiden Ausgangssignale auf einen Zählerbausten (74190 oder 74191).
LS7084(8) mit 74190(14) verbinden
LS7084(7) mit 74190(5) verbinden
Die Zähler-IC's 74190 und 74191 sind kaskadierbar
Datenblatt: http://focus.ti.com/lit/ds/symlink/cd74hct191.pdf
Es soll auch schon Leute gegeben haben, die versucht haben, die beiden Ausgänge der Gabellichtschranke A und B (Signalform s. Datenblatt LS7084) einfach direkt mit dem µP zu verbinden. Das geht natürlich auch. Die Richtungserkennung und das auf- und abzählen kannst du auch per Software realisieren. Gerade die Richtungserkennung ist ein bisschen knifflig. Da schleicht sich leicht der eine oder andere Bug ein. Bei hohen Fahrgeschwindigkeiten und womöglich einem langsamen Prozessor kommt man rasch an die Grenzen. Da ist eine Hardwarelösung mit Encoder- und Zähler-IC die bessere Lösung und der µP hat den Kopf frei für wichtigeres.
--------------------------------------------------------------------------------
Wie heißt den dieser Quadraturencoder-Chips???
Und dieser 74 94er zählt der Automatisch die gesamten Impulse???
Und wie geibt er sie dann aus? seriel?? parallel???
also nochmal:
Der Encoder-Chip heißt: LS7084
Datenblatt: http://www.lsicsi.com/pdfs/LS7083_84.pdf
Wenn du an diesen Encoder-Chip einen 74190 oder 74191 anschließst kannst
du richtungsabhängig vor- und rückwärts zählen, je nach Bewegungsrichtung
durch die Gabellichtschranke.
Wenn die Bewegungsrichtung nicht von Interesse ist, kannst du dir den
Encoder-Chip sparen und brauchst nur eine der beiden Empfangsdioden von
der (Maus-)Gabellichtschranke an
den Eingang vom Zähler (74190 oder 74191) anzuschließen.
Der 74190 zählt von 0 bis 9 und der 74191 von 0 bis F (=15)
Beide Zähler haben parallele Ausgänge und sind kaskadierbar
danke
@avatar
Danke nochmal!
Das System ist sehr einfach.
Doch ich kann mir vorstellen das die Position nach einigen Meter stark von der wahrhaftigen Position abweicht.
Was meint ihr?
MFG
Rasmus
Als Anmerkung noch zu Anzahl der Impulse und Richtung:
Die 2 Lichtschranken werden nicht um 180°, sondern um 90° versetzt sein.
Dann hat bei der Flanke der einen die andere immer den entsprechenden Zustand up oder down und ein 4516 kann mit den Signalen clock und up/down beschaltet werden. Das wäre die elementare Lösung.
4510 ist ähnlicher Zähler nur BCD
http://www.doctronics.co.uk/4510.htm
Sorry, hast vollkommen Recht. Es sind natürlich 90° und nicht 180. Wenn ein Fensterchen von der Codierscheibe durch die Lichtschranke läuft, entstehen vier Schaltflanken und zwar zwei positive und zwei Negative. Wenn du den Decoder-Chip im "x4-Mode" betreibst, dann dann erzeugt er aus jeder der vier Schaltflanken einen Zählimpuls, also vier Zählimpulse pro Fenster im Mausrädchen. Da kann man die Position schon sehr genau erfassen.
Wenn trotzdem nach einigen Metern Abweichungen entstehen, dann wird es sicherlich nicht an der Elektronik liegen, eher an der Mechanik. Wenn du die Bewegung z.B. mit der Mauskugel erfassen willst, kann schon mal was rutschen oder so. Außerdem hat die Kugel relativ viel Spiel.
@RobotXY: Vielleicht solltest du mal überlegen, das Mausrädchen über einen Seilzug mit Umlenkrolle oder mit Zahnrädchen anzutreiben. Keine Ahnung wie das Maschinchen aussieht, das du dir da baust.
Mein Bot fährt später mit zwei RB35 Motoren.
Die MC Elektronik und die Motosteuerung ist schon fertig.
In den nächsten Tagen werde ich das Gestell bauen.
Wenn die Reifen rutschen, wird Position aber langsam immer ungenauer.
MFG
Rasmus
Ja genau. Ich nehme an, dass du die Codierscheibe (das Rädchen aus der Maus) auf der Achse befestigen willst oder? Eine weitere Fehlerquelle, die zu Messfehlern bei der Positionsbestimmung führen können, sind Spikes, die z.B. von den Motoren kommen können und von der Zählschaltung ebenfalls mitgezählt werden. Insbesondere wenn du hochohmige und damit empfindliche CMOS-IC's verwendest. Das hat mich bei meinem Projekt fast zur Verzweiflung gebracht.
Die Mäuse neuerer Bauart haben keine beweglichen Teile mehr sondern einen CCD-Chip mit dem sie den Untergrund optisch abtasten. Mit so einem Teil könntest Fehlmessungen wegen durchdrehender Räder vermeiden.
@Avatar
Wie genau muss die Optische Maus sein?
Wo liegen in dem System(Optische Maus) eventuelle Fehlerquellen?
Dann brauch man doch auch einen IC, der das Signal der Maus Umwandelt, oder?
MFG
Rasmus
Schau mal:
http://home.tele2.it/marthal/C-Control/
_________________________________
http://www.free-webspace.biz/update/
@robotxy: Ein solches IC gibt es tatsächlich
- > http://cp.literature.agilent.com/lit...988-8477EN.pdf
Als mögliche Fehlerquelle könnte ich mir bei dieser Lösung in erster Linie Verschmutzung der Linse vorstellen wenn du über dreckigen Untergrund fährst.
@RCO: Diese Software, die die Signale der Doppellichtschranke direkt auswertet (ohne vorgeschalten Decoder) scheint mir nicht ganz ausgereift. Sie funktioniert nur dann, wenn die Bewegungsrichtung nicht oft wechselt. Wenn du am Rädchen nur leicht hin- und her wackelst und zwar so, dass diejenige Lichtschranke, die als hier zur Richtungserkennung dienen soll nicht schaltet sondern immer nur die andere, dann wird das Programm eine fortwährende Bewegung in die selbe Richtung registrieren obwohl in Wirklichkeit immer abwechselnd nur ein Schritt vor und zurück gemacht wird, also ein "auf der Stelle treten".
Kann sein, so genau hab ich mir das nicht angeguckt
Hallo
Weiß jemand, wo man diesen LS7084 bekommt.
Ich finde ihn nirgends
Hallo Matthias!
Es gibt einen Trick wie man das 90°-Signal der Maus decodieren kann in der Richtung. Das ist bereits mit einem einfachen Vorwärts-Rückwärts-Binärzähler möglich (z.B. SN74LS192 / SN74LS193). Das A-Signal legt man an den Clock-Eingang der ja flankengetriggert ist und das B-Signal an den Richtungseingang. Die kleinen Zählerbausteine haben nur 4 Bits (also 0 bis 15). Die kann man aber einfach kaskadieren auf 8 Bits (0-255) und so weiter. Die Ausgänge des Zählers kann man jetzt einfach abfragen und auswerten. Bei einer Drehung in die eine Richtung zählt es jetzt aufwärts und bei einer Drehung in die andere Richtung wieder abwärts.
Um die Lichtschranken auszuwerten braucht man einen Widerstand in Reihe als Spannungsteiler. Das sind meist 1k gegen Masse und danach einen Schmitt-Trigger Baustein in Form eines Inverters (z.B. SN74LS14).
Grüsse Wolfgang
@BlueNature:
Das funktioniert aber mehr schlecht als recht !
Wenn das Taktrad an einer Position hin und her wackelt, und zwar so, dass das B-Signal (was du als Richtungssignal verwendest) sich nicht ändert, das A-Signal (in deiner Schaltung: Clock) aber dauernd an und aus geht, dann hast du eine Situation, dass der Zähler ständig in eine Richtung zählt obwohl in Wirklichkeit das Taktrad nur hin und her vibriert.
Deine Methode funktioniert zwar prinzipiell, ist aber höchst ungenau. Ohne einen sauber arbeitenden Quadraturencoder, der auch diese Sonderfälle berücksichtigt, wirst du keine präzisen Messungen machen können.
Viele Grüße
Hallo zusammen!
Also ich finde die Idee mit der optischen Maus richtig gut.
Ich denke mal, dass die Genauigkeit für die meisten An-
wendungen ausreichen dürfte.
Die Frage ist nur, wie nah die Linse am Boden sein muss.
Denn bei der Maus ist die Linse ja nur 1-2 mm über dem
Tisch. - Beim Roboter dürfte das problematisch werden...
Hat jemand da schon Erfahrungen gesammelt oder ein
paar gute Ideen?
Viele Grüße,
Simon
Genau das hab ich bei mir gemacht. Eine PS/2-Maus auseinandergenommen, einen Schaltplan gezeichnet, die Elektronik umgesetzt auf eine eigene Platine und das PS/2-Protokoll nachbebildet mit einem Microcontroller um die aktuelle Position der beiden Mausachsen auszulesen. Das geht bestens mit den orginalen Lichtschrankenelementen und einem eigenen Geberrad für die 90°-Impulse.Zitat:
Zitat von avatar
Grüsse Wolfgang
moin moin,
Im Moment ärgere ich mich mit demselben Problem rum:
Wie bekomme ich die PS2-Maus vom AVR eingelesen.
Gegenüber der Variante mit zusätzlicher Zählelektronik, die hier diskutiert wurde, hat das in meinen Augen den Vorteil, dass es billiger ist und weniger Leitungen des AVR benutzt.
Eigentlich ist das Protokoll nicht soooo kompliziert, aber ich komme zZt nicht mal soweit Clock-Signale empfangen zu können. Ich habe den Verdacht, dass es Probleme mit den Signallevel bzw. mit den Pullup-Widerständen gibt. Leider habe ich kein Oszi um das zu prüfen...
Hat da jemand Erfahrungen und / oder C-Quellcodes ?
ciao ... Bernd
Hallo BlueNature!
Ich halte deine Variante eigentlich ehrlich gesagt auch für einfacher.
Prinzipiell dürfte es doch reichen, die CLK und die DATA Leitung des
ICs mit meinem Microcontroller zu verbinden, oder?
Kannst du vielleicht noch mal kurz erklären (evtl. mit einem kurzen
Codebeispiel) wie die prinzipielle Kommunikation mit dem IC dann
funktioniert? Das ist mir nämlich auch noch nicht wirklich klar...
Ciao,
Simon
Das geht gut. Brauchst nur einen Controller der seinen digitalen Port umschalten kann als In oder Out. Die Pull-Up's muss man ausprobieren. Die orginalen waren zu niederohnig auf der PS/2-Maus. Bei mir sind es nun 6k8.Zitat:
Zitat von nestler
Schau mal hier rein. Da steht so ziemlich genau alles auch mit den realen Protokollen am PC. Damit kam ich gut klar und enthält alle Daten die du soweit brauchst.Zitat:
Kannst du vielleicht noch mal kurz erklären (evtl. mit einem kurzen
Codebeispiel) wie die prinzipielle Kommunikation mit dem IC dann
funktioniert? Das ist mir nämlich auch noch nicht wirklich klar...
http://govschl.ndsu.nodak.edu/~achap...use/mouse.html
Und noch was. Die Position ist relativ!
Grüsse Wolfgang
Tach BlueNature,
verstehe ich das richtig, dass du eine Maus inklusive PS2-Protokoll nachgebildet hast, um das nun wieder an einen µC anzuschließen, der dann auch das PS2 Protokoll können muss. Scheint mir etwas .. hmm .. merkwürdig. Ich muss da was verpasst haben.
Gibt es denn jemand, der schon mal wirklich eine PS2 -Maus an einen AVR angeschlossen hat?
Gibt es irgendwo die genauen elektrischen Specs für PS2, also zulässige Hi- / Low-Level, erfoderliche Ströme, Pull-Up-Werte usw.? Am PS funktioniert die Maus schließlich, also muss es auch irgendwie gehen ...
Ciao ... Bernd
Es geht auch. Ich habe keine neue Maus entwickelt. Ich habe geschrieben Maus zerlegt, auf neue Platine gelötet (spart Platz weil kleiner) und die Data und Clock zu eigenem Controller sowie die acht (orginalen aus der Maus entnommenen) IR-Elenente an die eigenen Lochscheiben des Motorantriebs.Zitat:
Zitat von bhm
Dann ist nach dem Löten nur noch Protokoll fällig im eigenen Controller und das steht bestens im Link beschrieben ^^ ;)
Zudem habe ich das PS/2-Protokoll mit einer üblichen C-Control ausgelesen bekommen miteigenem Assembler-Programm. Geht also auch mit einer "lahmen Gurke" unter den Controllern ...
Grüsse Wolfgang
Noch meine neue "Mausplatine" die ich nicht neu entwickelt habe sondern umgetopft nach einem selbst gezeichneten Schaltplan meiner als Basis verwendeten Maus:
Hallo Leute,
Ich versuche auch gerade eine (fertig gekaufte) Maus an nen AVR anzuschließen. Daten kommen raus (schick ich testweise per USART an den PC), aber sinnvoll sind sie bis jetzt nicht... wenn ich sie nach rechts oder unten bewege kommt ein byte 0x00 raus, in die anderen richtungen - so wies gehört - 3 bytes. naja, mein prog ist auch nicht ganz ausgereift, werd ich wohl noch daran arbeiten müssen. Ich verwende übrigens auch die Infos von http://govschl.ndsu.nodak.edu/~achap...use/mouse.html
Das ist die einzige brauchbare Seite die ich finden konnte.
Die Maus nahe am Boden anzubringen ist doch eigentlich ziemlich einfach:
Ausschnitt in den Bot-Boden dass die Maus reinpasst, oben n Loch ins Mausgehäuse und etwas höher (vielleicht am Deckel des Bot) festschrauben. Auf ebenen Untergründen dürfte das reichen, ansonsten muss die Mausbefestigung gefedert sein, ohne dass sie in x/y-richtung zu viel Spielraum bekommt.
mfG
cht
Hallo cht!
Wegen der Befestigung hatte ich mir auch schon etwas in die Richtung
überlegt. Da ich unter dem Boden des Bots noch etwas Spiel habe, hoffe
ich, mir das Zerstören meines schönen Bodens ersparen zu können.
Das Problem ist das mit den ebenen Untergründen. Von diesen kann ich
nicht unbedingt ausgehen. - Wir zwar kein Offroad-Bot, aber ein paar
Türschwellen sollten schon zu meistern sein!
Denn ein weiteres Problem ist - wie du schon ansprichst, das Problem
mit dem Spiel in x/y-Richtung...
Wie ich das Ganze also sinnvoll federn kann, ist mir leider noch ganz
und gar nicht klar :-(
Ciao,
Simon
Hab mir grad ne Lösung dafür überlegt: Man könnte einfach nur das X-Spiel verringern (ganz null geht ja nicht) und die Z-Position der Schwerkraft überlassen (sofern dein Bot nur auf der Erde arbeiten soll geht das wohl in Ordnung). Vielleicht mit einer Art ausklappbarem Träger, hab mal ne Skizze gemacht (powered by Synaptics Touchpad - nicht schön aber lesbar ;-) ). Die Maus würde dann wenns nach oben geht sich etwas nach hinten bewegen, aber das gleicht sich ja nachher wieder aus wenn der Abstand wieder größer wird.
Außerdem funktioniert mein Maus-Interface-Code jetzt: Sie sendet immer brav 3 bytes, die mein mega16 ans USART weitergibt. Assembler-Code gibts auf Wunsch, verstehen müsst ihr ihn selbst (hab ich noch nicht ganz geschafft...)
mfG
cht
Hi BlueNature,
_jetzt_ hab ich es endlich verstanden ;-)
Das umbauen geht leider bei mir nicht, weil es eine Super-Billigmaus für 2? war. Da ist der
Chip direkt auf die Platine geklebt und vergossen. Das ist aber auch eher ein kleineres Problem.
Kann mal jemand einen funktionierenden Sourcecode posten ?
Zum Thema Befestigung: Ich hab die Maus zerlegt, die Encoderscheiben mit Achse rausgenommen, ein Zahnrad draufgesetzt, den Getriebemotor aufgesägt, und daran den Encoder angeschlossen. Vielleicht poste ich morgen ein paar Bilder, wenn's jemand interessiert.
ciao ... Bernd
moin moin,Zitat:
Zitat von cht
den Code würde ich wirklich gerne sehen. Vieleicht verstehe ich ihn auch nicht, aber es wäre schon gut wenn ich _sehen_ würde, dass es auch hier klappt.
ciao .. bernd
ok hier kommt er. Kommentare sind leider nicht sehr ausführlich, aber ich denke es geht. Du brauchst nur noch ein Verbindungskabel zum RS232 Port deines PCs und (wenn noch nicht auf dem Board) einen MAX232. Schaltung und Pinbelegung des Kabels gibts im AVR-Tut auf www.mikrocontroller.net
Viel Spaß mit dem Code!
cht