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

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

Desconectado conilete

  • PIC10
  • *
  • Mensajes: 29
Re: Mis experiencias con el BUS CAN
« Respuesta #855 en: 14 de Septiembre de 2010, 07:36:00 »
Weno señores...despues de un tiempo de pruebas, he de decir que ha compilado el programita. Faltaban una serie de archivos necesarios para el main.c y que generaba el CANOpen Design Tool. Tampoco estaba bien configurado las caracteristicas hardware.

Bueno, el programa enviaba un par de PDO's, por lo que estamos ya en disposicion de analizar el trafico que se genera en la red. Para ello, dispongo de la herramienta CANAnalyzer y CANSetter. Estoy en fase de estudio de dicho software, en cuanto obtenga resultados os pongo las graficas y el seguimiento de tramas por aqui en el foro.

Hasta pronto!

Desconectado arielperez

  • PIC10
  • *
  • Mensajes: 10
Re: Mis experiencias con el BUS CAN
« Respuesta #856 en: 21 de Septiembre de 2010, 21:53:49 »
Hola.
Ante todo gracias por la información compartida!. Especialmente a Marcos, mi felicitación por el inmenso aporte y dedicación.
Hechas las menciones, me largo a consultar.
El tema es el siguiente, estoy haciendo un tablero para handball, de esos que controlan tiempo, tanteador de un equipo y otro, etc. Por una cuestión de distancia entre la consola de la mesa de control y el propio tablero, pensé en utilizar CAN.
A partir de lo que estuve leyendo armé dos unidades, cada una posee un PIC18F4585 y un MCP2551. El hardware es extremadamente sencillo y lo he recibido muchas veces para descartar errores en el mismo.
Por lo que les paso el código, muuuy simple pero recién empiezo a meterme en este tema.
Básicamente se presiona un pulsador en una de las unidades, se envía un mensaje y lo debería recibir la otra unidad para así encender un led en consecuencia.
En el programa del tablero utilizo el led para ver en que parte del código estoy. Lamentablemente ni siquiera enciende por 200ms, por lo que no está detectando ningún mensaje.
Si pueden darme una mano se los voy a agradecer infinitamente.
Utilizo un cristal de 10MHz.
Saludos cordiales,
Ariel.

Código: C
  1. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  2. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  3. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  4. /////////////////////////////////////////////////////////////////////////
  5. ////                         TABLERO.C                                       ////
  6. ////                                                                              ////
  7. /////////////////////////////////////////////////////////////////////////
  8.  
  9. #include <18F4585.h>
  10. #define CAN_USE_EXTENDED_ID FALSE
  11. #FUSES NOWDT                    //No Watch Dog Timer
  12. #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
  13. #FUSES HS                       //High speed Osc (> 4mhz)
  14. #FUSES NOPROTECT                //Code not protected from reading
  15. #FUSES BROWNOUT                 //Reset when brownout detected
  16. #FUSES BORV21                   //Brownout reset at 2.1V
  17. #FUSES PUT                      //Power Up Timer
  18. #FUSES NOCPD                    //No EE protection
  19. #FUSES STVREN                   //Stack full/underflow will cause reset
  20. #FUSES NODEBUG                  //No Debug mode for ICD
  21. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  22. #FUSES NOWRT                    //Program memory not write protected
  23. #FUSES NOWRTD                   //Data EEPROM not write protected
  24. #FUSES NOIESO                     //Internal External Switch Over mode enabled
  25. #FUSES FCMEN                    //Fail-safe clock monitor enabled
  26. #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
  27. #FUSES BBSIZ1K                  //1K words Boot Block size
  28. #FUSES NOWRTC                   //configuration not registers write protected
  29. #FUSES NOWRTB                   //Boot block not write protected
  30. #FUSES NOEBTR                   //Memory not protected from table reads
  31. #FUSES NOEBTRB                  //Boot block not protected from table reads
  32. #FUSES NOCPB                    //No Boot Block code protection
  33. #FUSES NOLPT1OSC              //Timer1 is not configured for low-power operation
  34. #FUSES MCLR                     //Master Clear pin enabled
  35. #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
  36.  
  37. #use delay(clock=10000000)
  38.  
  39. #define CAN_DO_DEBUG TRUE
  40. #define Set_250K_Baud
  41. #include "can-18F4580.c"
  42.  
  43.  
  44.  
  45. // Variables send can bus
  46. struct rx_stat rxstat;
  47. int32 rx_id;
  48. int8 rx_len;
  49.  
  50. // Variables reception can bus
  51. int32 tx_id;
  52. int1 tx_rtr=0;
  53. int1 tx_ext=1;
  54. int8 tx_len=1;
  55. int8 tx_pri=3;
  56. int32 rx_id_maestro=5;
  57. int32 id = 1;//del esclavo
  58. int8 datos = 0;
  59. int8 datos_slave=0;
  60.  
  61. void main()
  62. {
  63.    set_tris_d(0x00);  
  64.    tx_id=id;
  65.    datos_slave=0x01;
  66.    can_init(); // Init can bus
  67.    
  68.    
  69.    
  70.    while(TRUE)
  71.    {
  72.       if ( can_kbhit() ) // check for data on the can bus
  73.       {
  74.          output_high(PIN_D0);
  75.          delay_ms(200);
  76.          output_low(PIN_D0);
  77.          delay_ms(200);
  78.          
  79.          can_getd(rx_id, &datos, rx_len, rxstat); // read data can bus
  80.          
  81.          
  82.          if (rx_id_maestro == rx_id)
  83.          {
  84.           output_high(PIN_D0);
  85.           delay_ms(1000);
  86.           output_low(PIN_D0);
  87.           delay_ms(1000);
  88.          }
  89.        //  can_putd(tx_id, &datos_slave, tx_len,tx_pri,tx_ext,tx_rtr); //acuse de recibo
  90.       }
  91.    }
  92. }

