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

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

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Mis experiencias con el BUS CAN
« Respuesta #1170 en: 08 de Marzo de 2012, 15:21:44 »
 Esto me esta gustando :evil: !!
 Hoy he probado 3 nodos separados entre ellos  por 4m, encienden y apagan led a distancia, mñn quiero probar algo mas , enviar arrays de datos. He usado 2 pic18f4685 y un 16f877 con su  controlador can MCP2515.
 He visto algunos esquemas y si he comprobado que la RS del MCP2551 si la ponemos directamente a GND se calienta  mucho y si ponemos un  valor grande no envia los datos, como no tenia de 10Ohm, con 100 va bien en esta distancia.

 Me gustaria usar un pic 18f4550  para poderme comunicar mediante  usb al ordenador, tendria que añadirle MCP2515 y tambien me gustaria crear un mini web para ver algunos parametros con el  adaptador
http://www.ebay.es/itm/280706213546?ssPageName=STRK:MESINDXX:IT&_trksid=p3984.m1436.l2649 

 ¿como lo veis?  es posible unir las dos cosas por spi no? Gracias! Mñn mas!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1171 en: 08 de Marzo de 2012, 17:21:39 »
la RS se pone a GND cuando la velocidad es muy alta como 1Mbps, yo lo tengo asi y no se calienta apenas.

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Mis experiencias con el BUS CAN
« Respuesta #1172 en: 08 de Marzo de 2012, 19:57:20 »
Pues entonces algo habra  ma , en mi circuito jeje!

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Mis experiencias con el BUS CAN
« Respuesta #1173 en: 09 de Marzo de 2012, 18:08:43 »
 Buenas de nuevo..
 Esta tarde he empezado de nuevo hacer cosillas y  no me funciona... muy raro ayer estaba  perfecto.. lo unico que hice fue quiar los cable del bus can y esta mañana he estado  encendida las placas perono tenian el cable de comunicacion puesto... ¿los MCP2551 se han podido extropear? gracias

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7838
Re: Mis experiencias con el BUS CAN
« Respuesta #1174 en: 09 de Marzo de 2012, 18:15:50 »
Muy difícil que ocurra algo así.
Debes haber puesto alguno invertido, o no tienes resistencias terminadoras del bus...
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 #1175 en: 09 de Marzo de 2012, 18:24:57 »
a mi se me han kemado muchos mcp2551, con un osciloscopio te das cuenta facil.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7838
Re: Mis experiencias con el BUS CAN
« Respuesta #1176 en: 09 de Marzo de 2012, 18:49:04 »
Yo solo recuerdo quemar uno por insertarlo al revés en el zócalo, luego no...
Y eso que llevo la alimentación de tensión a mi placa en la misma bornera del CAN, o sea tengo +V, CanH, CanL y -V, en ese orden en una bornera desenchufable que me permite alimentar y poner en red una placa sin mas que enchufar ese conector.
Hice muchas veces desconexiones de una placa en el bus sin que se note otra cosa que esa dejo de transmitir, y cuando la vuelvo a enchufar, vuelve a funcionar sin mas.
Eso es típico de CAN, bastante difícil de ver en otros buses de comunicación.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Mis experiencias con el BUS CAN
« Respuesta #1177 en: 09 de Marzo de 2012, 18:52:14 »
Pues uno de ellos no tenia puesta la resistencia y ha estado conectado mucho rato aunque no enviaba nada...  pues vaya entonces pedire unos poquitos mcp2551 por lo que pueda pasar. Lo del osciloscopio no tengo :(

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1178 en: 09 de Marzo de 2012, 19:36:43 »
A mi ha pasado varias veces apagando una placa antes que la otra, osea a una le kito corriente y la otra la dejo encendida. Se puede comprobar porque el mcp2551 se pone a mucha temperatura. Desconozco porque pasa esto.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7838
Re: Mis experiencias con el BUS CAN
« Respuesta #1179 en: 09 de Marzo de 2012, 22:13:34 »
Puede ser..
En mi caso es imposible apagarlo sino lo desconectas del bus tambien... :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Mis experiencias con el BUS CAN
« Respuesta #1180 en: 10 de Marzo de 2012, 06:59:34 »
Hola a todos.

No se porque no funciona si es la cosa aparentemente mas sencilla del mundo

Código: [Seleccionar]
#include <18f46k80.h>  //archivo de cabecera
#fuses HSH,MCLR,NOWDT,NOPROTECT,NODEBUG,NOPLLEN,NOFCMEN// fuses  configurados
#use delay(clock=8M)     // Clock en la entrada CPU,Cristal externo 12Mhz*pll4=48Mhz OJO PLL enabled
#include <stdlib.h>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,bits=8)


#define CAN_USE_EXTENDED_ID FALSE
#include <can-18xxx8.c>
void main(){

   int i;
   int out_data[8];
   int32 tx_id=24;
   int1 tx_rtr=0;
   int1 tx_ext=0;
   int tx_len=8;
   int tx_pri=3;

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);

   //inicialización del buffer
   for(i=0;i<8;i++) {
    out_data[i]=1;
   }
   can_init();

while(1){
delay_ms(1000);
i=can_putd(tx_id,out_data, tx_len,tx_pri,tx_ext,tx_rtr); //put data on transmit buffer
         if (i != 0xFF) { //success, a transmit buffer was open
            printf("\r\nPUT %U: ID=%LU LEN=%U ", i, tx_id, tx_len);
            printf("PRI=%U EXT=%U RTR=%U\r\n   DATA = ", tx_pri, tx_ext, tx_rtr);
            for (i=0;i<tx_len;i++) {printf("%X ",out_data[i]);}
            printf("\r\n");
         }
         else {printf("\r\nFAIL on PUTD\r\n");}
}
}//fin main

