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

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

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #1290 en: 29 de Diciembre de 2012, 08:39:12 »
Si vas a usar el CAN de MikroC, usa el pin de reset y no te compliques, ya que sus librerías seguramente lo usan.
Si usas el de CCS, deja libre ese mismo pin y lo pones a VCC.
De esa forma, podrás usar uno u otro compilador sin problemas...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Alejandro

  • PIC16
  • ***
  • Mensajes: 109
Re: Mis experiencias con el BUS CAN
« Respuesta #1291 en: 14 de Enero de 2013, 14:13:59 »
Hola, alguien me podria aclarar la siguiente duda:

Tengo un scaner de J1939 el cual trabaja a la par con un software en PC, el problema es que quiero hacer pruebas sin conectar el scaner al computador del vehiculo, solo conectandole los +12V de la alimentancion pero parece que el software hace un test del bus can y como este no esta conectado al vehiculo no me permite iniciar el software para realizar mis pruebas, alguien me podria decir como emular un estado logico de este bus?

Desconectado Alejandro

  • PIC16
  • ***
  • Mensajes: 109
Re: Mis experiencias con el BUS CAN
« Respuesta #1292 en: 14 de Enero de 2013, 14:20:23 »
 :oops:  Seria correcto conectar una resistencia de 120 ohms entre el J1939(+) y J1939(-)?

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Mis experiencias con el BUS CAN
« Respuesta #1293 en: 14 de Enero de 2013, 15:09:17 »
Yo me buscaria un manual del scanner para ver como usarlo antes de hacer conexiones.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #1294 en: 14 de Enero de 2013, 15:14:30 »
Igualmente, no creo que rompas nada poniendo las resistencias en el bus, es probable que te detecte BusOpen, por no tenerlas...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado alquimista

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #1295 en: 18 de Enero de 2013, 22:19:54 »
Tengo una duda con respecto al MCP2551 se supone que ocupo micro dsPIC33FJ256GP710 y envio un dato por un puerto esperando recibir ese dato por el otro puerto ecan porque tiene 2  lo que pasa es que mando información y la verifico con el osciloscopio a la entrada del transceiver y entra un tren de pulsos a la salida tengo informacion y esa misma informacion la recibe el mcp del otro puerto pero checo los pines que se conectan al micro y nadamas veo que se encuentran en uno logico que pasa ahi?????????????????????? agradeceria mucho una repuesta pronta   
@lquimist@

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1296 en: 22 de Enero de 2013, 09:20:04 »
Buenas a todos,

Estoy intentando evolucionar...pero me está costando, la verdad.

Estoy intentando realizar un código en modo loopback, para testear el CAN. Pero me surgen varias dudas.

- Por lo visto, según el manual, cuando se elige el modo loopback, el módulo no utiliza el bus, por lo cual, no utiliza el transceptor MCP2551, ¿Verdad?
- En este modo, tengo que configurar una fifo de Tx y otra de Rx??
- Sigue las mismas pautas de propagación que el modo normal??

Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #1297 en: 22 de Enero de 2013, 09:57:45 »
En que manual te dice que no utiliza el bus??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1298 en: 22 de Enero de 2013, 10:32:50 »
Te indico lo que pone en el manual de microchip.

34.5.5Loopback Mode
Loopback mode is used for self-test to allow the CAN module to receive its own message. In this mode, the CAN module transmit path is connected internally to the receive path. A “dummy” acknowledge is provided, thereby eliminating the need for another node to provide the Acknowledge bit. The CAN message is not actually transmitted on the CAN bus.

Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #1299 en: 22 de Enero de 2013, 11:25:15 »
Ok, ahora si lo entiendo.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1300 en: 12 de Febrero de 2013, 15:17:52 »
Buenas a todos,

Tras sacar un poco tiempo he podido hacer pruebas con el Bus CAN, y la verdad que no son buenas noticias.

He conectado la BUS MONITOR MCP2515 de microchip para enviar tráfico, esnifarlo y verlo en el PC.

He empezado haciendo pruebas enviando tramas para que mi tarjeta las reciba.

Pero no recibía nada.
Tras realizar un debug he comprobado que no entra en la interrupción para atenderla.
Me he puesto a revisar el Hardware y nada, está bien, la trama llega al pin del PIC32MX534F064H. (Mirado por osciloscopio).

