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/na...eam/adns-9500/
hier mal ein Ausschnitt aus meinem Code:
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.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); }
Die einzelnen Ports habre ich schon in main eingestellt!
Weiß leider nich wo mein Fehler liegt.
Bin für jeden Hinweis dankbar!!!!







Zitieren

Lesezeichen