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

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

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1035 en: 05 de Septiembre de 2011, 00:08:22 »
Ja..ja!!
El foro causa adiccion !! :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1036 en: 06 de Septiembre de 2011, 13:07:40 »
Que debugger usas ??
Yo pondria la orden de encender y apagar un led despues del Kbhit() a ver si realmente pasa por ahi o no.
Si el debug que esperas es por serial, podrias tener mal algo del port serial.

Por otro lado prueba activar el bit rtr en el emisor (ultimo valor de la funcion Can_Put() cen 1), esto obligara a que el esclavo responda cuando recibe un mensaje.

Quedaria asi:
Citar
can_putd(0, &dato, 1, 1, 0, 1);

Ahora ya si que me acabo de liar del todo... Resulta que en modo debugger el pintf de "CCS EXAMPLE" me lo hace correctamente, pero si lo grabo y lo arranco sin conectar el ICD no me lo hace  :shock: :shock: No se que puedo estar haciendo mal.

He puesto a 1 el bit RTR del emisor, pero sigue igual. Para probarlo tengo el printf de "Entro al kbhit()", pero nunca lo hace.

El debugger lo estoy haciendo desde el MPLAB con un ICD3.

Gracias por tu ayuda!


Una prueba mas (el que piense que todo sale de una primera vez, que no entre a este foro!!), intercambia ambas placas y sus programas, asi el que hoy recibe pasa a transmitir y viceversa.
A ver si hay algun problema de hardware...
[/quote]

Bueno, ya me deja grabar, tiene que ser alguna historia con el MPLAB... Te he hecho caso y he intercambiado ambas placas, además he puesto LEDs de TX y RX en los pines TXD y RXD de cada chip de can, el resultado es el siguiente:

Placa emisora: Envía un mensaje cada segundo. Cada vez que envía se encienden ambos leds, el de TXD y el de RXD, supongo que el de RXD se enciende porque recibe la confirmación por parte del otro chip, por poner RTR a 1, no?

Placa receptora: Se enciende el led de TXD cada vez que la otra placa envía un mensaje, no debería encenderse el de RXD??

Gracias de nuevo por tu paciencia y ayuda

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1037 en: 06 de Septiembre de 2011, 14:20:46 »
En la que emite el mensaje es normal que encienda ambos leds (si lo filmaras en alta velocidad y lo pasaras verias encenderse primer el de TX y luego el de RX), o sea que transmite y recibe.
Si el otro responde al RTR quiere decir que entiende lo que le transmiten, hasta ahi vamos bien....

El que recibe puede no encender el led RX por dos cosas, una que el led o el resistor esten mal colocados o calculados, o uno de ellos esta mal.
Si transmite es porque recibio OK, lo del led es un detalle en este momento.

Has avanzado y mucho!! :-/ :-/

Ahora falta saber que es lo que cada uno envia y recibe.
Arranca poniendo en el que recibe una linea que envie por el puerto serie los datos que van y vienen, o simplemente habilita el debug del PIC.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1038 en: 06 de Septiembre de 2011, 15:12:10 »
Bien, y como puedo hacer eso? tengo puesto que cuando entre al kbhit() me envíe un mensaje por el puerto serie y que además me encienda un led, pero nunca lo hace... :?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1039 en: 06 de Septiembre de 2011, 16:05:52 »
Una pregunta tonta, solo para aclararlo antes:
Estas seguro que tus nodos estan conectados entre si con CANH  <<>> CANH    y    CANL <<>> CANL  ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1040 en: 06 de Septiembre de 2011, 16:21:56 »
Si si, eso está todo bien!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1041 en: 06 de Septiembre de 2011, 16:54:45 »
Los pic son 18f2580, los que estas utilizando, no??
Y cargas la libreria del 4580, segun tu codigo??

Tienes un analizador CAN a mano para conectarlo a la linea??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1042 en: 06 de Septiembre de 2011, 17:01:01 »
Ahí me has pillado. que es un analizador can?

Si, utilizo el 2580 y cargo las librerías del 4580, lo único que modifico es la velocidad siguiendo los pasos que hay en el post...

