PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Initialisierung eines ADNS 9500



ArchAngel242
09.12.2009, 15:29
Hi zusammen,
hat von euch schon mal einer einen ADNS 9500 versucht zu initialisieren, da ich so langsam mit meinem Latein am Ende bin...
](*,)
Hier erstmal ein paar Infos:
Programmiere mit AVR Studio4.18

http://www.avagotech.com/pages/en/navigation_interface_devices/navigation_sensors/laserstream/adns-9500/


hier mal ein Ausschnitt aus meinem Code:




#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "dataflash.h"
#include "ADNS.h"
#include "ADNS_ROM.h"

#include "main.h"






//************************************************** *********************************
void ADNS_Init(void)
//************************************************** *********************************
{
//PORTB = (1<<PB7)|(1<<PB6)|(1<<PB4)|(1<<PB0);
// DDRB = (1<<PB0);
//Power UP
sbiBF(PORTB, PB0);
Delay1us(5);
cbiBF(PORTB, PB0);


Delay1ms(250);
Delay1ms(250);


ADNSWrite(ADNS_POWER_UP_RESET, 0x5A);
Delay1ms(50);
DF_SPI_RW(0x02);

DF_SPI_RW(0x03);

DF_SPI_RW(0x04);

DF_SPI_RW(0x05);

DF_SPI_RW(0x06);

SROM_Download();

sbiBF(PORTB, PB0);
Delay1us (5);
cbiBF(PORTB, PB0);

ADNSWrite(0x20, 0x04);
Delay1ms(150);
//Configuration des Sensors
// ADNSWrite(ADNS_CONFIG_II ,FIXED_FR); //feste Frame Rate
// Delay1us(120);

//Frame Rate 11.750fps
// ADNSWrite(0x1A, 0xC0); //Lower
// Delay1us(120);
// ADNSWrite(0x1B, 0x5D); //Upper
// Delay1us(120);

sbiBF(PORTB, PB0);

}


//************************************************** **********void SROM_Download(void)
//************************************************** **********
{
char data;
unsigned int i; //uint16_t i;
i=0;
sbiBF(PORTB, PB0);
// Delay1us(5);
cbiBF(PORTB, PB0);
ADNSWrite(ADNS_CONFIG_IV , SROM_SIZE); //= (1 << SROM_SIZE); //3k SROM download
// Delay1us(120);
ADNSWrite(ADNS_SROM_ENABLE, 0x1D); //SROM_ENABLE for initializing
// Delay1us(120);

sbiBF(PORTB, PB0);
Delay1us(5);
cbiBF(PORTB, PB0);

ADNSWrite(ADNS_SROM_ENABLE, 0x18); //Start SROM downloading
// Delay1us(120);

sbiBF(PORTB, PB0);
Delay1us(5);
cbiBF(PORTB, PB0);

DF_SPI_RW(0x62); //Adress of ADNS_LOAD_BURST
Delay1us(15);


for (i=0; i<3070; i++) //3070 Größe des SROM_Files
{
data = pgm_read_byte(&ADNS_Rom[i]); //SROM File aus Flash lesen
DF_SPI_RW(data); //in Motion Burst Register schreiben
Delay1us(15);
}

sbiBF(PORTB, PB0);
Delay1us(5);
cbiBF(PORTB, PB0);
while (!ADNS_SROM_ID) //Warte bis Rev.Nummer vollständig,
{ //dann ist SROM download beendet
asm volatile ("nop"::);
}

}


//************************************************** **********unsigned char ADNSRead(unsigned char adr)
//************************************************** **********
{
unsigned char temp;

DF_SPI_RW(adr);
Delay1us(120);

temp=DF_SPI_RW(0x00);
Delay1us(120);
// sbiBF(PORTB,PB0);
return temp;
}


//************************************************** **********
void ADNSWrite(unsigned char adr, unsigned char data)
//************************************************** **********
{
DF_SPI_RW(adr|0x80); //maskieren mit 0x80 da MSB = 1 sein muss
Delay1us(100); //warten zwischen Adress und Data
DF_SPI_RW(data);
Delay1us(120);

}


//************************************************** **********
void Delay1ms(unsigned int time)
//************************************************** **********
{
while(time--) _delay_ms(1);
}


//************************************************** **********
void Delay1us(unsigned int time)
//************************************************** **********

