Interface entre CAN bus y RS232

Buen dia, en cierta ocacion me propuse en capturar datos provenientes de una red CAN bus y luego los datos obtenidos enviarlos por el puerto serie con protocolo RS232, pero, la problematica aqui es, que los datos nunca salian por el puerto serie. Si alguien sabe cual podria ser la causa, se le agradeceria su ayuda.


Saludos
 
Buen dia, a continuacion es el codigo con el que pretendi realizar la tarea:

Código:
#int_canwake //Esta interrupcion captura los datos provenientes de la red CAN y los transmite por el puerto serie RS232
isr()
{
 can_getd(ID,data,len,stat);
 printf("%32X %X %X %X", ID, data, len, stat);
}
#int_canerr  // Esta interrupcion nos depsliega una alarma encendiendo y apagando un indicador cuando hay errores en la red CAN
default_isr()
{
 k: c=0;
 output_high(PIN_A0);
 counter: c++;
 if(c>=500)
 {
  output_low(PIN_A0);
  if(c==1000)
  {
   goto k;
  }
  else
  {
   goto counter;
  }
 }
 else
 {
  goto counter;
 }
}

 void main()
{
 can_init();
 enable_interrupts(INT_CANERR);
 enable_interrupts(INT_CANWAKE);
}

Saludos.
 
que tal Rijiru, oye tengo mas de una semana intentando echar a andar el CAN bus del PIC18F2685 con el compilador C18, pero la verdad es que no entiendo como es que funcionan lo de las filtros y las mascaras, es decir no se como usar los registros
TXBnSIDH,TXBnSIDL, TXBnDm, asi como los de recepcion de mensajes, si puedieras darme un ejemplo de como usarlos te lo agradeceria ampliamente.

Muchas Gracias.
 
Hola buen dia, la verdad, no es toy seguro si eso se configura en el registro CANCON o CANSTAT, pero d elo que estoy seguro es que en el Datasheet deben venir las palabras de configuracion. En lo personal estoy usando PIC C compiler, pues espero y esto te ayude la verdad soy nuevo en esto.


Saludos
 
Hola buen dia, la verdad, no es toy seguro si eso se configura en el registro CANCON o CANSTAT, pero d elo que estoy seguro es que en el Datasheet deben venir las palabras de configuracion. En lo personal estoy usando PIC C compiler, pues espero y esto te ayude la verdad soy nuevo en esto.


Saludos

Hola gente del foro, la problematica anterior fue resuelta, en el compilador PIC C, a lo que he leido esta basado en un kit de entrenamiento, por consecuencia las librerias que contienen los drivers vienen ya con caracteristicas por default. En este caso se altero el driver CAN-18XXX8.h
En el archivo de cabecera en donde se declara Baud Rate hay una formula en la cual el valor del preescalar debe ser calculado:

Tq=(2(PRE+1))/Fosc

una vez obtenido el valor de preescalar el driver se guarda y se incluye en el programa.

Con esto el problema quedo resuelto.
 
Hola gente del foro, la problematica anterior fue resuelta, en el compilador PIC C, a lo que he leido esta basado en un kit de entrenamiento, por consecuencia las librerias que contienen los drivers vienen ya con caracteristicas por default. En este caso se altero el driver CAN-18XXX8.h
En el archivo de cabecera en donde se declara Baud Rate hay una formula en la cual el valor del preescalar debe ser calculado:

Tq=(2(PRE+1))/Fosc

una vez obtenido el valor de preescalar el driver se guarda y se incluye en el programa.

Con esto el problema quedo resuelto.

Hola buenas noches, entonce si lograstes ver la captura de la red can en la pc podrias dar mas dettales por favor.

Saludos.
Atten.
Alexander Santana.
Venezuela-Barcelona
 
