Forum: Mikrocontroller und Digitale Elektronik ADNS3080 Steuerung


von Karl F. (fkcm95)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich habe gestern einen ADNS3080 optical Flow Sensor gekauft und wollte 
die dx/dy Werte rauslesen. (siehe Anhang)
Um die Werte auszulesen benutze ich den Mikrocontroller Arduino Uno.

Folgende Pin-Belegung:
1
 
2
Arduino  ADNS3080
3
Pin 13: SCK
4
Pin 12: MOSI
5
Pin 11: MISO
6
Pin 10: SS
7
Pin 9: Reset
8
Pin 3,3V: 3V
9
Pin GND: GND

Wenn der Sensor mit einer Spannung versorgt wird, sollte eine kleine 
Leuchte auf der Platine leuchten. Normalerweise sollte der Sensor 
mittels 5V Betriebsspannung betrieben werden. Doch wenn ich den 5V Pin 
mit meinem Mikrocontroller verbinde, leuchtet die Leuchte nicht. 
Seltsamerweise leuchtet Sie mit 3,3V.

Den Code habe ich aus dem Internet übernommen, um zu gucken ob überhaupt 
der Sensor funktioniert.

https://github.com/Neumi/OpticalFlowA3080ArduinoProcessing/blob/master/ArduinoA3080/ArduinoA3080.ino

Doch irgendwie bekomme ich immer, dass mein Sensor nicht initialisiert 
ist. Das heißt ich habe keine Kommunikation zu dem Sensor. Woran könnte 
das liegen?
Habe den Code jetzt mit einen Mega und Uno versucht. Bei beidem die 
selben Fehler...

von vertauscht (Gast)


Lesenswert?

Wenn das stimmt was du schreibst haste Miso und Mosi vertauscht. Das 
sollte doch aber das erste sein das man prüft?

von Karl F. (fkcm95)


Lesenswert?

Habe mich vertippt, sorry:
1
Arduino  ADNS3080
2
Pin 13: SCK
3
Pin 11: MOSI
4
Pin 12: MISO
5
Pin 10: SS
6
Pin 9: Reset
7
Pin 3,3V: 3V
8
Pin GND: GND

: Bearbeitet durch User
von vertauscht (Gast)


Lesenswert?

Das wäre ja auch zu einfach gewesen...

von Karl F. (fkcm95)


Lesenswert?

Habe die Pin-belegung und installierung der Pins mehrfach kontrolliert, 
jedoch ist der Fehler irgendwo anders. Wie könnte ich bei sowas Schrift 
für schritt vorgehen?

von Daniel V. (voda) Benutzerseite


Angehängte Dateien:

Lesenswert?

Karl F. schrieb:
> Habe die Pin-belegung und installierung der Pins mehrfach kontrolliert,
> jedoch ist der Fehler irgendwo anders. Wie könnte ich bei sowas Schrift
> für schritt vorgehen?

Indem Du das Datenblatt nimmst und Dir die Sensorregister anguckst. Hast 
Du die Schaltplan von Deinem Modul? NPD muss ebenfalls aktiviert werden.


Gruß
Daniel

von Karl F. (fkcm95)


Lesenswert?

Hallo Daniel und vielen Dank für deinen Beitrag.

Den Pin für NPD habe ich im Programm nicht einbezogen. Habe aber auch 
keinen Schaltplan von dem Modul gefunden, vielleicht ist der PIN NPD 
intern verbunden. Kann das sein?

von Daniel V. (voda) Benutzerseite


Lesenswert?

Ja, schau mal auf der Platine und vergleiche das mit dem Pinning im 
Datenblatt. So wie ich das sehe, wird jeder Pin auf der Steckerleiste 
herausgeführt.

Ich denke, Du brauchst die SPI-Leitungen, Reset und NSS. So war das 
zumindest mit dem Nachfolger ADNS3090 wobei der Unterschied nur bei der 
höheren ips des ADNS3090 liegt.

