Bonjour,
Je travaille actuellement sur uen maquette de train composée de deux motrices et une remorque. Le souci est que l'électronique embarqué est géré par 4 pic 18F4520 en réseau par liaison SPI.
Pour faire le bilan :
Maitre- esclave : parfait , les octets sont bien envoyés et enregistrés là où il faut.
Esclave - maître : ... sans commentaire
Côté maitre :
esclave3 = 0;
if(num_send_data == 6)
TX_data = TABMESC3.DEFM.DEFAUTMoct;
if(num_send_data == 7)
TX_data = TABMESC3.DEFESC1.DEFAUTESCoct;
if(num_send_data == 8)
TX_data = TABMESC3.DEFESC2.DEFAUTESCoct;
SSPBUF = TX_data;
while(!SSPSTATbits.BF);
if (rx.RX_DATAoct != TX_data)
{
rx.RX_DATAoct = SSPBUF;
if (rx.RX_DATAbit.ID == 0x01)
TABMESC3.DEFM.DEFAUTMoct = rx.RX_DATAoct;
}
esclave3 = 1;
J'envoie 1 octet après l'autre, la fonction qui fait cet envoi est appelée après une interruption de timer toutes les 25 ms. A chaque passage une variable est incrémentée (num_send_data).
Côté esclave:
void receive_message()
{
extern TAB_M_ESC3 TABMESC3;
TAB_M_ESC3 TABMESC3_prec;
extern RX_DATA rx;
rx.RX_DATAoct = SSPBUF;
if (rx.RX_DATAbit.ID == 0x01)
{
if(TABMESC3_prec.DEFM.DEFAUTMo ct == rx.RX_DATAoct)
{
TABMESC3.DEFM.DEFAUTMoct = rx.RX_DATAoct;
TABMESC3_prec.DEFM.DEFAUTMoct = rx.RX_DATAoct;
}
else
{
TABMESC3_prec.DEFM.DEFAUTMoct = rx.RX_DATAoct;
}
}
if (rx.RX_DATAbit.ID == 0x02)
{
if(TABMESC3_prec.DEFESC1.DEFAU TESCoct == rx.RX_DATAoct)
{
TABMESC3.DEFESC1.DEFAUTESCoct = rx.RX_DATAoct;
TABMESC3_prec.DEFESC1.DEFAUTES Coct = rx.RX_DATAoct;
}
else
{
TABMESC3_prec.DEFESC1.DEFAUTES Coct = rx.RX_DATAoct;
}
}
if (rx.RX_DATAbit.ID == 0x03)
{
if(TABMESC3_prec.DEFESC2.DEFAU TESCoct == rx.RX_DATAoct)
{
TABMESC3.DEFESC2.DEFAUTESCoct = rx.RX_DATAoct;
TABMESC3_prec.DEFESC2.DEFAUTES Coct = rx.RX_DATAoct;
}
else
{
TABMESC3_prec.DEFESC2.DEFAUTES Coct = rx.RX_DATAoct;
}
}
}
Pour ranger les octets là où il faut je teste les bits 7 et 6 de SSPBUF.
Dans la table TABMESC3, il y a 3 octets, les bits 7 et 6 sont les identifiants, et 5 à 0 contiennent l'information.
Mais du côté esclave je ne sais pas quand effectuer l'envoie pour que le maître enregistre les informations de l'esclave.
J'espère que c'est assez clair.
Merci d'avance pour votre aide !
-----