Buen dia foristas, disculpenme la tardanza aqui les posteo el codigo del MCU para capturar datos por la red CAN (=
 

Adjuntos

  • Programa_PIC.txt
    1.1 KB · Visitas: 345
Buen dia foristas, disculpenme la tardanza aqui les posteo el codigo del MCU para capturar datos por la red CAN (=

hola, gracias por el codigo lo que no entiendo es como configuras la velocidad del bus can en ese codigo no lo veo lo otro es los datos lo monitores en un pc via rs232 y me imagino que usas un terminar o diseñastes alguna interface grafica para verlos a tu manera.

Saludos y espero tu gentil ayuda.
bye.
 
Última edición:
Buen dia, la libreria para CAN bus cuando se ejecuta el comando can_init(), este llama a una rutina llamada can_set_baud() por default se programa el PIC para trabajar a 125kBaud. Para alterar el Baud Rate es necesario en el archivo 'can-18xxx8.h' en la libreria buscar el registro BRG y cambiar el valor del preescaler la formula cambiar al Baud Rate deseado seria:

Baud_Rate=(Fosc)/(2(PREESCALER+1))

Saludos
 
Buen dia, la libreria para CAN bus cuando se ejecuta el comando can_init(), este llama a una rutina llamada can_set_baud() por default se programa el PIC para trabajar a 125kBaud. Para alterar el Baud Rate es necesario en el archivo 'can-18xxx8.h' en la libreria buscar el registro BRG y cambiar el valor del preescaler la formula cambiar al Baud Rate deseado seria:

Baud_Rate=(Fosc)/(2(PREESCALER+1))

Saludos

ok, gracias por su gentil respuesta me cambie a la ploataforma arduino y he logrado desarrollar mi aplicacon can sin problema y de una manera muy rapida y hasta con velocidades que yo mismo asigno.

Saludos.,
 
Hola, resulta que estoy haciendo un dispocitivo para leer una red can, y utilicé un programa muy parecido al tuyo que levanta los datos de la red, y los manda por serie, en un hipertermial se pueden ver los resultados, ahora cuando conecto mi dispocitivo a la red resulta que se empiesan a caer uno a uno todos los nodos de la red.
El programa está diseñado en un PIC 18F2680, y uso un MCP2551 para conectarlo a la red.
Alguien sabe que puede estar pasando????
Desde ya muchas gracias.
Saludos.
 
Hola, resulta que estoy haciendo un dispocitivo para leer una red can, y utilicé un programa muy parecido al tuyo que levanta los datos de la red, y los manda por serie, en un hipertermial se pueden ver los resultados, ahora cuando conecto mi dispocitivo a la red resulta que se empiesan a caer uno a uno todos los nodos de la red.
El programa está diseñado en un PIC 18F2680, y uso un MCP2551 para conectarlo a la red.
Alguien sabe que puede estar pasando????
Desde ya muchas gracias.
Saludos.

Hola buenos dias revisastes que tu nodo esta operando a la velocidad que esta la red establecida por eso puede ser que no ves los mensajes de lo otros nodos.

Saludos.
 
Hola astrocar, gracias por contestar, pero quizas me exprecé mal y no se entiende cual es mi problema, resulta que yo si veo los datos que circulan por la red Can, lo que pasa es que mi dispocitivo mete algún tipo de interferencia en la red que hace que los otros nodos comiencen a perder la conección.
No se por que pero cuando pongo el osciloscopio para ver como recibe un dato mi plaqueta, resulta que ni bien lo recibe, el mc2551 responde al mensaje con un mensaje muy similar, yo creo que es esto lo que me está metiendo ruido en la red y hace que se caigan los demas nodos.
Digamos que mi dispocitivo tendría que funcionar de alguna manera a lazo abierto, sin responder los mensajes, yo utilizo "can_set_mode(CAN_OP_NORMAL);" veo que existe un modo que es "CAN_OP_LOOPBACK" o "CAN_OP_LISTEN", pero con estos modos de operacion no puedo hacer que reciba datos el pic.
Desde ya muchas gracias por responder.
Saludos.
 
Buen dia, la libreria para CAN bus cuando se ejecuta el comando can_init(), este llama a una rutina llamada can_set_baud() por default se programa el PIC para trabajar a 125kBaud. Para alterar el Baud Rate es necesario en el archivo 'can-18xxx8.h' en la libreria buscar el registro BRG y cambiar el valor del preescaler la formula cambiar al Baud Rate deseado seria:

Baud_Rate=(Fosc)/(2(PREESCALER+1))

Saludos

Hola Rigiru, tengo algunas dudas respecto al CAN bus, y estoy desarrollando un dispocitivo para leer datos de una red, entiendo que tienes un poco mas de experiencia en esto que yo, y agradecería me puedas dar alguna orientación al respecto, mi idea es hacer un dispocitivo que haga algo similar al "Microchip Can Busm Analyzer", pero que en un principio solo monitoree la red CAN bus y lo retransmita por puerto serie a una PC, para ello utilizé un pic 16F2680 con una interfas MCP2551, resulta que cuando lo conecto a la red veo los datos sin problema, pero mi dispocitivo mete interferencia en la red, y hace que los otros nodos de la red pierdan su comunicación, estoy dudando del modo de operación del PIC, que lo tengo configurado en "Normal mode", veo que existe la pocibilidad de ponerlo en "Listen Only mode", esto podrá ayudar en algo?
si necesitas algún dato adicional para poder ayudarme no dudes en pedirmelo.
Desde ya muchas gracias.
Saudos cordiales.

PD: disculpa si tengo muchos errores ortograficos, la lengua nunca fue lo mio
 
Atrás
Arriba