Creo que puede ser por lo siguiente:

Software:

No está bien configurada el CAN y sobre todo el tema de las interrupciones. Os pego el código de la transmisión y de la interrupción para ver si me podeis ayudar, que por más que lo miro lo veo bien.

Código: C
  1. void CAN1Init(void)
  2. {
  3.     CAN_BIT_CONFIG canBitConfig;
  4.     UINT baudPrescalar;
  5.  
  6.     /*Ponemos el módulo CAN en modo configuración*/
  7.     CANEnableModule(CAN1,TRUE);
  8.     CANSetOperatingMode(CAN1, CAN_CONFIGURATION);
  9.     /*Esperamos hasta que entre en modo configuración*/
  10.     while(CANGetOperatingMode(CAN1) != CAN_CONFIGURATION);
  11.  
  12.     /*Configuramos el reloj del módulo CAN*/
  13.     canBitConfig.phaseSeg2Tq            = CAN_BIT_3TQ;
  14.     canBitConfig.phaseSeg1Tq            = CAN_BIT_3TQ;
  15.     canBitConfig.propagationSegTq       = CAN_BIT_3TQ;
  16.     canBitConfig.phaseSeg2TimeSelect    = TRUE;
  17.     canBitConfig.sample3Time            = FALSE;
  18.     canBitConfig.syncJumpWidth          = CAN_BIT_1TQ;
  19.  
  20.     CANSetSpeed(CAN1,&canBitConfig,SYSTEM_FREQ,CAN_BUS_SPEED);
  21.  
  22.     /*Asignamos el tamaño del Búfer*/
  23.     CANAssignMemoryBuffer(CAN1,CAN1MessageFifoArea,(2 * 8 * 16));
  24.  
  25.     /*Seleccionamos las FIFOS                     */
  26.     /*FIFO0 para Tx                               */
  27.     /*FIFO1 para Rx                               */
  28.     /*FIFO0 con RTR deshabilitado y prioridad baja*/
  29.     /*FIFO1 recepción del mensaje completo*/
  30.     CANConfigureChannelForTx(CAN1, CAN_CHANNEL0, 8, CAN_TX_RTR_DISABLED, CAN_LOW_MEDIUM_PRIORITY);
  31.     CANConfigureChannelForRx(CAN1, CAN_CHANNEL1, 8, CAN_RX_FULL_RECEIVE);
  32.  
  33.     /*Configuramos Filtros y máscaras         */
  34.     /*Filtro0 para aceptar SID 0x201          */
  35.     /*Máscara0 para comparar todos los ID     */
  36.     /*El mensaje debe ser almacenado en FIFO1 */
  37.     CANConfigureFilter      (CAN1, CAN_FILTER0, 0x001, CAN_SID);
  38.     CANConfigureFilterMask  (CAN1, CAN_FILTER_MASK0, 0x7FC, CAN_SID, CAN_FILTER_MASK_IDE_TYPE);
  39.     CANLinkFilterToChannel  (CAN1, CAN_FILTER0, CAN_FILTER_MASK0, CAN_CHANNEL1);
  40.     CANEnableFilter         (CAN1, CAN_FILTER0, TRUE);
  41.  
  42.     /*Habilitamos interrupciones y eventos      */
  43.     /*Habilitamos la recepción si hay un evento */
  44.     /*Habilitamos la interrupción               */
  45.     CANEnableChannelEvent(CAN1, CAN_CHANNEL1, CAN_RX_CHANNEL_NOT_EMPTY, TRUE);
  46.     CANEnableModuleEvent (CAN1, CAN_RX_EVENT, TRUE);
  47.  
  48.     INTSetVectorPriority(INT_CAN_1_VECTOR, INT_PRIORITY_LEVEL_4);
  49.     INTSetVectorSubPriority(INT_CAN_1_VECTOR, INT_SUB_PRIORITY_LEVEL_0);
  50.     //INTEnable(INT_CAN1, INT_ENABLED);
  51.     IEC1SET = 0x04000000;
  52.  
  53.     /*Ponemos el módulo CAN en modo normal */
  54.     CANSetOperatingMode(CAN1, CAN_NORMAL_OPERATION);
  55.     while(CANGetOperatingMode(CAN1) != CAN_NORMAL_OPERATION);
  56.  
  57.     CANClearModuleEvent(CAN1, CAN_OPERATION_MODE_CHANGE_EVENT);
  58.  
  59. }
  60.  
  61. void __ISR (_CAN_1_VECTOR, ipl4) CAN1Interrupt(void)
  62. {
  63.     /*Verifica si hay un evento en la recepción*/
  64.     if((CANGetModuleEvent(CAN1) & CAN_RX_EVENT) != 0)
  65.     {
  66.         /*Se podría verificar que causó el evento mediante*/
  67.         /*CANGetModuleEvent(), que devuelve el código     */
  68.         /*que representa la prioridad más alta del evento */
  69.         /*pendiente                                       */
  70.                 if(CANGetPendingEventCode(CAN1) == CAN_CHANNEL1_EVENT)
  71.                 {
  72.                     /*Verificamos si se ha producido un evento en la FIFO1    */
  73.                     /*El evento CAN_RX_CHANNEL_NOT_EMPTY es persistente       */
  74.                     /*Se puede leer la FIFO por la interrupción para borrar   */
  75.                     /*la condición de evento o deshabilitar el origen de      */
  76.                     /*de los eventos y hacerlo mediante una función como aquí */
  77.  
  78.                     CANEnableChannelEvent(CAN1, CAN_CHANNEL1, CAN_RX_CHANNEL_NOT_EMPTY, FALSE);
  79.                     messageRx = (CANRxMessageBuffer *)CANGetRxMessage(CAN1,CAN_CHANNEL1);
  80.                     CANUpdateChannel(CAN1, CAN_CHANNEL1);
  81.                     CANClearModuleEvent (CAN1, CAN_RX_EVENT);
  82.                 }
  83.     }
  84.     /*Se borra la bandera de la interrupción  */
  85.     INTClearFlag(INT_CAN1);
  86. }
  87.  
  88.  
  89.  