Schau mal hier:
https://github.com/Lauszus/ADNS3080

oder auch sehr interessant:
http://das-lab.vs.eecs.uni-kassel.de/publications/Heumueller2014-Project-OpticalFlow.pdf

Vllt kannst Du beide Links als Basis nehmen.

Gruß
Daniel

: Bearbeitet durch User
von Karl F. (fkcm95)


Lesenswert?

Vielen Dank für die Links.

ich bekomme auch mit dem Code von Github nur die Meldung, dass kein 
SenOr initialisiert wäre.

Kann das sein, dass der Sensor kaputt ist? Ich habe es noch nicht 1x 
betrieben.

von Daniel V. (voda) Benutzerseite


Lesenswert?

Karl F. schrieb:
> ich bekomme auch mit dem Code von Github nur die Meldung, dass kein
> SenOr initialisiert wäre.

Wie ist die genaue Fehlermeldung? Wenn ich in dem Lazarus-Code schaue, 
existieren zwei.

Auszug aus dem Code:
1
#define ADNS3080_PRODUCT_ID 0x00
2
3
uint8_t id = spiRead(ADNS3080_PRODUCT_ID);
4
  if (id == ADNS3080_PRODUCT_ID_VALUE)
5
    Serial.println(F("ADNS-3080 found"));
6
  else {
7
    Serial.print(F("Could not find ADNS-3080: "));
8
    Serial.println(id, HEX);
9
    while (1);
10
}

Hier musst Du im Datenblatt gucken. Die ADNS3080 gibt es von zwei 
Hersteller, PixArt und Avago. Diese sind technisch gleich nur in der 
Product-Id sind diese verschieden.

Die andere Fehlermeldung ist, wenn das Firstpixel nicht gefunden wird.

Wie sieht Deine Verschaltung aus? Ist das nur der reine IC oder hat 
deine gekaufte Lösung noch etwas mehr? Wie sieht die Rückseite aus? Wenn 
Du nur den IC mit herausgeführten Kontakten hast, musst Du die 
Referenzschaltung im Datenblatt gucken, was Du noch so brauchst.

Dein Sensor muss doch auch ein Datenblatt haben. Kleiner Hinweis. Der 
ADNS3080 arbeitet mit 3,3 V.

Gruß
Daniel

: Bearbeitet durch User
von Karl F. (fkcm95)


Angehängte Dateien:

Lesenswert?

Bei mir kommt die Meldung im Seriellrn Monitor: "Could Not find ADNS - 
3080"
Habe im Anhang die Rückseite der Platine geschickt. auf der Rückseite 
sind neben dem ADNS noch weitere zwei kleine Bauteile, die führen aber 
auf den PIN 5V und 3V. Also sind die eher für die Spannungsreglung da.
Was meinst du mit Referenzschaltung? Habe dem Hersteller mal nach dem 
Datenblatt gefragt, glaube aber nicht, das da was kommt. ?

Habe eben aber bemerkt, dass es zwei Verschiedenen Farben von den 
Platinen auf dem Markt gibt. Vielleicht ist dies der Grund.. aber Es 
sollte doch bestimmt eine Möglichkeit geben, den Sensor anzusteuern.

Mein Sensor hat den Wert 0 für ProduktID, wenn ich es mit der Funktuon 
Read Auslese.

: Bearbeitet durch User
von Daniel V. (voda) Benutzerseite


Lesenswert?

Karl F. schrieb:
> Also sind die eher für die Spannungsreglung da.
> Was meinst du mit Referenzschaltung? Habe dem Hersteller mal nach dem
> Datenblatt gefragt, glaube aber nicht, das da was kommt. ?

Das Datenblatt des Sensors welches ich hochgeladen habe, reicht. Lese 
Dir bitte dieses genau durch und mach Dich mit der Funktion des Sensors 
vertraut. Dort sind alle Informationen enthalten.


