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

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

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Mis experiencias con el BUS CAN
« Respuesta #1185 en: 04 de Abril de 2012, 20:08:20 »
 Esto parece que ya va funcionando jeje!!   Ya envio  datos  a traves de un programa hecho en c#   de un pic a otro unidos por  Can.. solo puedo enviar  como máximo  con  leng=9, si pongo  leng=10 no me  funciona esto es asi??

  can_putd(ID, &array, leng, priority, ext, rtr);

 Gracias!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1186 en: 04 de Abril de 2012, 20:59:47 »
La cantidad maxima de bytes a enviar por un solo mensaje CAN es de 8 bytes, en realidad deberia darte error cuando pones 9 tambien...
Salvo que hayas definido a la variable array como un string y tome el ultimo byte como fin del string...
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 #1187 en: 04 de Abril de 2012, 22:13:32 »
Pues eso va a ser eso. . mi ultimo es un fin de cadena. Cuando te refieres a 8 byte, quieres decir que se pueden enviar hasta 8 datos de 8 bytes  no? Gracias

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1188 en: 04 de Abril de 2012, 23:11:05 »
No, son solo 8 bytes por mensaje, o sea que cada byte va de 0x00 a 0xFF en hexadecimal o de 0 a 255 en decimal.
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 #1189 en: 05 de Abril de 2012, 06:18:53 »
 Entonces no me cuadra, jejee en cada mensaje se manda  el ID(int32), y un array de 8 bytes, (por  lo que puedo enviar 8 datos de 8bit, es decir 8 int8), SIno es asi algo estoy haciendo  algo raro , por que yo desde el pc envio una trama de 8 char(unsigned int 8) cuando llega al micro ,este le añade   un ID y los envia todo este bloqque, y lo recibe otro pic con un lcd.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1190 en: 05 de Abril de 2012, 08:25:51 »
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

Porque declaras una frecuencia de reloj de 8 mhz en use_delay??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1191 en: 05 de Abril de 2012, 10:21:43 »
Entonces no me cuadra, jejee en cada mensaje se manda  el ID(int32), y un array de 8 bytes, (por  lo que puedo enviar 8 datos de 8bit, es decir 8 int8), SIno es asi algo estoy haciendo  algo raro , por que yo desde el pc envio una trama de 8 char(unsigned int 8) cuando llega al micro ,este le añade   un ID y los envia todo este bloqque, y lo recibe otro pic con un lcd.

Esta bien entonces, el ID no cuenta como dato, solo es para saber quien emite el mensaje, o en un protocolo de alto nivel quien lo emite, que tipo de dispositivo es y que dato es el que envía...
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 #1192 en: 05 de Abril de 2012, 10:29:44 »
Entonces no me cuadra, jejee en cada mensaje se manda  el ID(int32), y un array de 8 bytes, (por  lo que puedo enviar 8 datos de 8bit, es decir 8 int8), SIno es asi algo estoy haciendo  algo raro , por que yo desde el pc envio una trama de 8 char(unsigned int 8) cuando llega al micro ,este le añade   un ID y los envia todo este bloqque, y lo recibe otro pic con un lcd.

Esta bien entonces, el ID no cuenta como dato, solo es para saber quien emite el mensaje, o en un protocolo de alto nivel quien lo emite, que tipo de dispositivo es y que dato es el que envía...
Ok ahora si! gracias!

Desconectado rotting79

  • PIC12
  • **
  • Mensajes: 91
Re: Mis experiencias con el BUS CAN
« Respuesta #1193 en: 15 de Abril de 2012, 15:42:26 »
Ok guys, here is my CAN Bus Board v1, to learn with.
and of course, it couldn't happen without all your help, thanxx to all of you.

Ok chicos, aquí está mi bus CAN Junta v1, para aprender con.
 y, por supuesto, no podía pasar sin su ayuda, Thanxx a todos ustedes.







http://www.flickr.com/photos/79258405@N07/7095107131/in/photostream
« Última modificación: 20 de Abril de 2012, 01:14:17 por rotting79 »
...On November 2nd, a PIC10 became self-aware and decided our fate in __delay_us ( 1 ); ...

Desconectado rotting79

  • PIC12
  • **
  • Mensajes: 91
Re: Mis experiencias con el BUS CAN
« Respuesta #1194 en: 15 de Abril de 2012, 15:44:57 »
here some more

aquí un poco más