Código: C
  1. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  2. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  3. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  4. /////////////////////////////////////////////////////////////////////////
  5. ////                         CONSOLA.C                          ////
  6. ////                                                                 ////
  7. /////////////////////////////////////////////////////////////////////////
  8.  
  9. #include <18F4585.h>
  10. #define CAN_USE_EXTENDED_ID FALSE
  11. #FUSES NOWDT                    //No Watch Dog Timer
  12. #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
  13. #FUSES HS                       //High speed Osc (> 4mhz)
  14. #FUSES NOPROTECT                //Code not protected from reading
  15. #FUSES BROWNOUT                 //Reset when brownout detected
  16. #FUSES BORV21                   //Brownout reset at 2.1V
  17. #FUSES PUT                      //Power Up Timer
  18. #FUSES NOCPD                    //No EE protection
  19. #FUSES STVREN                   //Stack full/underflow will cause reset
  20. #FUSES NODEBUG                  //No Debug mode for ICD
  21. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  22. #FUSES NOWRT                    //Program memory not write protected
  23. #FUSES NOWRTD                   //Data EEPROM not write protected
  24. #FUSES NOIESO                     //Internal External Switch Over mode enabled
  25. #FUSES FCMEN                    //Fail-safe clock monitor enabled
  26. #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
  27. #FUSES BBSIZ1K                  //1K words Boot Block size
  28. #FUSES NOWRTC                   //configuration not registers write protected
  29. #FUSES NOWRTB                   //Boot block not write protected
  30. #FUSES NOEBTR                   //Memory not protected from table reads
  31. #FUSES NOEBTRB                  //Boot block not protected from table reads
  32. #FUSES NOCPB                    //No Boot Block code protection
  33. #FUSES NOLPT1OSC              //Timer1 is not configured for low-power operation
  34. #FUSES MCLR                     //Master Clear pin enabled
  35. #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
  36.  
  37. #use delay(clock=10000000)
  38. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  39.  
  40. #define CAN_DO_DEBUG TRUE
  41. #define Set_250K_Baud
  42. #include "can-18F4580.c"
  43.  
  44.  
  45. #define PRESIONO_PULS_SUBIR  0x201
  46. #define PRESIONO_PULS_BAJAR  0x202  
  47.  
  48. #define BUTTON PIN_D0
  49. #define BUTTON_PRESSED !input(BUTTON)
  50.  
  51.  
  52. // Variables send can bus
  53. struct rx_stat rxstat;
  54. int32 rx_id;
  55. int8 rx_len;
  56.  
  57. // Variables reception can bus
  58. int32 tx_id;
  59. int1 tx_rtr=0;
  60. int1 tx_ext=1;
  61. int8 tx_len=1;
  62. int8 tx_pri=3;
  63. int32 id=5;//del maestro
  64. int32 rx_id_esclavo=1;
  65. int8 datos=0;
  66. int8 datos_slave=0;
  67.  
  68.  
  69.  
  70.  
  71. void main()
  72. {
  73.    tx_id=id;
  74.    
  75.    disable_interrupts(GLOBAL);
  76.    disable_interrupts(INT_TIMER0);
  77.    
  78.    setup_timer_0(RTCC_DIV_2);
  79.    
  80.    enable_interrupts(GLOBAL);
  81.    datos=0xFF;
  82.    
  83.    can_init();    // Init can bus
  84.  
  85.    set_tris_d(0xff);  
  86.    while(TRUE)
  87.    {
  88.      
  89.      
  90.      
  91.       if(BUTTON_PRESSED)
  92.       {
  93.       while(BUTTON_PRESSED){}
  94.       delay_ms(200);
  95.    
  96.       can_putd(tx_id,&datos,tx_len,tx_pri,tx_ext,tx_rtr);//send a byte=0xFF
  97.       }
  98.      
  99.    }//while
  100. }//main
  101.      

