Autor Tema: Mis experiencias con el BUS CAN  (Leído 890225 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Conectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1140 en: 30 de Octubre de 2011, 13:22:49 »
Hola a todos! Estuve leyendo el foro y esta muy bueno. Felicitaciones, se nota que saben mucho sobre el tema.
Estoy empezando con el CAN, estoy usando MikroC para programar el PIC 18F4680. No entiendo el tema de las banderas CAN_CONFIG_FLAGS . Si alguien podria explicarme por favor.
Por ejemplo en la seccion de ayuda de mikroC hay un ejemplo de utilizacion de las banderas  CAN_CONFIG_FLAGS que lo utiliza con la libreria CANInitialize. Que hace ahi? Entiendo mas o menos los parametros SJW, BRP, PHSEG1,PHSEG2,PROPSEG pero no las banderas.

init = _CAN_CONFIG_SAMPLE_THRICE &
       _CAN_CONFIG_PHSEG2_PRG_ON &
       _CAN_CONFIG_STD_MSG       &
       _CAN_CONFIG_DBL_BUFFER_ON &
       _CAN_CONFIG_VALID_XTD_MSG &
       _CAN_CONFIG_LINE_FILTER_OFF;

CANInitialize(1, 1, 3, 3, 1, init);   // initialize CAN

Agradeceria si alguien pudiese ayudarme.

Saludos a todos.


Si miras la pagina 250 del manual que te dejo Merlinz, encontraras los diferentes valores que pueden tomar esas variables, y que bits de configuracion cambia en cada opcion.
Luego vas a la hoja de datos del PIC utilizado y miras en ese registro, que hace cada bit asi entiendes bien que esta haciendo la configuracion utilizada.

Este es un paso MUY importante (entender que hace cada instruccion que vas a utilizar) para empezar a programar en CAN.

Citar
const char
_CAN_CONFIG_DEFAULT = 0xFF, // 11111111
_CAN_CONFIG_PHSEG2_PRG_BIT = 0x01,
_CAN_CONFIG_PHSEG2_PRG_ON = 0xFF, // XXXXXXX1
_CAN_CONFIG_PHSEG2_PRG_OFF = 0xFE, // XXXXXXX0
_CAN_CONFIG_LINE_FILTER_BIT = 0x02,
_CAN_CONFIG_LINE_FILTER_ON = 0xFF, // XXXXXX1X
_CAN_CONFIG_LINE_FILTER_OFF = 0xFD, // XXXXXX0X
_CAN_CONFIG_SAMPLE_BIT = 0x04,
_CAN_CONFIG_SAMPLE_ONCE = 0xFF, // XXXXX1XX
_CAN_CONFIG_SAMPLE_THRICE = 0xFB, // XXXXX0XX
_CAN_CONFIG_MSG_TYPE_BIT = 0x08,
_CAN_CONFIG_STD_MSG = 0xFF, // XXXX1XXX
_CAN_CONFIG_XTD_MSG = 0xF7, // XXXX0XXX
_CAN_CONFIG_DBL_BUFFER_BIT = 0x10,
_CAN_CONFIG_DBL_BUFFER_ON = 0xFF, // XXX1XXXX
_CAN_CONFIG_DBL_BUFFER_OFF = 0xEF, // XXX0XXXX
_CAN_CONFIG_MSG_BITS = 0x60,
_CAN_CONFIG_ALL_MSG = 0xFF, // X11XXXXX
_CAN_CONFIG_VALID_XTD_MSG = 0xDF, // X10XXXXX
_CAN_CONFIG_VALID_STD_MSG = 0xBF, // X01XXXXX
_CAN_CONFIG_ALL_VALID_MSG = 0x9F; // X00XXXXX

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1141 en: 30 de Octubre de 2011, 15:18:50 »
Bueno ya esta el bootloader CAN listo, probado y recomprobado, funciona perfectamente!!




Conectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1142 en: 30 de Octubre de 2011, 15:23:00 »
Si pudieras desarrollarnos mas el tema, seria muy bueno.
Felicitaciones!!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1143 en: 30 de Octubre de 2011, 15:40:42 »
Bueno, lo explico asi por encima, porque el codigo esta mezclado con el codigo general y seria dificil entenderlo sin entender el codigo anterior xD

Lo primero es la placa 1, esta conectada al pc por rs232 (uart), esta es la que se encarga de comunicar el soft del PC con la placa deseada de CAN mediante CAN.

El soft envia a la placa1 que quiere poner en modo bootloader a la placa 2 (uctrl), la placa 2 configura el CAN para solo aceptar (filtros) mensajes dedicados al bootloader, los demas mensajes los ignora, yo en mi caso identifico los mensajes segun placas para que al recibir el mensaje "modo bootloader" esta lo compara con el numero de placa, si es esta la coloca en modo bootloader, si no lo ignora.

Una vez la placa2 esta en modo bootloader, envia un mensaje (can) a la placa 1 para decir que se ha configurao y que ha aceptado el modo bootloader. La placa1 lo envia al PC.
Ahora llega el momento de enviar datos, lo primero decir que el soft se encarga de leer el .hex y pasarlo a almacenarlo en la ram del PC.

*El pc envia primero la direccion (ADDR) de la memoria que quiere modificar en el PIC, tambien el tamaño del buffer.  Luego la placa1 lo envia a la placa2 (can). La placa2 responde como que ha recibido bien la ADDR.
*Ahora el pc envia el buffer a la placa1, esta la envia a la placa2 (can).
*La placa2 confirma que le han llegado todos los datos.
*El pc envia un dato para la verificacion.
*La placa2 le envia todo el buffer a la placa1, y la placa1 al pc. El soft del pc se encarga de verificar los datos que reciben son iguales a los que tiene en su buffer. Si todo esta correcto manda un dato para escribir los datos en la flash.
*La placa2 escribe los datos, y compara los datos escritos con el buffer, si todo esta ok envia ok, si no envia error.
Tanto en la verificacion como en la comparacion de datos, si los datos estan mal se vuelve a ir al paso de enviar la direccion.

Y asi constantemente hasta que se llega al final del .hex, los datos se envian de 64 en 64bytes, ya que mi pic acepta la escritura de sectores por 64bytes (otros aceptan solo 32bytes o menos, mirar datasheet).

Una vez llega al final, el pc envia un comando para resetear la placa2, esta se resetea, y a su vez la placa1 sale del modo programacion y sigue haciendo su trabajo con normalidad.

Conectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1144 en: 30 de Octubre de 2011, 15:50:35 »
Que uso le vas a dar al sistema??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1145 en: 30 de Octubre de 2011, 15:56:19 »
pues quizas en un futuro sea un producto para venderlo, por ahora es un proyecto que quiero hacer y llevo ya tiempo pensandolo, estara dedicado al automovil para hacer determinadas funciones, decir que he visto productos similares pero se venden sueltos, mi idea es unirlos todos para que ocupe menos espacio ademas de mejoras, y es un producto pensado para el futuro, osea con actualizaciones. Por eso al tener bootloader los clientes podran actualizarlo facilmente con un PC para corregir posibles fallos que tenga el software, y actualizaciones de diseño o bien futuras ampliaciones (ya que al estar conectado por CAN se le podra meter mas placas con simples adaptaciones del software.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Mis experiencias con el BUS CAN
« Respuesta #1146 en: 30 de Octubre de 2011, 15:57:12 »
Está genial MerLiNz, felicidades.

Conectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1147 en: 30 de Octubre de 2011, 16:07:53 »
Coincido con Manolo, esta muy bueno!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1148 en: 30 de Octubre de 2011, 18:24:24 »
gracias, no veas ahora que facil programar las placas sin tener que estar cambiando de placa el icd3 xD

Conectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Como usar las interrupciones en el BUS CAN y CCS ??
« Respuesta #1149 en: 05 de Diciembre de 2011, 11:20:00 »
Alguien utilizo las interrupciones por CAN en CCS ??
Me refiero a recibir a través de #int_canrx0 y #int_canrx1.
Estoy intentando usarlas y no veo que me funcionen, como esperaba.

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1150 en: 05 de Diciembre de 2011, 11:41:50 »
con C18 yo como explique si me funcionan perfectamente, pero para CCS no se como va bien.

Conectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1151 en: 05 de Diciembre de 2011, 11:49:35 »
Igual me serviría conocer el código que usas, a ver como es el desarrollo, porque hasta ahora lo hacia por polling del status de los buffer...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1152 en: 05 de Diciembre de 2011, 12:19:06 »
uhm, ahora que lo dices, tu usabas un pic con can integrado?? o por SPI?

bueno te pongo los registros que uso con el can integrado para las interrupciones, puede que varie a tu pic porke el que yo use es el 18f46k80

   IPR5bits.RXBnIP=0; //prioridad
   PIE5bits.RXBnIE=1; //enable IE
   INTCONbits.GIEH=1; //global enable
   RCONbits.IPEN=1; //prioridad enable
   BIE0=0b00011111; //buffers interrupcion (RX)(0,1,2,3,4,5)=enable los demas (TX) disable.

y ahora en la low_isr (funcion interrupcion):

   if(PIR5bits.RXBnIF) { //si esta activado el flag de RX buffer
      cBuf=CANSTATbits.EICODE; //cbuf=buffer el cual ha activado la interrupcion
//codigo aki
}  

creo que en principio eso es todo, si usas por SPI recuerdo que el chip te trae un pin de interrupcion o algo asi, segun lo configures si lo activas para que al recibir se active la interrupcion, este se pone en high o low (revisar datasheet), para el pic podias conectarlo a una interrupcion externa (INTx) y hacer la lectura por SPI y tal...

Todo el codigo anterior va por el ECAN, para el CAN normal creo que hay otras interrupciones para el buffer 0 y 1.

Desconectado dewasha

  • PIC10
  • *
  • Mensajes: 19
Re: Mis experiencias con el BUS CAN
« Respuesta #1153 en: 05 de Diciembre de 2011, 12:25:33 »
alguien ha encontrado el firmware del elm327 o similar? me refiero en codigo abierto... si lo han clonado los chinos en un pic18f2550 deberia de andar por hay... mi adaptador usb-obd2 (elm327 compatible) es en realidad un pic 18f2455 y me parece raro que nadie tenga el archivo .hex con el codigo

Desconectado chispas

  • PIC10
  • *
  • Mensajes: 2
Re: Mis experiencias con el BUS CAN
« Respuesta #1154 en: 10 de Enero de 2012, 15:07:41 »
Saludos.

Estoy intentando simular un circuito con los integrados mcp2551 y mcp2515 en isis de proteus, pero no los encuentro en las librerias. Pero he visto por aquí algún circuito que si los incluye ¿donde los encontrais o como tengo que añadirlos?.

Gracias!


 

anything