Estoy tratando de programar una placa para ver si el modulo CAN del pic se activa y envia señales a los pines del puerto B para monitoriarlo con el osciloscopio, pero nada, está muerto :S

Por otra parte el 18f46k80 tiene este pinout


Y revisando la libreria ccs del can (can-18xxx8.c) en la funcion can_init() aparece al final como dispone los puertos
Código: [Seleccionar]
   set_tris_b((*0xF93 & 0xFB ) | 0x08);   //b3 is out, b2 is in
¿que podrá pasar?

un saludo
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Mis experiencias con el BUS CAN
« Respuesta #1181 en: 10 de Marzo de 2012, 07:35:13 »
Confirmado! muerieron los mcp2551.... he encontrado otro y me ha funcionado , pero otra vez he apagado una placa antes que la otra y ha muerto....... uno o los dos.. asi que comprare  bastantes para seguir con mis pruebas.. jejee

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7838
Re: Mis experiencias con el BUS CAN
« Respuesta #1182 en: 10 de Marzo de 2012, 09:13:10 »
Diego:
Porque no revisas en la hoja de datos del PIC, que son las funciones adicionales que tienen los pines del CAN (B2 y B3) porque se ven muchas opciones, tal vez tengas que deshabilitar algún Fuse que en otros no existen, ademas en la parte de CAN es posible que encuentres como se configura en la hoja de datos...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Mis experiencias con el BUS CAN
« Respuesta #1183 en: 10 de Marzo de 2012, 10:43:12 »
Hola MGLSOFT

Al final era una aparente tonteria. Digo aparente porque si bien los transceptores del USART por ejemplo envian niveles TTL al transceptor max232 por ejemplo) parece que en CAN no, y el transceptor mcp2551 juega un papel activo entre el modulo ECAN del pic y el propio transceptor  (corregirme si me equivoco)

El caso es que ahora veo las tramas del bus CAN. He usado un pic18f26k80 para enviar continuamente un vector de 8bits que se incrementan cada 2 segundos. Puedo ver en el osciloscopio como las lineas CANL y CANH van funcionando, y se puede ver que envia correctamente puesto que los bits se van incrementando continuamente.

Por tanto ahora el problema esta en el nodo receptor. Un pic18f46k80+mcp2551 Voy a poner los codigos por si veis algo. Vuestro ojo esta mas entrenado que el mio con esto del CAN porque es la primera vez que lo uso jeje
Un saludo!1

Nodo Enviador: pic18f26k80+mcp2551. Pin23pic(cantx)->pin1mcp      Pin24pic(canrx)->Pin4mcp
Código: [Seleccionar]
#include <18f26k80.h>  //archivo de cabecera
#fuses HSH,MCLR,NOWDT,NOPROTECT,NODEBUG,NOPLLEN,NOFCMEN// fuses  configurados
#use delay(clock=8M)     // Clock en la entrada CPU,Cristal externo 12Mhz*pll4=48Mhz OJO PLL enabled
#include <stdlib.h>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,bits=8)


#define CAN_USE_EXTENDED_ID FALSE
#include <can-18xxx8.c>