Por cierto, he seguido dandole vueltas y he de decir que en el la placa receptora también se enciende el LED de RXD, pero es rapidísimo y muy tenue!! pero sigue sin hacer la instrucción que está en el kbhit().

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1043 en: 06 de Septiembre de 2011, 17:22:46 »
Un analizador CAN es básicamente una placa que se conecta al bus y sirve para "espiar" los mensajes de ida y vuelta a través de un software en PC que permite hasta detener el análisis para ver con precisión que es lo que pasa en el bus.

Por tu respuesta no lo tienes, así que intenta ver que pasa si desconectas el esclavo, a ver si sigues recibiendo en el transmisor.
Si no es así, se puede probar de poner en modo LoopBack, de ese modo ni precisa salir al bus, y recibe sus propios mensajes, ya si allí no entra en kbhit() me jubilo...je..je

Sacado del archivo can-18F4580.h

Código: C
  1. ////////////////////////////////////////////////////////////////////////////////
  2. ////////////////////////  CAN Control Register /////////////////////////////////
  3. ////////////////////////////////////////////////////////////////////////////////
  4.  
  5. enum CAN_OP_MODE {   CAN_OP_CONFIG=4,
  6.                      CAN_OP_LISTEN=3,
  7.                      CAN_OP_LOOPBACK=2,                       <<<<<<<<<<<<<<<<<<<  ¡¡¡ usar este modo!!!
  8.                      CAN_OP_DISABLE=1,
  9.                      CAN_OP_NORMAL=0 };
  10.  
  11. enum CAN_FUN_OP_MODE { CAN_FUN_OP_LEGACY=0,
  12.                        CAN_FUN_OP_ENHANCED=1,
  13.                        CAN_FUN_OP_ENHANCED_FIFO=2 };
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1044 en: 07 de Septiembre de 2011, 13:39:19 »
No tengo analizador can  :(

Al desconectar la placa emisoraq de mensajes, los LEDs de la receptora dejan de encenderse, así que eso aparentemente está bien.

¿Cómo lo hago para utilizar el modo que me indicas? :oops:

Gracias

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1045 en: 07 de Septiembre de 2011, 15:02:02 »
Sencillo.
Busca en tus archivos la sentencia:

Código: C
  1. CAN_OP_MODE

Esa es la que configura todo, búscalo como tarea y le asignas ese valor que te marque.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1046 en: 07 de Septiembre de 2011, 16:01:56 »
Esos son los valores que me vienen por defecto ¿? :?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1047 en: 07 de Septiembre de 2011, 16:29:07 »
La sentencia Enum lo que hace es enumerar los posibles estados que puede tomar un registro.
Ese registro en particular (si miras la hoja de datos lo encontraras) puede tomar 5 estados, que van de 0 a 4 numericamente hablando.
El enumerador lo que hace es que no tengas que trabajar con los valores directamente, sino ya con nombres descriptivos de la opcion elegida.

En este caso deberas elegir el numero 2 o sea CAN_OP_LOOPBACK

La instruccion quedaria asi:
Código: C
  1. CAN_OP_MODE  CAN_OP_LOOPBACK;
« Última modificación: 07 de Septiembre de 2011, 16:31:42 por MGLSOFT »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #1048 en: 07 de Septiembre de 2011, 16:55:12 »
Lo he puesto en el main justo debajo de la función can_init(); quedando así:

can_init();

can_set_mode(CAN_OP_LOOPBACK);

Está así bien? no creo, puesto que sigue sin entrar al kbhit()... (en una de estas me.... pfffff :5])

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #1049 en: 07 de Septiembre de 2011, 17:14:59 »
Lo he puesto en el main justo debajo de la función can_init(); quedando así:

can_init();

can_set_mode(CAN_OP_LOOPBACK);

Está así bien? no creo, puesto que sigue sin entrar al kbhit()... (en una de estas me.... pfffff :5])

Hay que hacerlo asi:

Código: C
  1. CAN_OP_MODE  CAN_OP_LOOPBACK;
  2. can_set_mode(CAN_OP_MODE);
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.