Bonjour,
Dans le cadre de la réalisation de l'électronique embarquée pour une fusée expérimentale, j'ai besoin de faire communiquer entre-eux plusieurs microcontrôleurs, et j'ai choisi la liaison SPI.
J'utilise le compilateur PIC-C de CCS pour programmer mes PICs qui sont des 18F252. Pour l'instant il y en a juste deux.
Sur le maître, j'ai rentré le code suivant :
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_64);
spi_write(0b01110100); //j'envoie une requête au PIC esclave
while(!spi_data_is_in()){}
gyro=spi_read(); //l'esclave envoie une réponse que le maître lit quand elle arrive
Et sur l'esclave :
setup_spi(SPI_SLAVE | SPI_SS_DISABLED);
while(!spi_data_is_in()){}
valeur = spi_read(); //on lit la requête du maître
if (valeur==0b01110100)
{
spi_write(54);//on envoie une valeur (ici arbitraire)
}
Tout ça est dans une boucle infinie dans les deux pics. Ce n'est qu'un extrait du code évidemment.
J'ai fait des tests pour voir si l'esclave comprenait bien la requête et si le maître recevait bien de l'esclave la valeur 54, et en fait ça ne marche qu'une fois de temps en temps !
J'ai l'impression qu'il y a un problème de synchronisation car en utilisant un débugger et en regardant l'état des variables pendant le déroulement du programme, je vois que la variable "valeur" (lue par l'esclave en spi) est souvent égale à 01000111, ou 11101000, ou 10100011, bref toujours l'octet que j'ai envoyé mais comme si l'esclave ne savait pas par quel bit de l'octet commencer la lecture, et vu que le même octet est envoyé continuellement, j'ai l'impression qu'il fait comme si il n'arrivait pas à se synchroniser sur le premier bit de l'octet et commençait sa lecture au pif, au milieu de l'octet.
Peut-être que ma méthode n'est pas bonne ou que je n'utilise pas la communication SPI correctement, mais peut-être pourrez-vous m'aider !
Peut-être que le problème vient de la boucle infinie, qu'il ne faut pas transmettre la même chose en continu, et qu'il faut une pause entre chaque octet envoyé, même si c'est le même...
-----