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

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

Desconectado quirogaareal

  • PIC16
  • ***
  • Mensajes: 180
Re: Mis experiencias con el BUS CAN
« Respuesta #405 en: 29 de Abril de 2008, 09:01:51 »
Perdon tienes razon:


Aqui esta el encabezado


#include <18F258.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOOSCSEN                 //Oscillator switching is disabled, main oscillator is source
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES PUT                      //Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads

#use delay(clock=20000000)





y aqui la libreria can 18xxx





/////////////////////////////////////////////////////////////////////////
////                        can-18xxx8.c                             ////
//// CAN Library routines for Microchip's PIC18Cxx8 and 18Fxx8 line  ////
////                                                                 ////
//// This library provides the following functions:                  ////
////  (for more information on these functions see the comment       ////
////   header above each function)                                   ////
////                                                                 ////
////    can_init - Configures the PIC18xxx8 CAN peripheral           ////
////                                                                 ////
////    can_set_baud - Sets the baud rate control registers          ////
////                                                                 ////
////    can_set_mode - Sets the CAN module into a specific mode      ////
////                                                                 ////
////    can_set_id - Sets the standard and extended ID               ////
////                                                                 ////
////    can_get_id - Gets the standard and extended ID               ////
////                                                                 ////
////    can_putd - Sends a message/request with specified ID         ////
////                                                                 ////
////    can_getd - Returns specifid message/request and ID           ////
////                                                                 ////
////    can_kbhit - Returns true if there is data in one of the      ////
////                receive buffers                                  ////
////                                                                 ////
////    can_tbe - Returns true if the transmit buffer is ready to    ////
////              send more data                                     ////
////                                                                 ////
////    can_abort - Aborts all pending transmissions                 ////
////                                                                 ////
//// PIN_B3 is CANRX, and PIN_B2 is CANTX.  You will need a CAN      ////
//// transeiver to connect these pins to CANH and CANL bus lines.    ////
////                                                                 ////
//// CCS provides an example, ex_can.c, which shows how to use this  ////
//// library.                                                        ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////
////                                                                 ////
//// 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>.                 ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////

#include <can-18xxx8.h>

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


//macros
#define can_kbhit()                 (RXB0CON.rxful || RXB1CON.rxful)
#define can_tbe()                   (!TXB0CON.txreq || !TXB1CON.txreq || !TXB2CON.txreq)
#define can_abort()                 (CANCON.abat=1)