void main(){
can_init();


can_set_mode(CAN_OP_CONFIG);

BRGCON1.brp=9;
BRGCON1.sjw=0;
BRGCON2.prseg=2;
BRGCON2.seg1ph=5;
BRGCON2.sam=FALSE;
BRGCON2.seg2phts=FALSE; 
BRGCON3.seg2ph=5;
BRGCON3.wakfil=FALSE;

can_set_mode(CAN_OP_NORMAL);

   int i,value=0;
   int out_data[8];
   int32 tx_id=0;
   int1 tx_rtr=0;
   int1 tx_ext=1;
   int tx_len=8;
   int tx_pri=3;

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   //inicialización del buffer
   for(i=0;i<8;i++) {
    out_data[i]=0;
   }

while(1){
for(i=0;i<8;i++) {
    out_data[i]=value;
   }
delay_ms(2000);
if(value>255){value=0;}else{value++;}
i=can_putd(tx_id,out_data, tx_len,tx_pri,tx_ext,tx_rtr); //put data on transmit buffer
         if (i != 0xFF) { //success, a transmit buffer was open
            printf("\r\nPUT %U: ID=%LU LEN=%U ", i, tx_id, tx_len);
            printf("PRI=%U EXT=%U RTR=%U\r\n   DATA = ", tx_pri, tx_ext, tx_rtr);
            for (i=0;i<tx_len;i++) {printf("%X ",out_data[i]);}
            printf("\r\n");
         }
         else {printf("\r\nFAIL on PUTD\r\n");}
}
}//fin main


Nodo Recptor: Pic18f46k80+mcp2551. Pin35pic(cantx)->pin1mcp      Pin36pic(canrx)->Pin4mcp
Código: [Seleccionar]
#include <18f46k80.h>  //archivo de cabecera
#fuses HSH,MCLR,NOWDT,NOPROTECT,NODEBUG,NOPLLEN,NOFCMEN// fuses  configurados
#use delay(clock=8M)     // Clock en la entrada CPU,Cristal externo 12Mhz*pll4=48Mhz OJO PLL enabled
#include <stdlib.h>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,bits=8)


#define CAN_USE_EXTENDED_ID FALSE
#include <can-18xxx8.c>

void main(){
can_init();


can_set_mode(CAN_OP_CONFIG);

BRGCON1.brp=9;
BRGCON1.sjw=0;
BRGCON2.prseg=2;
BRGCON2.seg1ph=5;
BRGCON2.sam=FALSE;
BRGCON2.seg2phts=FALSE; 
BRGCON3.seg2ph=5;
BRGCON3.wakfil=FALSE;

can_set_mode(CAN_OP_NORMAL);

   int i,value=0;
  //Emisor (aunque no lo uso ahora
   int out_data[8];
   int32 tx_id=0;
   int1 tx_rtr=1;
   int1 tx_ext=0;
   int tx_len=8;
   int tx_pri=3;
   //Receptor
   struct rx_stat rxstat;
   int in_data[8];
   int rx_len;
   int32 rx_id;

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   //inicialización del buffer
   for(i=0;i<8;i++) {
    in_data[i]=0;
   }
printf("Nodo receptor a la escucha...\r\n");
while(1){
if ( can_kbhit() )   //if data is waiting in buffer...
      {
         if(can_getd(rx_id, &in_data[0], rx_len, rxstat)) { //...then get data from buffer
            printf("\r\nGOT: BUFF=%U ID=%LU LEN=%U OVF=%U ", rxstat.buffer, rx_id, rx_len, rxstat.err_ovfl);
            printf("FILT=%U RTR=%U EXT=%U INV=%U", rxstat.filthit, rxstat.rtr, rxstat.ext, rxstat.inv);
            printf("\r\n    DATA = ");
            for (i=0;i<rx_len;i++) {
               printf("%X ",in_data[i]);
            }
            printf("\r\n");
         }
         else {
            printf("\r\nFAIL on GETD\r\n");
         }

      }
}
}//fin main


Gracias por la ayuda :P
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Mis experiencias con el BUS CAN
« Respuesta #1184 en: 10 de Marzo de 2012, 10:49:17 »
Parece que funciona!!

Unos simples problemas de HARDWARE. Podeis emplear el ejemplo de arriba que vale bien!!



« Última modificación: 10 de Marzo de 2012, 11:02:43 por Diego Gonzalez »
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home


 

anything