Hallo zusammen,
ich Suche dringend jemand, der sich schon intensiv mit Maussensoren von
Agilent beschäftigt hat. Genauer gesagt zu dem ADNS6010.
Ich habe den Chip auf meiner Platine verbaut und versuche ihn momentan
anzusprechen.
Ich habe bereits geschafft einzelne Register zu lesen und zu
beschreiben. Mein Problem ist momentan aber das Auslesen der
Bewegungsdaten. Im Motion Register wird ständig das fault-bit gesetzt.
Außerdem ist das MOT-Bit immer auf Low, was ja bedeuten soll, dass
keinerlei Bewegungen erkannt werden.
Hardwareseitig kann ich mir jedoch keinen Fehler vorstellen.
Hallo Flo!
Such doch mal im Sensor-Forum nach 'Maussensor'. Ich hatte das Thema in meiner Diplomarbeit und habe zusammen mit Manf viel darüber diskutiert.
Zu Deinem Fehler: Vorausgesetzt, es liegt kein Hardware-Fehler vor, hast Du jede noch so kleine Kleinigkeit des Datenblatts befolgt? Manchmal liegt es an ganz einfachen Dingen, wie die Kennzeichnung der Datenrichtung im MSB des Adressbytes. Trägst Du dort eine 1 statt einer Null ein (oder umgekehrt), läuft gar nichts und man sieht erst nicht warum. Gerne genommen sind auch Fehler, die auf falsche Takt- sowie Wartezeiten zurückzuführen sind. Beim Motion-Burst muss z.B. nach der Übertragung der Adresse eine Wartezeit von mindestens 75µs eingehalten werden.
Falls es nicht an diesen "einfachen" Dingen lag, schreib bitte nochmal, man wird den Fehler finden.
Hallo Ruppi,
hat mich gefreut ,dass du mir geantwortet hast.
Hab mich grad noch mal zu dem Thema im Forum umgeschaut, aber leider keine Antworten auf meine Fragen gefunden. Deshalb werde ich dir mein Problem nochmal genauer beschreiben.
Ich habe den ADNS6010 aus der LogitechG5 ausgebaut und möchte damit eine Wegmesseinrichtung für einen Roboter aufbauen. Die Wegdaten möchte ich über das SPI mit einem 8051 Mikrocontroller auslesen und auswerten. Da mein µC kein SPI unterstützt, werden die parallelen Daten mittels eines Interface-Chips (TP3465) in das SPI-Protokoll übersetzt. Die Hardware habe ich laut Datenblatt angeschlossen. Mein Schaltplan hab ich dir angehängt.
R1 ist jetzt 1k und T1 ist der originale aus der Maus. Ist R2(RBIN) richtig? Und noch ne blöde Frage: Hat ein Keramikresonator ne Polung? Ich glaub mal nicht, oder? Die Pegel der SPI-Leitungen sind über ein Level Translator angepasst. Sonst müsste es stimmen.
Ich habe bereits geschafft, alle Register zu lesen und zu schreiben. Das bedeutet: SPI muss richtig sein. Meine PROM Daten müssten auch erfolgreich übertragen worden sein. Meine SROM ID ist 0x59. Komischerweise hat diese den gleichen Wert, wenn ich ein paar PROM-Werte abändere. Aus dem PIX-Sum Register hab ich auch schon vernünftige Werte gelesen, die sich je nach Oberfläche ändern. Die Kommunikation verfolge ich dabei immer mit einem Logikanalysator.
Das Problem ist jetzt: Ich lese mein Motion Register in regelmäßigen Abständen aus. Dabei erhalte ich aber für MOT=0--> keine Bewegung erfasst und fault=1 --> Fehler: RBIN- oder XY_Laser Pin ist auf Ground. OVF=0. Wenn ich meine Register mit Motion_Burst abfrage, erhalte ich das gleiche.
Dh. er erkennt keinerlei Bewegungen, arbeitet aber ansonsten normal. Das hat doch bestimmt mit dem FAULT zu tun. Ich kann da aber kein Fehler erkennen. Ich habe auch nicht ganz verstanden, wie diese fault detection genau funktioniert. Wozu dient denn genau RBIN? Er soll angeblich zur Anpassung der Laserleistung dienen. Dafür hab ich doch schon die Register LP_CFG0&LP_CFG1.
Und das mit dem Shutter ist mir auch noch nicht ganz klar.
Ich weiß, ich verlange grad sehr viel von dir. Aber ich habe momentan einfach keine Ahnung, wie ich sonst an Informationen kommen kann. Die Fragen sind einfach zu speziell.
Hallo,
ich habe den ADNS6010 nie programmiert, einige Dinge sind dort anders. Trotzdem mal was grundsätzliches: Ich hätte ein Deiner Stelle gar keinen Interface-Chip verwendet, das habe ich in meiner ersten Anwendung auch nicht gemacht. Ich habe das Protokoll damals "per Hand" programmiert. Des weiteren benötigst Du eingentlich keine Levelshifter, da es sich bei dem Chip um Open-Kollektor Ausgänge handelt. Bei einem 5V Mikrocontroller muss lediglich die eine Eingangsleitung mit 2 Widerständen auf 3V begrenzt werden.
Ach übrigens, Du schreibst, Du hättest einen Schaltplan angehängt, wo is der?!?
Der Keramikresonator hat übrigens keine Polung! Hast Du ihn aus der Logitech ausgebaut?
Noch was: Was genau macht der Interface-Chip?
Hi Ruppi,
was den Interface Chip betrifft hast du natürlich recht. Über SW läuft das auch. Das Problem ist dabei aber, dass dann ein Haufen Portpins draufgehen. Da ich zwei MS und ein Display ansteuern will, würden dann also schon 6 davon draufgehen und das ganze bei einer Übertragungsrate von ca 100kHz. Dazu kommt noch, dass der Prozessor ständig belastet wird. Der Chip wird an den Daten- und Adressbus meines C504 angeschlossen. Dadurch lässt er sich ganz leicht ansteuern. Ich schicke ihm nach der Init. lediglich meine Daten in ein bestimmtes Register und den Rest macht er von selbst. Soweit ich weiß kann ich so Übertragungsraten von bis zu 5MHz realisieren. Momentan bin ich aber nur bei 500kHz. Insgesamt kann ich dann bis zu 4 Slaves anschließen.
Die Levelshifter hätte ich inzwischen auch nicht mehr verbaut. Das Projekt mache ich auch im Rahmen meiner Dipl.Arbeit und da fehlt einem manchmal einfach die Erfahrung. In der 2.Version werde ich mit Sicherheit ein paar Änderungen vornehmen.
Den Resonator wollte ich ursprünglich ausbauen. Hab dann aber doch andere bestellt.
Ich dachte ich hätte den Schaltplan angehängt. Ich werds dann nachholen.
Aber zu meinem eigentlichen Problem: Da ich zwei MS verbaue, hab ich gestern mal MS Nr.2 eingebaut und siehe da -- es geht. Es muss was mit der HW sein. Möglicherweise ist der Laser oder Transistor kaputt. Aber jetzt hab ich ja erst mal einen an dem ich mich austoben kann.
Was mir aber weiterhelfen könnte wäre ein C-Code zur Auswertung der Bewegungsdaten. Hast du da was?
Hallo!
Nun ja, viel Auszuwerten gibt's an den Bewegungsdaten ja nicht... Du erhälst viele kleine Wegänderungen und addierst diese zu einer Gesamtstrecke auf oder berechnest andere Dinge wie die Beschleunigung der Bewegung oder die Bewegungsrichtung, aber mehr nicht. Oder meinst Du das Visuallisieren der Bewegungsdaten mit einer Software?
Diese habe ich damals in Visual Basic geschrieben, nicht in C.
Lesezeichen