////////////////////////////////////////////////////////////////////////
//
// can_init()
//
// Initializes PIC18xxx8 CAN peripheral.  Sets the RX filter and masks so the
// CAN peripheral will receive all incoming IDs.  Configures both RX buffers
// to only accept valid valid messages (as opposed to all messages, or all
// extended message, or all standard messages).  Also sets the tri-state
// setting of B2 to output, and B3 to input (apparently the CAN peripheral
// doesn't keep track of this)
//
// The constants (CAN_USE_RX_DOUBLE_BUFFER, CAN_ENABLE_DRIVE_HIGH,
// CAN_ENABLE_CAN_CAPTURE) are given a default define in the can-18xxx8.h file.
// These default values can be overwritten in the main code, but most
// applications will be fine with these defaults.
//
//////////////////////////////////////////////////////////////////////////////
void can_init(void) {
   can_set_mode(CAN_OP_CONFIG);   //must be in config mode before params can be set
   can_set_baud();

   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(RX0FILTER0, 0, CAN_USE_EXTENDED_ID);  //set filter 0 of mask 0
   can_set_id(RX0FILTER1, 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(RX1FILTER2, 0, CAN_USE_EXTENDED_ID);  //set filter 0 of mask 1
   can_set_id(RX1FILTER3, 0, CAN_USE_EXTENDED_ID);  //set filter 1 of mask 1
   can_set_id(RX1FILTER4, 0, CAN_USE_EXTENDED_ID);  //set filter 2 of mask 1
   can_set_id(RX1FILTER5, 0, CAN_USE_EXTENDED_ID);  //set filter 3 of mask 1

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

   can_set_mode(CAN_OP_NORMAL);
}

////////////////////////////////////////////////////////////////////////
//
// can_set_baud()
//
// Configures the baud rate control registers.  All the defines here
// are defaulted in the can-18xxx8.h file.  These defaults can, and
// probably should, be overwritten in the main code.
//
// Current defaults are set to work with Microchip's MCP250xxx CAN
// Developers Kit if this PIC is running at 20Mhz.
//
////////////////////////////////////////////////////////////////////////
void can_set_baud(void) {
   #ifdef Set_125K_Baud
          {BRGCON1 = 0x03;
           BRGCON2 = 0xBA;
           BRGCON3 = 0x07;//modificado 5/11/07 para usar CAN a 125 KBps         ////con reloj a 20 MHz
 #endif   
 
  #ifdef Set_250K_Baud
  {      BRGCON1 = 0x01;
         BRGCON2 = 0xBA;      //modificado 5/11/07 para usar CAN a 250 KBps
          BRGCON3 = 0x07;      //con reloj a 20 MHz
  }   #endif
 
  #ifdef Set_500K_Baud
  {      BRGCON1 = 0x00;
         BRGCON2 = 0xBA;      //modificado 5/11/07 para usar CAN a 500 KBps
          BRGCON3 = 0x07;     //con reloj a 20 MHz
  }    #endif
 
 
 
  /*
  BRGCON1.brp=CAN_BRG_PRESCALAR;
   BRGCON1.sjw=CAN_BRG_SYNCH_JUMP_WIDTH;

   BRGCON2.prseg=CAN_BRG_PROPAGATION_TIME;
   BRGCON2.seg1ph=CAN_BRG_PHASE_SEGMENT_1;
   BRGCON2.sam=CAN_BRG_SAM;
   BRGCON2.seg2phts=CAN_BRG_SEG_2_PHASE_TS;

   BRGCON3.seg2ph=CAN_BRG_PHASE_SEGMENT_2;
   BRGCON3.wakfil=CAN_BRG_WAKE_FILTER;*/
}

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


////////////////////////////////////////////////////////////////////////
//
// can_set_id()
//
// Configures the xxxxEIDL, xxxxEIDH, xxxxSIDL and xxxxSIDH registers to
// configure the defined buffer to use the specified ID
//
//   Paramaters:
//     addr - pointer to first byte of ID register, starting with xxxxEIDL.
//            For example, a pointer to RXM1EIDL
//     id - ID to set buffer to
//     ext - Set to TRUE if this buffer uses an extended ID, FALSE if not
//
////////////////////////////////////////////////////////////////////////
void can_set_id(int* addr, int32 id, int1 ext) {
   int *ptr;

   ptr=addr;

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

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

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


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

      //eidh
      ptr--;
      *ptr=0;

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

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

////////////////////////////////////////////////////////////////////////
//
// can_get_id()
//
// Returns the ID of the specified buffer.  (The opposite of can_set_id())
// This is used after receiving a message, to see which ID sent the message.
//
//   Paramaters:
//     addr - pointer to first byte of ID register, starting with xxxxEIDL.
//            For example, a pointer to RXM1EIDL
//     ext - Set to TRUE if this buffer uses an extended ID, FALSE if not
//
//   Returns:
//     The ID of the buffer
//
////////////////////////////////////////////////////////////////////////
int32 can_get_id(int * addr, int1 ext) {
   int32 ret;
   int * ptr;

   ret=0;
   ptr=addr;

   if (ext) {
      ret=*ptr;  //eidl

      ptr--;     //eidh
      ret|=((int32)*ptr << 8);

      ptr--;     //sidl
      ret|=((int32)*ptr & 0x03) << 16;
      ret|=((int32)*ptr & 0xE0) << 13;

      ptr--;     //sidh
      ret|=((int32)*ptr << 21);

   }
   else {
      ptr-=2;    //sidl
      ret=((int32)*ptr & 0xE0) >> 5;

      ptr--;     //sidh
      ret|=((int32)*ptr << 3);
   }

   return(ret);
}

////////////////////////////////////////////////////////////////////////
//
// can_putd()
//
// Puts data on a transmit buffer, at which time the CAN peripheral will
// send when the CAN bus becomes available.
//
//    Paramaters:
//       id - ID to transmit data as
//       data - pointer to data to send
//       len - length of data to send
//       priority - priority of message.  The higher the number, the
//                  sooner the CAN peripheral will send the message.
//                  Numbers 0 through 3 are valid.
//       ext - TRUE to use an extended ID, FALSE if not
//       rtr - TRUE to set the RTR (request) bit in the ID, false if NOT
//
//    Returns:
//       If successful, it will return TRUE
//       If un-successful, will return FALSE
//
////////////////////////////////////////////////////////////////////////
int1 can_putd(int32 id, int *data, int len, int priority, int1 ext, int1 rtr) {
   int i;
   int * txd0;
   int port;

   txd0=&TXRXBaD0;

    // find emtpy transmitter
    //map access bank addresses to empty transmitter
   if (!TXB0CON.txreq) {
      CANCON.win=CAN_WIN_TX0;
      port=0;
   }
   else if (!TXB1CON.txreq) {
      CANCON.win=CAN_WIN_TX1;
      port=1;
   }
   else if (!TXB2CON.txreq) {
      CANCON.win=CAN_WIN_TX2;
      port=2;
   }
   else {
      #if CAN_DO_DEBUG
         can_debug("\r\nCAN_PUTD() FAIL: NO OPEN TX BUFFERS\r\n");
      #endif
      return(0);
   }

   //set priority.
   TXBaCON.txpri=priority;

   //set tx mask
   can_set_id(TXRXBaID, id, ext);

   //set tx data count
   TXBaDLC=len;
   TXBaDLC.rtr=rtr;

    for (i=0; i<len; i++) {
      *txd0=*data;
      txd0++;
      data++;
    }

   //enable transmission
   TXBaCON.txreq=1;

   CANCON.win=CAN_WIN_RX0;

   #if CAN_DO_DEBUG
            can_debug("\r\nCAN_PUTD(): BUFF=%U ID=%LX LEN=%U PRI=%U EXT=%U RTR=%U\r\n", port, id, len, priority, ext, rtr);
            if ((len)&&(!rtr)) {
               data-=len;
               can_debug("  DATA = ");
               for (i=0;i<len;i++) {
                  can_debug("%X ",*data);
                  data++;
               }
               can_debug("\r\n");
            }
   #endif

   return(1);
}

////////////////////////////////////////////////////////////////////////
//
// can_getd()
//
// Gets data from a receive buffer, if the data exists
//
//    Returns:
//      id - ID who sent message
//      data - pointer to array of data
//      len - length of received data
//      stat - structure holding some information (such as which buffer
//             recieved it, ext or standard, etc)
//
//    Returns:
//      Function call returns a TRUE if there was data in a RX buffer, FALSE
//      if there was none.
//
////////////////////////////////////////////////////////////////////////
int1 can_getd(int32 id, int *data, int len, struct rx_stat stat)
{
    int i;
    int * ptr;

    if (RXB0CON.rxful) {
        CANCON.win=CAN_WIN_RX0;
        stat.buffer=0;

        CAN_INT_RXB0IF=0;

        stat.err_ovfl=COMSTAT.rx0ovfl;
        COMSTAT.rx0ovfl=0;

        if (RXB0CON.rxb0dben) {
         stat.filthit=RXB0CON.filthit0;
        }
    }
    else if ( RXB1CON.rxful )
    {
        CANCON.win=CAN_WIN_RX1;
        stat.buffer=1;

        CAN_INT_RXB1IF=0;

        stat.err_ovfl=COMSTAT.rx1ovfl;
        COMSTAT.rx1ovfl=0;

        stat.filthit=RXB1CON.filthit;
    }
    else {
      #if CAN_DO_DEBUG
         can_debug("\r\nFAIL ON CAN_GETD(): NO MESSAGE IN BUFFER\r\n");
      #endif
      return (0);
    }

    len = RXBaDLC.dlc;
    stat.rtr=RXBaDLC.rtr;

    stat.ext=TXRXBaSIDL.ext;
    id=can_get_id(TXRXBaID,stat.ext);

    ptr = &TXRXBaD0;
    for ( i = 0; i < len; i++ ) {
        *data = *ptr;
        data++;
        ptr++;
    }

    // return to default addressing
    CANCON.win=CAN_WIN_RX0;

    stat.inv=CAN_INT_IRXIF;
    CAN_INT_IRXIF = 0;

    if (stat.buffer) {
      RXB1CON.rxful=0;
    }
    else {
      RXB0CON.rxful=0;
    }

    #if CAN_DO_DEBUG
       can_debug("\r\nCAN_GETD(): BUFF=%U ID=%LX LEN=%U OVF=%U ", stat.buffer, id, len, stat.err_ovfl);
       can_debug("FILT=%U RTR=%U EXT=%U INV=%U", stat.filthit, stat.rtr, stat.ext, stat.inv);
       if ((len)&&(!stat.rtr)) {
          data-=len;
          can_debug("\r\n    DATA = ");
          for (i=0;i<len;i++) {
            can_debug("%X ",*data);
            data++;
          }
       }
       can_debug("\r\n");
    #endif

    return(1);
}



Recuerda : Si una mujer te ama de verdad no te pedira ni Matrimonio, Ni concubinato , Ni hijos, No te mentira , ni buscara que cambies de opinion con respecto a las tres primeras opciones.

Saludos

desde Cordoba Argentina

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #406 en: 29 de Abril de 2008, 09:08:06 »
Podras poner el caracter que recibes??
En apariencia esta todo bien... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado quirogaareal

  • PIC16
  • ***
  • Mensajes: 180
Re: Mis experiencias con el BUS CAN
« Respuesta #407 en: 29 de Abril de 2008, 10:31:46 »
Hola Marcos:

Ya a la tarde te respondere de los caracteres , por las dudas te envio el circuito ...aunque no creo que este mal.

saludos
Recuerda : Si una mujer te ama de verdad no te pedira ni Matrimonio, Ni concubinato , Ni hijos, No te mentira , ni buscara que cambies de opinion con respecto a las tres primeras opciones.

Saludos

desde Cordoba Argentina

Desconectado quirogaareal

  • PIC16
  • ***
  • Mensajes: 180
Re: Mis experiencias con el BUS CAN
« Respuesta #408 en: 29 de Abril de 2008, 10:40:19 »
Mira  por ej se envia un caracter "A" ..como carater y recibo uno o con dieresis (parece un carácter aleman), otras veces envio la A y me pone donde deberia aparecer el caracter un cuadrado negro , también probe de mandarlo como ascii ...y nada . Eso es en cuanto  al tema caracter. o lo que sea que se quiera enviar

Saludos
Recuerda : Si una mujer te ama de verdad no te pedira ni Matrimonio, Ni concubinato , Ni hijos, No te mentira , ni buscara que cambies de opinion con respecto a las tres primeras opciones.

Saludos

desde Cordoba Argentina

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #409 en: 29 de Abril de 2008, 11:56:44 »
Por que pusiste ese capacitor entre las lineas CANH y CANL ??
Me refiero al capacitor C10 de 100pF.

Existe realmente??
Si es asi prueba cortar una de sus patillas... y comenta como te fue. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado LeoKenobi

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #410 en: 30 de Abril de 2008, 01:07:17 »
Bien, ahora se entiende mejor, no queria equivocar la respuesta, por eso te pedi escribieras en portugues.

Veo que necesitas ayuda sobre el MCP25050, que es un dispositivo magnifico para hacer cosas baratas pero limitadas.
Ya hablamos del mismo aqui en el foro.

Debes saber dos cosas del mismo:
  • debes especificar cuales tareas hara el dispositivo en el bus CAN a la perfeccion, ya que es OTP (One Time Programming)
  • los parametros o direcciones que NO se pueden cambiar luego haciendo uso del BUS CAN son todos aquellos que programan a que velocidad y modo trabajara el dispositivo en el BUS, por razones obvias son los que debes conocer antes que todo

Si bien el resto de los parametros son reprogramables por medio del bus CAN, debes saber que cada vez que el dispositivo pierde su alimentacion, vuelve a los valores con los cuales fue programado, por lo tanto es obvio que si lo programas como deseas de entrada, evitaras tener que reprogramarlo cada vez que reinicies el sistema.

Si mal no entiendo, tienes una placa desarrollo de Microchip, debo advertirte algo, el programa no graba correctamente los valores dentro del MCP25050 (hay mucha info en la WEB, incluso en el mismo foro de Microchip) por lo tanto te sugiero armarte de paciencia y de las herramientas necesarias para poder programarlos sin arruinarlos.

espero te sea de ayuda. :mrgreen: :mrgreen: :mrgreen:

Mestre Marcos, mais uma vez me desculpe pela vergonha com as linguas...

Mas sim, foi de muita ajuda, porque estava na duvida se tinha mais algum parametro critico que podeira arruinar o bichinho, alem da velociade do bus (250 Kbps no projeto) e o modo de trabalho. Embora sabendo que todos os parametros tem de estar de acordo, o mais crítico era não correr o risco de perde-lo, mas tendo a certeza já fico mais tranquilo.

Sobre o programa, acho que interpretei mal o que li então.. porque o que tinha entendido é que o programador do kit da microchip era ruim, e por isso fiz um basedo apenas nos sinais de controle, e não baseado no circuito. Mas se é programa que é ruim, vou verificar outra opção então.

Mais uma vez muito obrigado pela ajuda.
Grande Abraço a todos   

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #411 en: 30 de Abril de 2008, 09:12:25 »
Yo utilize el software que provee Microchip para hacer la aplicacion, el problema es que no guarda la aplicacion en formato .hex, por lo tanto hay que obligarlo a hacerlo.
Cuando fui a programar el chip, mi programador me dijo que el archivo no correspondia con el cheksum, afortunadamente no me dejo grabarlo, sino lo perdia....

La aplicacion la hice con las plantillas que vienen con el MPLAB y las compile con el MPLAB, luego las pase al chip con el ICDS40 que tengo, que permite hacerlo, ya que los programadores de Microchip no lo soportan, salvo los grandes... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado LeoKenobi

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #412 en: 03 de Mayo de 2008, 15:28:30 »
Yo utilize el software que provee Microchip para hacer la aplicacion, el problema es que no guarda la aplicacion en formato .hex, por lo tanto hay que obligarlo a hacerlo.
Cuando fui a programar el chip, mi programador me dijo que el archivo no correspondia con el cheksum, afortunadamente no me dejo grabarlo, sino lo perdia....

La aplicacion la hice con las plantillas que vienen con el MPLAB y las compile con el MPLAB, luego las pase al chip con el ICDS40 que tengo, que permite hacerlo, ya que los programadores de Microchip no lo soportan, salvo los grandes... :mrgreen:

É Mestre marcos, estou realmente apanhando aqui... infelizmente só tenho um ICD2br que não tem a possibilidade de gravar o mcp25050, e mesmo com o gravador operando não consigo fazer o programa da microchip funcionar. Me empolguei tanto quando achei o manual com o esquema e e programa que não tinha pesquisado mais a fundo para saber que não funcionava direito... :(

Bom, acho que vou usar o mcp2515 com 16f628a mesmo... já tinha feito uma tentativa com o 2515 e o 16f877a e funcionou. Mas de qualaquer forma agradeço a ajuda e precisando que alguma coisa daqui por contar.

Grande abraço a todos
Leonardo

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #413 en: 03 de Mayo de 2008, 18:33:11 »
Hola Leo!!
Dime con que lengueje programas??
Si es C de CCS, puede hacerte un adaptador para programar el MCP25050 a traves del ICDS40, del cual hay planos y firmware en la web para hacertelo.
No desistas de utilizarlos, son unos chips excelentes para ciertas aplicaciones, ya que tienen resuelto en el hardware el protocolo CAN...
Si precisas ayuda puedo proporcionartela, escribeme al privado... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #414 en: 05 de Mayo de 2008, 14:50:11 »
Leo, deberias leerte la nota de aplicacion de Microchip AN815 titulada:
Understanding the MCP250XX Devices

Te ayudara a entender estos chips y como programarlos... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado kdaver

  • PIC10
  • *
  • Mensajes: 5
Re: Mis experiencias con el BUS CAN
« Respuesta #415 en: 09 de Mayo de 2008, 17:27:04 »
MGLsoft:

Hola, soy nuevo en este foro y en CAN, y tengo algunas dudas a ver si me las puedes contestar:

1.- ¿los nodos can tiene que armarlos uno mismo o existe en elk mercado un nodo por asi decir "generico", que sirva para conectarlo con otro y poder comunicarse?
2.- ¿es posible utilizar estos nodos en un proyecto de domotica?, por lo que he leido en otros lados, si, pero no he visto ningun proyecto desarrollado.

A mi coterraneo de electrolinux:
Los micros para el protocolo CAN los compraste afuera o existe algun lugar donde poder adquirirlos?

eso, si alguien puede responder a mis preguntas, se agradece!!!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #416 en: 09 de Mayo de 2008, 18:48:19 »
Hola y bienvenido al foro, Kdaver!!

Me gusta tu actitud, a pasar al rio por la parte mas profunda, me haces acordar a mi hace unos años... :mrgreen: :mrgreen:

Respuesta 1:
Hay de todo, desde modulos CAN que hacen lo que quieres, Sniffers para hacer debug o control, software de control, etcetera. Hay buenos y malos, caros y no tan caros, pero te recomendaria te armes de una placa desarrollo que te permita hacer tus experencias sin depender de los demas...

Respuesta 2:
Si que es posible, es mas hay muchos proyectos de domotica que se estan desarrollando sobre este BUS, que es uno de los mas confiables en funcionamiento, ya que fue desarrollado para uno de los ambientes mas hostiles, como es un automovil...

Espero haber respondido bien tus inquietudes, en cuanto a donde conseguir componentes en Chile, no tengo idea, pero hay muchos foristas coterraneos tuyos aqui en el foro, que seguramente podran ayudarte en eso, te sugiero hacer uso del mensaje privado para esas consultas.

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

Desconectado escarpa

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #417 en: 11 de Mayo de 2008, 12:59:12 »
hola!

Os dejo unas preguntas, primero generales, y luego ire indagando más

Es necesario, darle una ID fija a cada nodo?, en tal caso con que función fijais esa ID.
o es posible recibir la trama, sea cual sea, capturar la ID y comparar con una variable donde tenga esa ID.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #418 en: 11 de Mayo de 2008, 21:13:07 »
Hay dos formas en que un nodo CAN recibe y clasifica un mensaje.
La primaria es con una ID, que puede ser fija o si esta hecho el nodo en base a un microcontrolador, puedes modificar una parte o toda la direccion con dip switch, desde los cuales puedes adaptar tu modulo a direcciones distintas a las que normalmente serian fijas.
El segundo modo de clasificar un mensaje para responder o no, es a traves de los filtros de los buffer de recepcion, donde puedes setearlos para recibir una direccion determinada, un rango de direcciones, o simplemente no responder a una o varias direcciones que hayan emitido el mensaje.

Lo que dices en la ultima frase tuya es lo que normalmente hace un nodo, comparar la direccion recibida con la propia a ver si debe o no ejecutar accion alguna... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado betin

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #419 en: 12 de Mayo de 2008, 20:46:18 »
Los recursos del Nodo B son los siguientes:

  • Zócalos para líneas de PIC de 28 y 40 pines, puede usarse un PIC sin CAN o la línea PIC18 con CAN incorporado.
  • Hardware de comunicacion CAN a PC con software CanKing (permite hacer Debug del BUS CAN).
  • Memoria 93C86 con interfaz SPI.
  • Pulsador para pruebas.
  • Conjunto de LEDs en configuración semáforo.
  • Un puerto completo de LEDs.
  • Canal de comunicación serial.
  • Conector ICD / ICSP, para programación In Circuit y Debug.
  • Controlador CAN MCP2515, para utilizar con micros sin CAN incorporado.
  • Selector de origen de Controlador CAN.
  • Hardware de comunicación CAN.


Primero gracias por la respuesta anterior, ahora otra, cuando mencionas el 2515, lo haces vinculado a la frase para utilizar con micros sin CAN incorporado, entonces es posible omitir esta pieza cuando se utilizan chips con CAN incorporado, o es imprescindible para cualquier configuracion.
Me explico si tienes varios chips de cualquier gama que incorporen CAN o ECAN son necesarios los transceivers y el 25050, o los micros se pueden comunicar entre si sin la necesidad de estos