{
while(time--) _delay_us(1);
}


Ach ja in ADNS_ROM.h liegt das ROM File welches ich für den AVR Studio angepasst habe und in dataflash steht eine Funktion zum Übertragen der Daten mittels SPI Schnittstelle.
Die einzelnen Ports habre ich schon in main eingestellt!

Weiß leider nich wo mein Fehler liegt.
Bin für jeden Hinweis dankbar!!!!

mare_crisium
10.12.2009, 23:48
ArchAngel,

leider kenne ich mich nur mit dem ADNS 2610 aus, aber vielleicht solltest Du folgendes mal ausprobieren: Stell' doch während des Auslesens des Registerinhalts, also nach den 120us Wartezeit, den MOSI-Ausgang vorübergehend auf Eingang um. Der Chip bekommt dann nur noch den Takt (SCLK) aber keine Sendedaten.

Den Versuch halte ich für lohnend, weil man nicht genau weiss, ob und wie der ADNS 9500 die 0x00 interpretiert, die Du ihm in Deinem Programm beim Auslesen sendest. Eigentlich müsste er sie ignorieren - er braucht ja nur den Takt, um seine Daten über MISO 'rauszuschieben. Aber man weiss ja nie ;-) ...

Ciao,

mare_crisium

nezaya
17.12.2009, 14:10
Hallo ArchAngel242,

hast du inzwischen den Sensor auslesen können?

Ich habe hier auch das Problem, dass ich einen ADNS9500 nicht auslesen kann. Es kommen einfach keine Daten aus dem SPI MOSI raus. Die Ansteuerung (Software auf ARM7 und Hardwareverbindungen) habe ich inzwischen mehrfach geprüft. Mit einem ADNS6530 funktioniert auch alles problemlos, nur der 9500 weigert sich Daten auszugeben.

Hat jemand eine Idee?

Gruß nezaya

ArchAngel242
17.12.2009, 14:33
Hi nezaya,
ne habe es noch nicht ganz hin bekommen. Nähere mich aber so langsam dem Problem. :-k
Schau doch erstmal ob du den ADNS 9500 richtig initialisierst. Ich hatte da schon das Problem mit dem Download des SROM Files.
Ganz wichtig scheinen auch die einzelnen Befehls und Zeitabfolgen für die einzelnen Modies, wie z.B. Frame Capture und Motion Burst.
Ach ja und nicht zu vergessen die NCS Leitung!

nezaya
17.12.2009, 15:01
Also die Initialisierung mache ich wie im Datenblatt beschrieben.

1. Spannung an (3,3V)
2. SPI Port Reset mit high auf NCS
3. 0x5a in PowerUpRegister (0x3a)
4. >50 ms warten
5. Register 0x02 bis 0x06 lesen.

Allerdings kommt beim Lesen der Register schon keine brauchbare Ausgabe raus. Ein testweises Auslesen der Register ProductID und RevisionID liefert ebanfalls keine brauchbaren Werte. Und das sollte ja sogar ohne Initialisierung klappen. Im Datenblatt ist ja extra vermerkt, dass die Register zum testen der SPI Verbindung genutzt werden können. Da die SPI Kommunikation nicht funktioniert habe ich auch noch nicht versucht den (optionalen) Firmwareupload zu starten. Mit einem ADNS-6530 Sensor der zuvor verwendet wurde klappt die SPI Übertragung, irgendwo schieint da wohl noch ein Unterschied zu sein, den ich noch nicht gefunden habe.

ArchAngel242
17.12.2009, 15:22
Also zu 2.SPI Port Reset :
Ich lösche immer dieses Bit da es ja low activ ist!
Der ADNS ist bei mir als Slave und generiert auch somit kein Takt Signal.

Ich verstehe nur nich weswegen du nach Schritt 5 aufhörst, denn laut meinem Datenblatt folgen noch 2 Schritte.

Soweit ich das verstanden hab sollte man immer nach einem Power Up die Initialisierung durch führen.
Das SRom File am besten in einem Array abspeichen um so es einfach übertragen zu können....

nezaya
17.12.2009, 16:48
>Ich verstehe nur nich weswegen du nach Schritt 5 aufhörst, denn laut meinem Datenblatt folgen noch 2 Schritte.

