# Interface entre CAN bus y RS232



## Rijiru (Ago 20, 2009)

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


----------



## tecnogirl (Ago 21, 2009)

Puedes enviar un esquema o programa que usaste ?. Salu2.


----------



## Rijiru (Ago 21, 2009)

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


```
#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.


----------



## kike81 (Oct 7, 2009)

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.


----------



## Rijiru (Oct 13, 2009)

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


----------



## Rijiru (Dic 16, 2009)

Rijiru dijo:


> 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.


----------



## astrocar (Nov 7, 2010)

Rijiru dijo:


> 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
> ...



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


----------



## Rijiru (Nov 10, 2010)

Si, asi es y se visualizo en una interface en C#, dejame busco los documentos, y en la brevedad los posteo.

saludos


----------



## astrocar (Nov 10, 2010)

Rijiru dijo:


> Si, asi es y se visualizo en una interface en C#, dejame busco los documentos, y en la brevedad los posteo.
> 
> saludos



oye me gustaria ver esos documento asi que quedo al pendiente.

Saludos y gracias por tu pronta respuesta.
Atten.
Alexander Santana.
Venezuela-Barcelona.


----------



## Rijiru (Ene 30, 2011)

Buen dia foristas, disculpenme la tardanza aqui les posteo el codigo del MCU para capturar datos por la red CAN (=


----------



## astrocar (Mar 5, 2011)

Rijiru dijo:


> 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.


----------



## Rijiru (Mar 9, 2011)

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


----------



## hugos31 (Oct 12, 2011)

por favor como se puede capturar o captar datos de  velocidad y tacometro de una red CAN bus  J1939 y J1708  estas viene en los camiones,saludos desde Peru


----------



## astrocar (Oct 15, 2011)

Rijiru dijo:


> 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.,


----------



## GuilleSpurio (Nov 8, 2011)

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.


----------



## astrocar (Nov 9, 2011)

GuilleSpurio dijo:


> 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.


----------



## GuilleSpurio (Nov 10, 2011)

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.


----------



## GuilleSpurio (Nov 18, 2011)

Rijiru dijo:


> 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


----------