« Última modificación: 20 de Abril de 2012, 01:19:18 por rotting79 »
...On November 2nd, a PIC10 became self-aware and decided our fate in __delay_us ( 1 ); ...

Desconectado rotting79

  • PIC12
  • **
  • Mensajes: 91
Re: Mis experiencias con el BUS CAN
« Respuesta #1195 en: 15 de Abril de 2012, 15:48:02 »
and the test

y la prueba

and part of the schematic

y parte de la esquemática





« Última modificación: 20 de Abril de 2012, 01:22:02 por rotting79 »
...On November 2nd, a PIC10 became self-aware and decided our fate in __delay_us ( 1 ); ...

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1196 en: 15 de Abril de 2012, 16:23:19 »
nice boards!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1197 en: 15 de Abril de 2012, 19:50:15 »
Buenas placas!!
Pondras tu esquematico??
Y con que software programas??
A decir verdad me mareas un poco, ya que escribes en Ingles, traduces al español, en las fotos hay escrituras en ingles, portugues y aleman...
Cual es realmente tu idioma original??

Traducido con San Google Traductor...

Nice boards!
And thou shalt put your schematic?
And software programs that your boards?
Indeed tide me a little, as you write in English, translate it into Spanish, in the photos there are scriptures in English, Portuguese and German ...
What is really your original language?
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado rotting79

  • PIC12
  • **
  • Mensajes: 91
Re: Mis experiencias con el BUS CAN
« Respuesta #1198 en: 15 de Abril de 2012, 21:12:51 »
Saint goggle?  good one......... but yes, i use it to traslate to spanish.
Portuguese and German? sorry but i don't speak those lenguages..... u may seen my coumputer pad under my PCB, and it comes with many warranties in many lenguages, u'd probably thought i speak corean or chinese also, wouldn't u? lol.

the only C compiler that i use is CCS, i'd like to learn some others, but man, i'm a old guy, from the old school, u know hard to change old habits.

i thought was a good idea post my work here, because was a good start, and i really think i'm going to learn much more from u guys.........

and of course, if anyone want the schematics, just let me know, and i will post them.

San gafas? bueno ......... pero sí, lo uso a traducir al español.
 Portugués y alemán? lo siento pero no me hablan los lenguajes ..... u puede ver mi libreta coumputer bajo mi PCB, y viene con muchas garantías en muchos lenguajes, u'd probablemente pensó que yo hable coreana o china también, no u? lol.

 el único compilador de C que yo uso es CCS, me gustaría aprender algunos otros, pero el hombre, soy un viejo, de la vieja escuela, tu sabes difícil cambiar viejos hábitos.

 me pareció una buena idea publicar mi trabajo aquí, porque fue un buen comienzo, y realmente creo que voy a aprender mucho más de u guys .........

 y, por supuesto, si alguien quiere los esquemas, sólo házmelo saber, y las pondré.
« Última modificación: 15 de Abril de 2012, 21:32:26 por rotting79 »
...On November 2nd, a PIC10 became self-aware and decided our fate in __delay_us ( 1 ); ...

Desconectado rotting79

  • PIC12
  • **
  • Mensajes: 91
Re: Mis experiencias con el BUS CAN
« Respuesta #1199 en: 15 de Abril de 2012, 21:19:36 »
let me talk about the board:

it has two nodes,
NODE-0 has
-10 LEDs arrays
-2 buttons ( with hardware debounce, i think is better than writting debounce code).
-2 ADC (RA0 & RA1)
- Reset button.
-ICSP
-RS232 port
-CCP1 putput pin

NODE-1 has
-2x16 LCD COG (chip on galss)
-2 buttons
-2 ADC (RA0 & RA1)
-reset button
-ICSP


permítanme hablar sobre el tablero:

 que tiene dos nodos,
 NODO-0 tiene
 -10 LED matrices
 -2 Botones de hardware (con rebote, creo que es mejor que waritting código de rebote).
 -2 ADC (RA0 y RA1)
 - Botón de reposición.
 -ICSP
 -RS232
 -CCP1 pin PUTPUT

 NODO-1 tiene

 -2x16 LCD COG (chip de vidrio)
 -2 botones
 -2 ADC (RA0 y RA1)
 -el botón de reinicio
 -ISCP

 y al final del bus CAN, un filtro y un conector DB9 macho para conectar otro nodo

« Última modificación: 15 de Abril de 2012, 21:45:13 por rotting79 »
...On November 2nd, a PIC10 became self-aware and decided our fate in __delay_us ( 1 ); ...


 

anything