« Última modificación: 22 de Septiembre de 2010, 22:54:30 por MGLSOFT, Razón: Editado para que sea mas legible el codigo... »

Desconectado arielperez

  • PIC10
  • *
  • Mensajes: 10
Re: Mis experiencias con el BUS CAN
« Respuesta #857 en: 21 de Septiembre de 2010, 22:20:27 »
Perdón por agregar a lo bestia el código en mi mensaje anterior...
La próxima utilizaré las opciones para hacerlo correctamente.
Saludos cordiales,
Ariel

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7867
Re: Mis experiencias con el BUS CAN
« Respuesta #858 en: 22 de Septiembre de 2010, 23:01:40 »
No hay perdon... :mrgreen: :mrgreen: :mrgreen:

Deberias poner la libreria que usas can-18F4580.c asi vemos si es compatible.
lo mas probable es que no respete la configuracion de velocidad, y este usando la del ejemplo, que si mal no recuerdo es con un cristal de 20 MHz y no deberia funcionar con uno de 10 MHZ.

En estos temas hay que tener cuidado, ya que puede traer problemas... encima inexplicables.

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

Desconectado arielperez

  • PIC10
  • *
  • Mensajes: 10
Re: Mis experiencias con el BUS CAN
« Respuesta #859 en: 22 de Septiembre de 2010, 23:54:01 »
Hola, les dejo el archivo can-18F4580.c sacando algunas funciones que calculo que no interesaban para el análisis.
Yo estoy usando un 18F4585, esto conlleva alguna modificación?.
Muchas gracias por la paciencia y predisposición.
Saludos cordiales,
Ariel.

Código: [Seleccionar]
/////////////////////////////////////////////////////////////////////////
////                        can-18F4580.c                             ////
/////////////////////////////////////////////////////////////////////////
////                                                                 ////
//// Version History                                                 ////
////                                                                 ////
////  Jul 27 04 - can_init() uses CAN_USE_EXTENDED_ID instead of     ////
////              setting all RX filters to extended.                ////
////                                                                 ////
////  Feb 24 04 - can_get_id() fixed for EID<18:20>.                 ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////

#include <can-18F4580.h>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


#if CAN_DO_DEBUG
 #define can_debug printf
#else
 #define can_debug
#endif


//macros
#define can_kbhit() (RXB0CON.rxful || RXB1CON.rxful || B0CONR.rxful || B1CONR.rxful || B2CONR.rxful || B3CONR.rxful || B4CONR.rxful || B5CONR.rxful)
#define can_tbe() (!TXB0CON.txreq || !TXB1CON.txreq || !TXB2CON.txreq || !B0CONT.txreq || !B1CONT.txreq || !B2CONT.txreq || !B3CONT.txreq || !B4CONT.txreq || !B5CONT.txreq)
#define can_abort()                 (CANCON.abat=1)

// current mode variable
// used by many of the device drivers to prevent damage from the mode
//
int curmode;
int curfunmode;