Naja ich kann auch alle Schritte machen, ändert aber nichts. Nötig ist es auch nicht, da der SROM-Download optional ist. Ohne Download läuft das Ding mit der vorgebrannten internen Firmware. Selbst nach kompletter Initialisierung gibt es immer noch kein vernünftiges Signal auf dem MISO. Dabei sollte das prinzipiell auch ganz uninitialisiert schon per SPI antworten. Ohne Signal auf dem MISO kann ich auch nicht prüfen ob der Download korrekt war. Entweder sind alle meine Chips kaput, oder ich habe irgendwo nen Denkfehler. Was mich halt irritiert ist, dass ich die ADNS6530 problemlos ansteuern kann, aber der ADNS9500 nicht kommuniziert. Der ADNS6530 hat zwar kürzere Timingzeiten, aber die habe ich extra für den ADNS9500 verlängert und inzwischen sogar mit ausreichend Reserve versehen.

Könntest du, wenn deine Ansteuerung funktioniert, mal den Code zur Verfügung stellen. Dann könnte ich mal schnell einen AVR nehmen und nachschauen, ob es am Code oder an den Chips liegt.

Vielleicht bekomme ich ja auch noch einen Lösungsvorschlag vom Avago Support.

nezaya
05.01.2010, 22:25
Hallo ArchAngel242,

ich muss noch mal nachfragen. Hast du es inzwischen geschafft, den ADNS-9500 Sensor anzusteuern? Ich kann zwar inzwischen Register korrekt auslesen und auch Schreiben, aber irgendwie funktioniert der Sensor immer noch nicht. Upload der Firmware ist OK. Im SROM_ID Register kann ich zumindest die 145 (0x91) auslesen, was auch die ID der hochgeladenen Firmware ist.

Nach dem Upload setze ich wie gefordert das "Laser_Forced_Disable bit" auf 0. Allerdings ist die Ausgabe des Motion Registers 0x00. Das LP_Valid Bit zeigt also an, dass der Laser aufgrund falscher Registereinstellungen deaktiviert ist. Dummerweise hab ich jetzt keine Ahnung wo ich das beheben kann, da es ja keine Register gibt, in der ich die "Laser Power register" auf "complementary values" setzen kann. Das einzige Register das ich im Datenblatt des ADNS9500 im Bezug auf den Laser finden kann ist LASER_CTRL0. Das ist allerdings nur zum Aktivieren des Lasers nötig und wird ja auch korrekt geschrieben und hat den Wert 0x00.

Hättest du, oder irgendwer anders, vielleicht eine Idee?

Gruß nezaya

bf
08.02.2010, 20:44
Beim auslesen des Sensors ignoriert dieser den Pegel der MOSI-Leitung.

Was das löschen des FORCE-DISABLE-Bits in LASER-PWR-CTRL0 angeht: da kann man nicht einfach 0 reinschreiben, da das bit 7 gesetzt bleiben muß. Das steht nur leider nicht so im Datenblatt. Zum einschalten des Lasers also 0x80 ins Register schreiben.

Nach dem SROM-Download sollte man zunächst mit dem CRC-Test überprüfen, ob alles korrekt angekommen ist. Am bit 6 im Observation-Register kann man auch sehen, ob der Sensor den Code im SROM ausführt.

Um aber die Bewegungsdaten aus dem Sensor zu bekommen, muß man vorher noch ein paar andere Register beschreiben. Das steht auch nicht so im Datenblatt.
Ab besten mal das ausprobieren:
-bis zum SROM-Download wie im Datenblatt
-0x15 auf 0x13 schreiben (CRC-Test)
-mindestens 10ms warten
-0x26 und 0x25 auslesen (müßte 0xBEEF drin stehen)
-0x2A (SROM-ID) aulesen (nach der neuesten Version 0x91)
-0x04 auf 0x10 (CONFIGURATION-II) schreiben
-0x63 auf 0x22 schreiben
-0x9C auf 0x23 schreiben
-0x40 auf 0x21 schreiben (dannach steht strotzdem wieder 0x42 im Register)
-0x80 auf 0x20 schreiben (Laser einschalten)
-MOTION-register lesen (müßte 0x20 drin stehen)
-0x55 auf 0x0F schreiben
-0x55 auf 0x2F schreiben (Auflösung setzen)
-gewünschten Wert in LIFT-DETECTION-TRUST schreiben
-0x00 auf 0x11 schreiben

nezaya
09.02.2010, 10:01
Hallo bf,

