Buenas tardes MGLSOFT!!!
En primer lugar agradecer tu interés y ganas de ayudar al projimo.....
En segundo lugar en estas fechas tan especiales desearte lo mejor para los tuyos y que pases unas felices navidades y prospero año nuevo.
Y ahora pasemos a la materia.
Los mensajes que estoy enviando son 3. Si te fijas en el código que te mando (compilado en CCS) veras que solo se ejecuta una sola vez, ya que no le he puesto WHILE(1). Pero claro cada vez que yo reseteo el pic se ejecuta de nuevo, ese el modo que he elegido para controlar los mensajes que estoy mandando.
#include "C:\Documents and Settings\Administrador\Escritorio\kk\main2.h"
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, stream=outstream)
#define CAN_USE_EXTENDED_ID FALSE
#include <can-18xxx8.c>
void main()
{
int32 can_id;
int can_data[8],i;
int can_length, counter;
struct rx_stat rxstat;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab
// TODO: USER CODE!!
can_init();
can_set_mode(CAN_OP_CONFIG);
// configuracion 50kbs q=8 62.5% oscilador 16MHZ
/*
BRGCON1=0x53;
BRGCON2=0x90;
BRGCON3=0x02;
*/
// configuracion 125kbs q=8 62.5% oscilador 16MHZ
BRGCON1=0x07;
BRGCON2=0x90;
BRGCON3=0x02;
/*
// configuracion 250kbs q=8 62.5% oscilador 16MHZ
BRGCON1=0x03;
BRGCON2=0x90;
BRGCON3=0x02;
*/
can_set_mode(CAN_OP_NORMAL);
counter = 0;
puts("Starting");
can_data[0] = 0x55;
can_data[1] = 0x99;
delay_ms(10000);
if(can_putd(0x111, can_data, 2, 3, 0,0))
{
puts("tx ok");
delay_ms(10000);
}
can_data[0] = 0x66;
can_data[1] = 0x47;
if(can_putd(0x222, can_data, 2, 0, 0, 0))
{
puts("tx ok");
delay_ms(10000);
}
if ( can_tbe())
{
can_data[0] = 0x45;
can_data[1] = 0x36;
if (can_putd(0x123, can_data, 2,3,0,0)) { //success, a transmit buffer was open
fprintf(outstream,"OKOK ");
for (i=0;i<2;i++) {
fprintf(outstream,"%X ",can_data[i]);
}
fprintf(outstream,"\r\n");
}
else { //fail, no transmit buffer was open
fprintf(outstream,"\r\nFAIL on PUTD\r\n");
}
}
}
Cada uno de los mensajes tiene un identificador diferente para diferenciarlos, y además están en CAN ID Standar (no extendido). Aun así lo que ven los sniffer es lo que te he adjuntado en el PDF. Veras que hay 2 cuadros de color rojo, uno corresponde como bien sabes al CANKING (de la tarjeta de desarrollo de MICROCHIP para MCP25050) y el otro a un Sniffer que me han dejado que es USB (mas sencillo).
Los 2 en el caso de las capturas están configurados a 125kbs, aunque a 50kbs hacen exactamente lo mismo. Cuando cambio la velocidad evidentemente también recompilo el PIC y configuro los registros a lo que corresponda.
// conflagración 50kbs q=8 62.5% oscilador 16MHZ
/*
BRGCON1=0x53;
BRGCON2=0x90;
BRGCON3=0x02;
*/
// conflagración 125kbs q=8 62.5% oscilador 16MHZ
BRGCON1=0x07;
BRGCON2=0x90;
BRGCON3=0x02;
/*
// conflagración 250kbs q=8 62.5% oscilador 16MHZ
BRGCON1=0x03;
BRGCON2=0x90;
BRGCON3=0x02;
La pregunta del millón es ¿¿que es lo que estoy mandando que ambos casos están viendo lo mismo???
Lo mando mal esta claro pero que me esta fallando???
Solo se trata de lo mas básico mandar un mensaje de CAN y aun no he sido capaz....
Un saldudo y MUCHAS GRACIAS.....
PERE.
PD: Lo único que necesito ahora es un código lo más simple posible que mande un mensaje CAN y al leerlo con el Sniffer se corresponda. No pido más de momento...