bonjour,

dans un projet scolaire je dois réaliser un inclinomètre.

J'ai trouvé un chip adis16203 qui permet de mesurer l'inclinaison et de communiquer en spi. Cependant, je n'arrive pas communiquer entre les deux.

j'utilise le compilateur pic ccs avec le logiciel mplab. je dois lire des données 16 bits (14 bits en réalité)

Je n'arrive à rien, lorsque je vais dans le view-watch de mplab en mode debuger, la variable ou je stock la valeur lue en spi, elle est toujours de zéro.

J'ai fais de nombreux essais, avec le #use spi, avec le setup_spi, en 16 bits, en 2 x 8 bits, ...

Je vous montre une version : setup_spi en 1x8 bits, je sais que je dois lire 14 bits, mais j'aimerai d'abord simplement avoir un signe de connection.

Le problème est que le chip adis est un chip smd que j'ai du souder au four, et il n'y a aucun moyen de vérifier les connections. J'aimerai donc si possible, qu'on approuve ou pas mon code pour que je puisse savoir si je dois chercher un problème dans l'hardware ou le software...

Ne vous préoccupez pas du timer0, cest un simple automaintient à transistor, il fonctionne correctement.

Code:
#include <18F4520.h>
#device ICD=TRUE
#include <18F_register.h>

#use delay(clock=8000000) // pour génerer les delais

#fuses NOWDT,INTRC, NOPUT, NOPROTECT, DEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOXINST
//clock interne sans clkout

#BIT SPI_CS = PORTA.5
#BIT OLED_HW_R = PORTA.6
#BIT AUTO_M = PORTB.5
#BIT test = PORTD.0


int incl_value_1 = 0; 
int incl_value_2 = 0; 	//variable qui contient la valeur de l'inclinaison fournie par l'adis16203
int timer_15sec = 0;

void init_uc (void)
{

TRISA = PORTA = 0;
TRISB = 0;	
TRISC = PORTC = 0b00010100; 
TRISD = PORTD = 0;
TRISE = PORTE = 0;
OSCCON = 0x70;
SPI_CS = 1;	
setup_spi(spi_master |spi_l_to_h |spi_clk_div_16 );
}


//-----------------------------------------------------------------------------------

#INT_TIMER0
void TIMER0_isr(void)
{
TMR0L = TMR0H = 0;
test =! test;
timer_15sec = timer_15sec + 1;
if (timer_15sec >= 14)
{
AUTO_M = 0;	
}
}

void main(void)
{
	init_uc();

	while (1) 
	{
	SPI_CS = 0;
	incl_value_1 = spi_read(0x0C);
	SPI_CS = 1;
	test =! test;
	}
}