Os pego tambien el inicio del main por si tuviese algo que ver:
Código: C
  1. void main (void){
  2.  
  3.     /*Ponemos los puertos Analógicos-Digitales*/
  4.     AD1PCFG = 0xFFFF;
  5.     /*Pin del Led como salida*/
  6.     _TRISF3=0;
  7.     _LATF3 = 0;
  8.     /*Pines del CAN como entrada y Salida Respectivamente.*/
  9.     _TRISF0=1; //Tx
  10.     _TRISF1=0;//Entrada
  11.  
  12.     INTEnableSystemMultiVectoredInt();
  13.  
  14.     /*Configuramos CAN1*/
  15.     CAN1Init();
  16.  
  17.  
  18.     while(1){
  19. .....
  20. .....

Respecto al Hardware, creo que puede ser debido a los voltios, me explico, el pic lo tengo alimentado a 3,3V.
El transceiver MCP2551 a 5V
Y entre el pic y el transceiver, la conexión de Tx a Tx y Rx a Rx tengo unos diodos alimentados a 5V para que cuando se reciba se encienda el Led, (En este caso lo hace cuando recibo).

Puede ser que esos 5 voltios hagan que no funcionen bien con los 3,3V del micro??

Un saludo.

POSDATA: se me olvidaba comentar que la fsystema es de 80MHz, y la velocidad del CAN 125000. Los can de la placa MCP2515 está igual.
« Última modificación: 12 de Febrero de 2013, 16:23:25 por MGLSOFT »

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #1301 en: 12 de Febrero de 2013, 16:27:58 »
Una pregunta importante, cual es la velocidad de reloj ??
Tiene habilitado el PLL4 ??
Como calculaste la velocidad ??

Recuerda que una buena parte del protocolo la resuelve el hardware, una vez configurado, rechaza mensajes si no responden al baudrate programado, por lo tanto debes mirar muy bien esto, ya que nunca ocurrirá la interrupción siquiera...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1302 en: 12 de Febrero de 2013, 16:31:03 »
80MHz la frecuencia del reloj y la de los periféricos.

No utilizo oscilador externos. uso el interno.

/*Fsys = 80MHz */
/*Fpb = 80MHz  */
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1

Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #1303 en: 12 de Febrero de 2013, 16:32:57 »
O sea que el CAN tiene reloj de 80 mhz.
Y que velocidad del bus elejiste usar ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1304 en: 12 de Febrero de 2013, 16:36:32 »

#define CAN_BUS_SPEED 125000

La le he liado ahí??

Un saludo.