Gruß
Daniel

: Bearbeitet durch User
von Karl F. (fkcm95)


Lesenswert?

Ich bin in diesem Bereich ziemlich neu, daher würde ich mich auf jeden 
Anhaltspunkt freuen. Wo könnte ich mich einlesen bzw was sollte ich mir 
genau angucken?

von Strubi (Gast)


Lesenswert?

Wenn du mit den 5V I/Os direkt an den ADNS rangehst (ohne level 
shifter), ist die Wahrscheinlichkeit gross, dass du den Chip bereits 
geröstet hast.
Mein Rat: Fang doch nach all den Postings mit was einfacherem an.
Das wird so nix.

von Karl F. (fkcm95)


Lesenswert?

> Hier musst Du im Datenblatt gucken. Die ADNS3080 gibt es von zwei
> Hersteller, PixArt und Avago. Diese sind technisch gleich nur in der
> Product-Id sind diese verschieden.

Was meinst du mit Product-Id unterschiedlich? Habe auf beiden 
Datenblätter gegzckt, die Adresse ist die selbe.

von Daniel V. (voda) Benutzerseite


Lesenswert?

Karl F. schrieb:
> Was meinst du mit Product-Id unterschiedlich? Habe auf beiden
> Datenblätter gegzckt, die Adresse ist die selbe.

Mein Fehler. Bei dem ADNS3090 war der Defaultwert verschieden.

Zur Fehlersuche: Schlaue dir die Referenzschaltung im Datenblatt an und 
anschließend lese das Kapitel Synchronous Serial Port durch. Dort steht 
unter anderem:

The serial port cannot be activated while the chip is in power down mode 
(NPD low) or reset (RESET high). SCLK, MOSI, and NCS may be driven 
directly by a 3.3V output from a micro-controller, or they may be placed 
in an open drain configuration by enabling on-chip pull-up current 
sources. The open drain drive allows the use of a 5V micro-controller 
without any level shifting components.

Bitte mach Dich mit dem Prinzip des optischen Flusses sowie der 
optischen Sensortechnik vertraut, d.h. wie funktioniert der  Sensor, wie 
entsteht letztendlich das Bild (genauer: Helligkeitsunterschiede), wie 
sehen die Rohdaten aus dann, das ist für Dich sehr wichtig, was ist der 
optische Fluss? Dann wirst Du viel leichter verstehen wie gewünschte 
Werte dx/dy zu stande kommen und vor allem, wie der Sensor arbeitet, 
denn genau diese Grundlagen fehlen Dir völlig.

Ein guter Anfang ist Wikipedia:
https://de.wikipedia.org/wiki/Optischer_Fluss
https://de.wikipedia.org/wiki/Active_Pixel_Sensor

Strubi schrieb:
> Mein Rat: Fang doch nach all den Postings mit was einfacherem an.
> Das wird so nix.

Leider bin ich auch dieser Meinung :-(. Ich wüsste jetzt auch gar nicht, 
wo ich anfangen soll außer auf das Datenblatt zu verweisen.

Gruß
Daniel

: Bearbeitet durch User
von Karl F. (fkcm95)


Lesenswert?

Super, danke für die hilfreichen Tipps.
Werde mich heute da dransetzen.

von Karl F. (fkcm95)


Lesenswert?

Egal was ich mache, kann ich keine Kommunikation zum Sensor aufbauen. 
Entweder 255 oder 0 Weerte bekomme ich für meine ID.

Habe auch den PIN NPD einbezogen und in den Setups auf High gesetzt. 
Aber das bringt leider auch nichts.

Kann wirklich der Sensor kaputt sein?

von Patrick Otte (Gast)


Lesenswert?

Hat eigentlich jemand eine Lösung für dieses Problem gefunden? Ich habe 
auch das gleiche Problem, das ich immer nur 0 oder 255 als ID auslesen 
kann. Woran kann es liegen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.