Boujour,
Je réalise actuellement la connection entre un dspic30f4013 et un capteur angulaire ADIS16201 qui utilise l'interface spi.
On utilise un quartz de 12 MHz.
Doc du capteur:
http://www.analog.com/UploadedFiles/.../ADIS16201.pdf
Mon problème c'est que je n'arrive pas à recevoir les bonnes données.
Quand j'envoie l'adresse 0x0C00 (XINCL_OUT) la donnée renvoyée reste en permanence à 0x0000.
J'ai configurer mon pic de la façon suivante:
doc capteur:Code:#include <p30f4013.h> #include<spi.h> unsigned int datard ; _FOSC(CSW_FSCM_OFF & HS); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PWRT_OFF); _FGS(CODE_PROT_OFF); #define Fcy 12000000/4 int main (void){ /* Holds the information about SPI configuartion */ unsigned int SPICONValue; /* Holds the information about SPI Enable/Disable */ unsigned int SPISTATValue; /* Turn off SPI modules */ CloseSPI1(); //SPICONValue = 0x4439; //SPI1STAT = 0x8002; /* Configure SPI1 interrupt */ //ConfigIntSPI1(SPI_INT_DIS); /* Configure SPI1 module to transmit 16 bit timer1 value in master mode */ SPICONValue = FRAME_ENABLE_ON & FRAME_SYNC_OUTPUT & ENABLE_SDO_PIN & SPI_MODE16_ON & SPI_SMP_ON & SPI_CKE_ON & SLAVE_ENABLE_OFF & CLK_POL_ACTIVE_HIGH & MASTER_ENABLE_ON & SEC_PRESCAL_2_1 & PRI_PRESCAL_16_1; SPISTATValue = SPI_ENABLE & SPI_IDLE_CON & SPI_RX_OVFLOW_CLR; OpenSPI1(SPICONValue,SPISTATValue ); while (1){ WriteSPI1(0x0C00); //while(SPI1STATbits.SPITBF); //while(!DataRdySPI1()); datard = ReadSPI1(); } }
Ce que j'envoi:
D0: sclk
D1: CS
D2: Din (du capteur ou Dout du pic)
D3: Dout ( du capteur ou Din du pic)
J'ai aussi testé l'adresse 0x1C00 (XINCL_SCALE) j'obtient la valeur 0X0003 alors que d'après la doc du capteur la valeur defaut est 0X0800.
Je n'arrive pas à savoir d'où viens mon problème.
Merci de votre aide.![]()
![]()
-----