////////////////////////////////////////////////////////////////////////
//
// can_init()
//
//////////////////////////////////////////////////////////////////////////////
void can_init(void) {
   can_set_mode(CAN_OP_CONFIG);   //must be in config mode before params can be set
   can_set_baud();
   curfunmode=0;

   RXB0CON=0;
   RXB0CON.rxm=CAN_RX_VALID;
   RXB0CON.rxb0dben=CAN_USE_RX_DOUBLE_BUFFER;
   RXB1CON=RXB0CON;

   CIOCON.endrhi=CAN_ENABLE_DRIVE_HIGH;
   CIOCON.cancap=CAN_ENABLE_CAN_CAPTURE;

   can_set_id(RX0MASK, CAN_MASK_ACCEPT_ALL, CAN_USE_EXTENDED_ID);  //set mask 0
   can_set_id(RXFILTER0, 0, CAN_USE_EXTENDED_ID);  //set filter 0 of mask 0
   can_set_id(RXFILTER1, 0, CAN_USE_EXTENDED_ID);  //set filter 1 of mask 0

   can_set_id(RX1MASK, CAN_MASK_ACCEPT_ALL, CAN_USE_EXTENDED_ID);  //set mask 1
   can_set_id(RXFILTER2, 0, CAN_USE_EXTENDED_ID);  //set filter 0 of mask 1
   can_set_id(RXFILTER3, 0, CAN_USE_EXTENDED_ID);  //set filter 1 of mask 1
   can_set_id(RXFILTER4, 0, CAN_USE_EXTENDED_ID);  //set filter 2 of mask 1
   can_set_id(RXFILTER5, 0, CAN_USE_EXTENDED_ID);  //set filter 3 of mask 1

   // set dynamic filters
   can_set_id(RXFILTER6, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER7, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER8, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER9, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER10, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER11, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER12, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER13, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER14, 0, CAN_USE_EXTENDED_ID);
   can_set_id(RXFILTER15, 0, CAN_USE_EXTENDED_ID);

   set_tris_b((*0xF93 & 0xFB ) | 0x08);   //b3 is out, b2 is in

   can_set_mode(CAN_OP_NORMAL);
}

////////////////////////////////////////////////////////////////////////
//
// can_set_baud()
////////////////////////////////////////////////////////////////////////
   void can_set_baud(void) {       
 # ifdef Set_125K_Baud {
    BRGCON1 = 0x01;
    BRGCON2 = 0xBA;      //modificado 5/11/07 para usar CAN a 125 KBps
    BRGCON3 = 0x07;      //con reloj a 10 MHz
 }
 #endif
 
 #ifdef Set_250K_Baud {
    BRGCON1 = 0x00;
    BRGCON2 = 0xBA;      //modificado 5/11/07 para usar CAN a 250 KBps
    BRGCON3 = 0x07;      //con reloj a 10 MHz
 }
 #endif
 
 #ifdef Set_500K_Baud {
    BRGCON1 = 0x00;
    BRGCON2 = 0x92;      //modificado 5/11/07 para usar CAN a 500 KBps
    BRGCON3 = 0x02;      //con reloj a 10 MHz
 }
 #endif
   
}


////////////////////////////////////////////////////////////////////////
//
// can_set_mode
////////////////////////////////////////////////////////////////////////
void can_set_mode(CAN_OP_MODE mode) {
   CANCON.reqop=mode;
   while( (CANSTAT.opmode) != mode );
}

////////////////////////////////////////////////////////////////////////
//
// can_set_functional_mode
////////////////////////////////////////////////////////////////////////////////
void can_set_functional_mode(CAN_FUN_OP_MODE mode)
{
   can_set_mode(CAN_OP_CONFIG);   //must be in config mode before params can be set
   ECANCON.mdsel=mode;
   curfunmode=mode;
   can_set_mode(CAN_OP_NORMAL);
}

////////////////////////////////////////////////////////////////////////
//
// can_set_id()
////////////////////////////////////////////////////////////////////////
void can_set_id(int* addr, int32 id, int1 ext) {
   //int *ptr;

   //ptr=addr;

   if (ext) {  //extended
      //eidl
      *addr=make8(id,0); //0:7

      //eidh
      addr--;
      *addr=make8(id,1); //8:15

      //sidl
      addr--;
      *addr=make8(id,2) & 0x03;   //16:17
      *addr|=(make8(id,2) << 3) & 0xE0; //18:20
      *addr|=0x08;


      //sidh
      addr--;
      *addr=((make8(id,2) >> 5) & 0x07 ); //21:23
      *addr|=((make8(id,3) << 3) & 0xF8);//24:28
   }
   else {   //standard
      //eidl
      *addr=0;

      //eidh
      addr--;
      *addr=0;

      //sidl
      addr--;
      *addr=(make8(id,0) << 5) & 0xE0;

      //sidh
      addr--;
      *addr=(make8(id,0) >> 3) & 0x1F;
      *addr|=(make8(id,1) << 5) & 0xE0;
   }
}

////////////////////////////////////////////////////////////////////////////////
//
// can_set_standard_id
////////////////////////////////////////////////////////////////////////////////

