Buen dia:
Tengo un problema al usar el Protocolo Can , cuando trato de enviar simultáneamente entre 3 pics se congela la comunicación en uno de los buffer , uso filtros para especificar cada una de la interrupciones
#include <18F4580.h>
#device ADC=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(crystal=20000000)
#include <can-18xxx8.c>
int Buffer_Datos_Out_Lcd[8],BUFFER_DATOS_IN[8];
INT32 Rx_Id=0,Dir_Tarjeta_Pruebas=0x35;
Int flag=0;
INT RX_LEN,RXSTAT;
#ZERO_RAM
#int_canrx0
void canrx0_int ( ) {
can_getd(RX_ID,BUFFER_DATOS_IN,RX_LEN,RXSTAT);
Output_toggle(Pin_A5);
}
#int_canrx1
void canrx1_int ( ) {
can_getd(RX_ID,BUFFER_DATOS_IN,RX_LEN,RXSTAT);
Output_toggle(Pin_D0);
}
#int_timer1
void timer_1(){
set_timer1(55422); ////16ms
flag=1;
}
void main()
{
can_init();
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //104 ms overflow
set_timer1(15120);//16ms
can_set_mode(CAN_OP_CONFIG);
can_set_id(RX0MASK, 0x51, CAN_USE_EXTENDED_ID); //set mask 0
can_set_id(RX0FILTER0, 0x51, CAN_USE_EXTENDED_ID); //set filter 0 of mask 0
can_set_id(RX1MASK, 0x40, CAN_USE_EXTENDED_ID); //set mask 1
can_set_id(RX1FILTER2, 0x40, CAN_USE_EXTENDED_ID); //set filter 0 of mask 1
can_set_mode(CAN_OP_NORMAL);
enable_interrupts(int_canrx0);
enable_interrupts(int_canrx1);
enable_interrupts(int_timer1);
enable_interrupts(GLOBAL);
while(TRUE)
{
if(flag==1){
flag=0;
Can_Putd(Dir_Tarjeta_Pruebas,Buffer_Datos_Out_Lcd,8,1,TRUE,TRUE);
}
}
}
el código como el pic son los mismos para los tres dispositivos conectados;
con el código lo que hago es cuando recibe de una dirección especifica se activa el respectivo led cada dispositivo recibe datos de los otros 2 el problema viene cuando después de un tiempo de recibir uno de los los dispositivos pierde comunicación con un dispositivo pero la mantiene con otro, y así sucede después de un rato con otro pic;
no se que podría ser.