Optical Maus Sensor ADNS2610 mit AVR

Gast #782527
Lesenswert?

Hier mal wieder was nettes sinnfreies für den Feierabend ;)

Auslesen der Bilddaten eines ADNS-2610 aus einer
Logitech Optical USB Maus mit AVR. Einmal speichern
als PPM Bilddatei und einmal Ausgabe auf KS108 GLCD.

Siehe readme.txt im Anhang.
Angehängte Dateien:
Gast #1489782
Lesenswert?

der ADNS-2610 kostet 3,20€ + Porto, eine nagelneue Logitech - oder 
Noname Maus kostet ca. 4€, auf dem Flohmarkt oder sonstwo gebraucht ca. 
1€.
Bei einer Maus hat man gleich auch noch ein 5 adriges Kabel, schöne 
IR-LEDs mit IR-Sensoren, Microschalter usw. dabei.
Also wer den 2610 einzelnd neu kauft der hat wohl zuviel Geld....

Logitech Mäuse sind von unten durchsichtig, da kann man sehen ob der 
2610 da drin ist (8 Pins)
#1490432
Lesenswert?

@Olaf:
  Das ist nur ein einfacher Hack. Ich hab einen ADNS-2051 aus einer 
alten Maus an ein AVR-Devboard gehangen und per Bitbanging die Bilddaten 
ausgelesen. Danach hab ich die Daten einfach per RS232 an den PC 
übertragen und mit einem einfachen VB-Programm die Daten in ein Bild 
umgewandelt. Ist relativ langsam, funktioniert aber halbwegs.
Anbei die Projektdateien. Wie gesagt: Ist alles nur ein Hack...

Gruß,
  SIGINT
Angehängte Dateien:
#1490855
Lesenswert?

@Olaf, @SIGINT

man kann den ADNS2610 auch direkt über die SPI-Schnittstelle ansteuern 
(siehe Anhang). Das Assemblerprogramm verwendet die Bezeichnungen von 
Elm Chang für die Register; die Definitionen sind in der include-Datei 
enthalten. Die Dokumentation der Irrungen und Wirrungen auf dem Weg zum 
funktionierenden Code habe ich zur Abschreckung nicht gelöscht ;-).

Das Problem beim ADNS2610 besteht in der bidirektionalen SDIO-Leitung; 
normal wäre je eine separate Leitung für MISO und MOSI. Die Lösung 
besteht darin, beim Auslesen der ADNS-Register den MOSI-Ausgang 
hochohmig, d.h. als Eingang zu schalten.

Vom Einsatz des Chips als Webkamera darf man nicht zuviel erwarten: Die 
Framerate ist ca. 1600 fps, pro Aufnahme also 625us. Für das Auslesen 
eines einzelnen Pixels braucht man ca. 100 us. Für ein komplettes Bild 
braucht man also mindestens 32,4 ms. In dieser Zeit macht der Chip 51 
Aufnahmen. Bewegungen führen deshalb zu unbrauchbaren Bildern.

mare_crisium
Angehängte Dateien:
Gast #1730479
Lesenswert?

Hallo Harald,
du scheinst dich ja ganz gut mit dem Teil beschäftigt zu haben.
Vielleicht kannst du (oder jemand anders natürlich auch) mir 
weiterhelfen.
Ich möchte diesen Sensor auch gerne benutzen.
Nun habe ich aber eine Frage:
1.
In deinem letzte Post schreibst du, dass der Sensor anscheinend immer 
das aktuelle Bild, was er gerade sieht, ausgibt, und daher Bilder bei 
Bewegung nicht zu Gebrauchen sind. Allerdings steht im Datenblatt auf 
Seite 23, letzter Absatz, dass er sich anscheinend immer das aktuelle 
Bild speichert. Oder habe ich das falsch verstanden und er speichert 
immer nur den letzten Pixel?
2.
Wenn ich den Sensor pixelmäßig auslese, arbeitet doch die Wegerfassung 
im Sensor weiter oder? Ich frage deshalb, da ich gerne sowohl den Sensor 
auslesen möchte als auch in regelmäßigen Abständen die Delta_x und 
Delta_y Werte lesen möchte. Wenn die durch das Auslesen des sensors 
verfälscht würden, wäre das schade. Dass natürlich die Delta_x und 
Delta_y keinen Überlauf haben sollten in der Zwischenzeit ist mir klar.

Freue mich über jede Antwort, auch von anderen natürlich.
Danke,
Tueftler
#1730652
Lesenswert?

Tueftler,

@1. Der ADNS2610 speichert immer das ganze aktuelle Bild, weil er das 
für die Auswertung (Vergleich mit dem vorhergehenden Bild) ja braucht. 
Nur gibt's alle 0,6ms (bei 1600 fps) ein neues ;-)! Und, wie Du aus dem 
Datenblatt schon weisst, muss man bei der Abfrage jedes einzelnen Pixels 
0,1ms warten. D.h. nach den ersten, maximal 6, Pixels, liefert der Chip 
die Pixels des nächsten Bildes. Wenn das Bild sich bewegt, dann bilden 
diese Pixels zusammen mit den vorangegangenen kein zusammenhängendes 
Bild mehr. In meinen Versuchen bekam ich dann horizontale bzw. vertikale 
Streifen.

@2. Ob das geht, habe ich nie probiert; dem Datenblatt nach müsste es 
hinhauen. Vergiss' aber nicht, dass Du für's Auslesen der 18x18 Pixels 
mindestens 32ms brauchst (18*18*0,1ms) ;-)! In Wirklichkeit sind's 
natürlich mehr als 32ms, weil ja noch die Zeit für die Übermittlung über 
den SPI-Bus und die interne Verarbeitung dazukommt.

Ciao,

mare_crisium

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