void can_set_standard_id(int * addr, int32 id)
{
   //eidl
   *addr=0;

   //eidh
   addr--;
   *addr=0;

   //sidl
   addr--;
   *addr=(make8(id,0) << 5) & 0xE0;

   //sidh
   addr--;
   *addr=(make8(id,0) >> 3) & 0x1F;
   *addr|=(make8(id,1) << 5) & 0xE0;
}

////////////////////////////////////////////////////////////////////////////////
//
// can_set_extended_id
////////////////////////////////////////////////////////////////////////////////

void can_set_extended_id(int * addr, int32 id)
{
   //eidl
   *addr=make8(id,0); //0:7

   //eidh
   addr--;
   *addr=make8(id,1); //8:15

   //sidl
   addr--;
   *addr=make8(id,2) & 0x03;   //16:17
   *addr|=(make8(id,2) << 3) & 0xE0; //18:20
   *addr|=0x08;


   //sidh
   addr--;
   *addr=((make8(id,2) >> 5) & 0x07 ); //21:23
   *addr|=((make8(id,3) << 3) & 0xF8);//24:28
}

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7867
Re: Mis experiencias con el BUS CAN
« Respuesta #860 en: 24 de Septiembre de 2010, 20:22:37 »
Je..je la veo conocida... :D :D
deberia funcionarte aun con un 4585, ya que los registros son identicos...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado reddragon

  • PIC10
  • *
  • Mensajes: 13
Re: Mis experiencias con el BUS CAN
« Respuesta #861 en: 17 de Octubre de 2010, 08:55:33 »
Hola a todos.
Despues de 2 dias, al final he terminado de leer las 44 pagina de este post :-/ .
Mi intencion es montar el esquema que MGLSOFT ha puesto en el mensaje 716 ya que se ve mas sencillo que el de microchip, pero tengo algunas dudas.
MGLSOFT comentas que con este esquema el software y firmware de microchip es completamente compatible, pero con las diferencias que he visto en tu esquema y el de microchip, ¿has tendo que modificar el codigo de microchip para adaptarlo?.
Voy a poner un ejemplo, he visto que usas un dip switch en los pines rc0, rc1 y rc2 del pic, y en el esquema de microchip he visto que rc0 se utiliza para seleccionar la resistencia de fin de linea del can bus(en tu esquema se selecciona con un jumper).

Otra cosa que no entiendo son las dos resistencias que hay colocadas en los pines d+ y d- del usb(r3 y r4) y que no tienen ningun valor colocado, en el esquema de microchip estan marcadas como "DO NOT POPULATE", pero no se que significa.
« Última modificación: 17 de Octubre de 2010, 13:49:51 por reddragon »

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7867
Re: Mis experiencias con el BUS CAN
« Respuesta #862 en: 17 de Octubre de 2010, 22:06:39 »
Hola a todos.
Despues de 2 dias, al final he terminado de leer las 44 pagina de este post :-/ .
Mi intencion es montar el esquema que MGLSOFT ha puesto en el mensaje 716 ya que se ve mas sencillo que el de microchip, pero tengo algunas dudas.
MGLSOFT comentas que con este esquema el software y firmware de microchip es completamente compatible, pero con las diferencias que he visto en tu esquema y el de microchip, ¿has tendo que modificar el codigo de microchip para adaptarlo?.
Voy a poner un ejemplo, he visto que usas un dip switch en los pines rc0, rc1 y rc2 del pic, y en el esquema de microchip he visto que rc0 se utiliza para seleccionar la resistencia de fin de linea del can bus(en tu esquema se selecciona con un jumper).

Otra cosa que no entiendo son las dos resistencias que hay colocadas en los pines d+ y d- del usb(r3 y r4) y que no tienen ningun valor colocado, en el esquema de microchip estan marcadas como "DO NOT POPULATE", pero no se que significa.

Despues que vuelva a repasar ambos circuitos te contesto. Comprenderas que no lo tengo fresco, ya paso algun tiempo... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado reddragon

  • PIC10
  • *
  • Mensajes: 13
Re: Mis experiencias con el BUS CAN
« Respuesta #863 en: 18 de Octubre de 2010, 08:40:04 »
De acuerdo mglsoft, sin prisas.
Gracias.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 663
Re: Mis experiencias con el BUS CAN
« Respuesta #864 en: 24 de Octubre de 2010, 16:35:46 »
Hola buenas tardes, les comento mi inquietud tengo dos placas de arduino la mega y el Duemilanove para las cual quiero usarlas con can bus y tambien dispongo de un modulo can bus que lo compre en mikroelektronika, ahora mi consulta alguien ha usado can bus con arduino y el modulo can de mikroelektronika; en lo personal estoy trabajando en hacer un shield con el modulo de can bus de mikroelektronika para asi usarlo con arduino ya sea el mega o el Duemilanove.