bei mir sind standardmäßig (direkt nach dem Start des Sensors) alle Bits im LASER-PWR-CTRL0 Register Null. Damit ist es im Moment egal, ob ich das Register direkt 0x00 schreibe oder nur bit-0 auf Null setze. Ich habe aber inzwischen korrekterweise letztgenannte Variante implementiert. Jetzt wird das Register ausgelesen und Bit-0 des gelesenen Wertes zu Null gesetzt und dann wieder zurückgeschrieben. Das hat auch der Avago Support so empfohlen. Allerdings ist 0x00 wohl nicht der wirklich zu erwartende Startwert des LASER-PWR-CTRL0 Register. Du schreibst ja auch von 0x80. Ich denke der Wert hängt wohl auch von der Versorgungsspannung ab, weshalb es keinen Sinn macht da einen festen Wert reinzuschreiben. Außerdem resetet sich das Register bei jedem Auslesen des Motion-Registers wieder zum Defaultwert (bei mir 0x00), unabhängig was ich zuvor reingeschrieben habe. Mal sehen was der Support von Avago da noch dazu sagt.

Ich werde aber deine Vorschläge zur erweiterten Startup-Sequenz mal ausprobieren.

ArchAngel242
09.02.2010, 10:35
Hallo,
bin seit langem mal wieder am ADNS 9500 dran.
Leider habe ich es immer noch nicht geschafft den SROM-File richtig zu übertragen.
Weis aber leider nicht wo mein Fehler liegt.
Habe diesen in ein unsigned char Array gelegt und die Werte als hex gekennzeichnet.
Nur wenn ich jetzt danach den CRC Test durchführe bekomme ich nur den Rest Wert geliefert.
Habe jetzt auch schon öfters Wartezeiten eingefügt und mit einenm Oszi überprüft.

nezaya
09.02.2010, 13:59
Hallo ArchAngel242

Was steht im Register SROM_ID nach dem Upload?

Wie machst du den Firmwareupload? Nach folgendem Schema sollte der Firmwareupload funktionieren.

Firmwaredaten irgendwie abspeichern, z.B. direct im Programmcode als
const unsigned char firmware[3070] = {0x03, ..., 0xbb};

Upload der Firmware vorbereiten
REG_CONFIGURATION_IV mit 0x02 beschreiben
REG_SROM_ENABLE mit 0x1d beschreiben
1 Frame warten
REG_SROM_ENABLE mit 0x18 beschreiben

Jetzt wird es etwas trickreich, da jetzt nicht mehr direkt in ein Register geschrieben wird, sondern ein Schreibzugriff im Burst Mode erfolgt. Deshalb muss man zuerst einen Schreibbefehl mit Adresse des REG_SROM_LOAD_BURST per SPI senden. Also
(0x80 | Adresse von REG_SROM_LOAD_BURST) an den Sensor übertragen. Damit ist der Schreibzugriff auf den Firmwarespeicher eröffnet.
Anschließend müssen nur noch, ohne weitere Adressierung die einzelnen Bytes der Firmware gesendet werden. "for (i = 0; i < 3070; i++) sende firmware[i]".

Vielleicht hilft das dir weiter

ArchAngel242
09.02.2010, 14:57
Hi nezaya,
danke für die schnelle Antwort.
Habe es so gemacht wie du es geschrieben hattest, nur das ich mein Array firmware als const static unsigned char PROGMEM deklariert habe, um es so in den Flash zu schreiben, da ich sonst beim ATMEGA 169 nicht genug Speicher zur Verfügung habe.
Danke, habe mein Fehler gefunden.Hatte vergessen die Adresse von REG_SROM_LOAD_BURST mit 0x80 zu verodern.
Jetzt bekomme ich auch 0x91 als SROM_ID zurück.

ArchAngel242
10.02.2010, 16:38
Naja ich glaube mit meiner Antwort war ich zu voreilig.
Irgendwie liest er nur die richtige SROM_ID bei der 1. Initialisierung aus.
Nach einem Frame Capture schreibt er immer 0x00 rein.
Und das obwohl, wie in der Beschreibung ein SROM download und Reset durchgeführt wird. :-k

kalu
13.04.2010, 13:56
Hi

Ich arbeite momentan auch am ADNS 9500 und bei mir hat sich folgendes Problem eingeschlichen wobei mir hier keine Lösung einfällt.


Und zwar versuche ich den Sensor zu initialisieren

diese sieht vereinfacht so aus

adns9500_set_register(POWER_UP_RESET,0x5A,sens);
adns9500_set_register(OBSERVATION,0x00,sens);
adns9500_motion_burst_read()
adns9500_promdl()
adns9500_set_register(MOTION,0x00,sens);
adns9500_set_register(CONFIGURATION_I,(char) ADNS_9500_RESOLUTION/90),sens);
adns9500_set_register(LASER_CTRL0,0x04,sens);

anschließend folgt der CRC check welcher bestanden wird.

Lese ich nun die Register aus stehen Folgende werte drin.


ID = 0x91
Configuration 1 0x12 (sollte 0x38 )
Observation 0x7F
Laser_Contrl0 0x81 (sollte 0x84 bzw 0x04 enthalten)
Motion 0x20
Produkt_ID 0x33
Configuration 2 0x00




Mein Fehler bezieht sich nun auf die Configuration 1 da hier die 0x38 drinstehen sollte für die maximale auflösung.
genauso ist der Laser deaktiviert was auch nicht sein sollte.

Nachfolziehen konnte ich bisher das die Daten wie nach Datenblatt mit den ganzen erforderlichen Pausen gesendet wird.

Am PIN 2 LASER_NEN liegt eine dauerhafte 1 (3,12V) an (was zumindest erklärt warum der sensor nie an ist)
Am Pin 1,8,16 kommt eine kleine Pulsfolge alle 420usec.


Hatte jemand vieleicht zufällig die gleichen Probleme das er die Auflösung nicht setzten kann und der Laser sich nicht einschaltet.


MFG

(bei bedarf kann ich auch die bilder der einzelnen signale nachreichen)

ArchAngel242
14.04.2010, 11:42
Hi kalu,
also ich hatte auch lange Probleme mit dem initialisieren.
Bei mir lag es daran, dass ich die NCS-Leitung wie in der Anleitung im Bild gesetzt und gelöscht habe.
Nachdem ich dann die Leitung nur am Anfang und Ende der Initialisierung gesetzt und gelöscht hatte funktionierte es und der Laser hat gezündet.

gruß

kalu
15.04.2010, 09:51
Hi
Danke schon mal für den Tip

bei mir hat das mit dem setzen und löschen des NCS am anfang und ende der Initialisierung leider nichts gebracht aber dadurch kam raus das zwischen den nachrichten wohl mehr zeit gewartet werden muss als im datenblatt steht.

durch eine delay funktion zwischen den einzlenen schreibvorgängen hat es nun geplappt das sich die register beschreiben lassen.(auch wenn ich delay net so mag)

zwar stehen jetzt in den registern die richtigen werte aber der laser schaltet sich noch nicht ein bzw nach dem 2ten Burst_Read steht im Motion register eine 0x00 anstatt der 0x20.


gibt es eigendlich noch weitere Befehle die du/ihr verwendet habt außer die die BF oben beschrieben hat

MFG

Chillance
16.07.2010, 16:36
Does it work for you now? (Sorry, I don't speak German).

I used Google translate so that helped me with this thread. :) And seems to be the only one I could find that talks about the ADNS-9500...

My problem is that I don't get any motion from mine. I have done all those steps mentioned in the data sheet, but still no motion when moving the sensor. Does it work for you here?

(More about my issue here: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=95878 )

Thanks,
Chillance

Chillance
16.07.2010, 16:59
Hmm, maybe I'm missing changing new addresses that was added with the SROM 91... Where is that information exactly?

Chillance
05.08.2010, 09:43
Anyone that can help me out here?

Chillance
06.08.2010, 00:37
Oder, vielleicht habe ich in Deutsch schreiben müssen?

stevieman
06.08.2010, 16:21
hi, in case you are having problem with LASER_NEN (always high), then you can try the following step, it solved my problem regarding LASER_NEN

- in manual, Power Up section
... Step 7 "Enable laser by setting Forced_Disable bit (bit-0) of LASER_CTRL0 register (address 0x20) to 0"

after SROM download, instead of writing 0x00 to addr 0x20, try writing 0x80 to addr 0x20

Chillance
07.08.2010, 11:43
hi, in case you are having problem with LASER_NEN (always high), then you can try the following step, it solved my problem regarding LASER_NEN

- in manual, Power Up section
... Step 7 "Enable laser by setting Forced_Disable bit (bit-0) of LASER_CTRL0 register (address 0x20) to 0"

after SROM download, instead of writing 0x00 to addr 0x20, try writing 0x80 to addr 0x20

Lovely! Finally someone that can help me out!

Now, I don't think that is the issue. According to my voltmeter, it's low (0.24V).

After downloading the SROM (0x91), which seems to be fine, because I get this reading 0x25 and 0x26:


Data_Upper:
7 6 5 4 3 2 1 0
0xBE 0b 1 0 1 1 1 1 1 0

Data_Lower:
7 6 5 4 3 2 1 0
0xEF 0b 1 1 1 0 1 1 1 1


Also, I in my infinite loop, I get this:


7 6 5 4 3 2 1 0
0x91 0b 1 0 0 1 0 0 0 1 (SROM_ID - 0x2a)

7 6 5 4 3 2 1 0
0x20 0b 0 0 1 0 0 0 0 0 (Motion - 0x02)

7 6 5 4 3 2 1 0
0x80 0b 1 0 0 0 0 0 0 0 (LASER_CTRL0 - 0x20)

7 6 5 4 3 2 1 0
0x42 0b 0 1 0 0 0 0 1 0 (LASER_CTRL1 - 0x21)

7 6 5 4 3 2 1 0
0x45 0b 0 1 0 0 0 1 0 1 (Address 0x22)

7 6 5 4 3 2 1 0
0xBA 0b 1 0 1 1 1 0 1 0 (Address 0x23)

And that seems perfectly fine, doesn't it?

But, even if I now move the sensor, I still only get 0x20 from the motion register! :(

How did you enable your laser?

stevieman
11.08.2010, 12:20
I enabled the laser by writing 0x00 (or 0x80) to LASER_CTRL0 (0x20).

Since LASER_NEN is low and bit0 (Force_Disabled) of address LASER_CTRL0 is zero, I guess your laser is indeed enabled.

Maybe there are problems with the navigation of the sensor

In data sheet, the addresses 0x21-0x23 are reserved. Maybe you should not read from these addresses ( I don't know whether it helps, but it's worth giving a try )

You can also check whether SROM code is running by checking Observation address (0x24), bit6 should be equal to 1 if SROM code is running

good luck!

Chillance
11.08.2010, 15:28
I will test and check that when I get back home. Please don't leave this forum now! :)

I'm guessing the ADNS-9500 works fine for you?

Chillance
11.08.2010, 23:16
About those reserved registers, I got some extra .pdf from Avago about them. In that you can find this:

Address Register Read/Write Reset Value
0x20 LASER_CTRL0 R/W 0x01
0x21 LASER_CTRL1 R/W 0x00
0x22 LASER_CFG0 R/W 0x00
0x23 LASER_CFG1 R/W 0x00


LASER_CTRL1
Bit-7 of this register must be the complement of the corresponding bits in register 0x20 for the VCSEL control to be as programmed and Bit-6 must be set as 1, otherwise the laser is turned off with LP_VALID bit in the MOTION register is set to 0. Registers 0x20 and 0x21 may be written in any order after power up and SROM download.

LP_CFG0
This register is used to set the laser current. It is to be used together with register 0x23, where register 0x23 contains the complement of register 0x22. If the registers do not contain complementary values, the laser is turned off and the LP_VALID bit in the MOTION register is set to 0.

LP_CFG1
The value in this register must be a complement of register 0x22 for laser current to be as programmed, otherwise the laser is turned off and the LP_VALID bit in the MOTION register is set to 0.


And following that, my values seems correct too.


Ok, I get:


7 6 5 4 3 2 1 0
0x7F 0b 0 1 1 1 1 1 1 1


from address 0x24, so it seems to be running?

Did you calibrate the laser at all or it just worked for you? You just get the motion bit set now from address 0x02?

Do you mind posting some relevant code of yours? So far, as I can tell, it all seems correct software wise... damnit! Also, what do you get from address 0x22 and 0x23 (and the other relevant addresses)?

I also removed reading from those reserved addresses now, but still no motion! :(


I really appreciate your help!

stevieman
13.08.2010, 09:27
Here are some outputs from my sensor

Addresses:
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0B, 0x0E, 0x0D, 0x0F, 0x10, 0x00, 0x12, 0x3F, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1B, 0x1A, 0x1D, 0x1C, 0x1F, 0x1E, 0x20, 0x24, 0x25, 0x26, 0x2A, 0x2E, 0x2F, 0x39

Outputs in the order of the addresses defined above - no motion
03 20 00 00 00 00 28 88 6A 2A 00 61 0F A0 38 08 33 00 CC 32 01 1F 09 BC 31 0F A0 0F A0 4E 20 80 7F 00 00 91 1F 00 02

Outputs in the order of the addresses defined above - with motion
03 A0 05 00 FC FF 28 80 67 27 00 50 0F A0 38 08 33 00 CC 32 01 1F 09 BC 31 0F A0 0F A0 4E 20 80 7F 00 00 91 1F 00 02

hope it helps!

Chillance
16.08.2010, 19:47
Ok, these are the differences when no motion:

0x07:
You: 28
Me: 00

0x08:
You: 88
Me: 00

0x09:
You: 6A
Me: 00

0x0A:
You: 2A
Me: 00

0x0C:
You: 00
Me: 4E

0x0B:
You: 61
Me: 20

0x0E:
You: 0F
Me: 5D

0x0D:
You: A0
Me: C0

0x0F:
You: 38
Me: 12

0x10:
You: 08
Me: 00

0x1B:
You: 0F
Me: 5D

0x1A:
You: A0
Me: C0

0x25:
You: 00
Me: EF

0x26:
You: 00
Me: BE

0x2e:
You: 1F
Me: 10

I will look into these some more, and see if it helps changing to your values on those that I can write to. If you see anything obvious, please tell me. Btw, shouldn't you have BE and EF on 0x26 and 0x25 too? That indicates that the SROM is fine... although I see your SROM_ID is 0x91 (address 0x2a)...

stevieman
17.08.2010, 08:58
I didnt perform a CRC test, so the values of 0x26, 0x25 are not defined.

From the values of your 0x07-0x0A, it appears to me that your sensor does not see any image. Did you remove the protective sticker from the lense and laser? :)

I dont know whether it helps, maybe you should pay attention to the order of reading registers with upper and lower values. Try reading it in the order stated in data sheet.

Chillance
17.08.2010, 15:00
Ok, the stickers where still there because I had them on with the ADNS-6090, and that worked fine. However, 0x07-0x0A still give 0x00 after I have now removed them. So, that didn't help :(

Also, what particular registers should I read in order exactly? I think I do though... but will check...

stevieman
17.08.2010, 20:47
Did you remove both stickers from the lense and laser? I am running out of suggestions :(, it appears to me your sensor does not see any image. As long as the sensor does not see an image, you will not get a motion.

Good luck!

Chillance
17.08.2010, 21:24
Yes, both stickers are removed. How have you build yours? Surface mounted? You have any pictures?

I'm guessing you do these too:

1. Apply power to VDD5/VDD3 and VDDIO in any order
2. Drive NCS high, and then low to reset the SPI port.
3. Write 0x5a to Power_Up_Reset register (address 0x3a).
4. Wait for at least 50ms time.
5. Read from registers 0x02, 0x03, 0x04, 0x05 and 0x06
(or read these same 5 bytes from burst motion register)
one time regardless of the motion pin state.
6. SROM download
7. Enable laser by setting Forced_Disable bit (bit-0) of LASER_CTRL0 register (address 0x20) to 0.

Do you do anything else?

Chillance
25.08.2010, 16:32
Hey, still there? Maybe there is a better way for us to communicate? Email? IRC? You are currently my only hope getting this to work properly, and I don't want to give up! I was even thinking maybe sending you the hardware for you too look at if you could (unless photos is enough)...

Chillance
11.09.2010, 18:51
Why do you think the sensor sees no image? Can you tell me what voltage you get on relevant pins?

mikronoob
28.02.2011, 10:49
Hallo

Ich arbeite momentan an einem Projekt wo ich eine Distanzmessung mit hilfe eines adns 9500 realisieren möchte.

Leider klappt es nicht so wie ich es gärne hätte.

Könnte mir jemand vielleichter seinen Code schicken, damit ich eine Vorlage habe und so meine Probleme lösen kann.

Würde auch einpaar gute Weinflaschen schicken.

Vielen Dank für eure Rückmeldungen

Gruss