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:
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!!!!
Lesezeichen