Pero encuanto a expeiencia con can bus y arduino nose como manejarlo pero ya estoy leyendo como controlar el modulo can via protocolo spi.

Saludos y si alguien tiene algun tipo de informacion sobre can bus y arduino bienvenida sea.

Atten.
Alexander Santana.
Barcelona-Venezuela.

Nota: pronto subo mi shield para arduino y modulo can bus de mikroelektronika.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 663
Re: Mis experiencias con el BUS CAN
« Respuesta #865 en: 26 de Octubre de 2010, 11:39:29 »
Hola buenos dias continuando con mi practica con can bus aca subo el hard que pienso usar ya lo tengo todo conmigo y estoy es definiendo detaller.

Saludos y pronto les subo el diagrama de conecciones.
Atten.
Alexander Santana.
Venezuela-Barcelona.


« Última modificación: 26 de Octubre de 2010, 11:52:02 por ASTROCAR »
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 663
Re: Mis experiencias con el BUS CAN
« Respuesta #866 en: 31 de Octubre de 2010, 14:15:40 »
Buenas tardes, aca subo el diagrama de conexion entre mi arduino Duemilanove (Atmega328p) y el modulo CAN-SPI de mikroelektronika.
Vale destacar que el arduino tiene comunicacion rs232 usando el integrado FT232 y asi crear puerto viartual; esto lo mensiono para estar claro con comunicate el arduino con la pc y la aplicacion pienso hacerla en delphi y en una futura practica hare una version con lcd y asi mostrare todo en la lcd y asi no usare la pc para mostrar la informacion con la cual interactuo con can bus.


Saludos y cualquier otra duda estare al pendiente. luego subo el esquema del modulo Can-spi de mikroelektronika para dejar todo bien definido y ahora lo que resta es hacer el codigo para el arduino y la pc para darle vida al proyecto.
Atten.
Alexander Santana.
Venezuela-Barcelona.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado r_romeo

  • PIC10
  • *
  • Mensajes: 3
Re: Mis experiencias con el BUS CAN
« Respuesta #867 en: 04 de Noviembre de 2010, 09:30:50 »
Buenos días a todos, Los felicito por el cursillo de CAN, me he tomado un par de días para leer el foro y estoy pensando en montarme un circuito con nodos CAN para experimentar en casa.
 Una aportación , quizás es que trabajaba en una empresa que utilizaba una conexión compuesta por dos pequeños cables coaxiales para transmitir el CAN y otros dos gruesos para la alimentación
 Seguiré posteando, porque tengo algunas pequeñas dudas

GRACIAS !!!
« Última modificación: 04 de Noviembre de 2010, 09:42:06 por r_romeo »

Desconectado r_romeo

  • PIC10
  • *
  • Mensajes: 3
Re: Mis experiencias con el BUS CAN
« Respuesta #868 en: 04 de Noviembre de 2010, 10:10:58 »
Estimados Maestros,  tengo una duda en el ejemplo de aplicación de filtro


una cosa que no entendí con respecto al ejemplo, es que en binario 6F0 = 11011110000

entonces para mi el filtro seria = 110 1111 XXXX, en vez de     101 1111 XXXX

estoy haciendo algo mal?





recapitulando para aceptar identificadores de mensaje del 7F0 al 7FF, el regisro mascara y filtro queda asi...

                         mascara= 111 1111 0000
                          filtro     = 111 1111 XXXX


suponiendo el caso de que el rango identificador sea distinto al anterior por ejemplo del 6F0 al 6F0 la cosa quedaria asi...

                     mascara= 111 1111 0000
                     filtro      = 101 1111 XXXX



Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 663
Re: Mis experiencias con el BUS CAN
« Respuesta #869 en: 05 de Noviembre de 2010, 09:04:10 »
Hola buenos dias, Aca coloco el link del esquema del mudulo CAN-SPI que uso con el arduino es de la gente de mikroelektronika.
link esquema

Saludos y cualquier cosa estamos en contacto.
Atten.
alexander Santana.
Venezuela-Barcelona.
« Última modificación: 06 de Noviembre de 2010, 08:26:07 por ASTROCAR »
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE