Autor Tema: Ayuda BUS-CAN  (Leído 11271 veces)

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

Deimos

  • Visitante
Re: Ayuda BUS-CAN
« Respuesta #15 en: 14 de Febrero de 2007, 19:30:14 »
El CAN debe trenzarse, además has de colocar la resistencia de 60 ohm cerrando el lazo, como te sale en el datasheet del MCP2551. Mirate bien el data del transceiver, porque si no has calculado bien la resistencia de referencia, no va a ir ni de broma.

Con respecto a la velocidad has lo que quieras, pero no encontraras a nadie en el foro que le meta tanta velocidad a un dsPIC, simplemente porque no se puede. Haz pruebas sin el PLL, simplemente en HS y deberias empezar a ver algo, si es que el programa está bien hecho. Empieza a hacer ensayos a poca velocidad y si ves resultados, entonces le empiezas a poner PLL a todo lo que te deje el micro.

En el osciloscopio verás la trama entera de CAN, pero has de pinchar entre H y L, no entre una linea y masa, recuerda que el CAN es diferencial, no comun.

PD: somos vecinos, lo de tiana es el grupo de astronomia al que pertenezco.

Salu2

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #16 en: 14 de Febrero de 2007, 19:46:10 »
Ok bajare de velocidad, solo haciendo funcionar un nodo para mirar las tramas hace falta la resistencia ? si miro directamente, una pregunta (de programación mas o menos pero electronica...)quieres decir que la sonda del osciloscopio la pinza de tierra la ponga en h y la sonda en l por ejemplo ¿?

Deimos

  • Visitante
Re: Ayuda BUS-CAN
« Respuesta #17 en: 14 de Febrero de 2007, 19:57:45 »
la resistencia siempre hace falta. mira el datasheet del mcp2551.

la pinza en L y la punta de la sonda en H


Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #18 en: 14 de Febrero de 2007, 20:06:47 »
Pero el osciloscopio donde lo conecto, y si no hay cable solo ese nodo puedo mirar la señal ¿no?

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #19 en: 14 de Febrero de 2007, 20:22:08 »
Veo algo a pesar de que el otro nodo no me detecta nada en la interrupcion de entrada, cuando envia sale una trama por debajo y luego sube (el osciloscopio no es digital y no puedo parar ni nada) antes no salia esta trama

Deimos

  • Visitante
Re: Ayuda BUS-CAN
« Respuesta #20 en: 15 de Febrero de 2007, 04:55:23 »
La sonda has de conectarla a la resistencia que cierra el lazo en la salida del mcp2551.

Parece que almenos ves que del micro sale una trama de CAN. Configura bien las velocidades para que el otro nodo entienda lo que le estas mandando, mi asegurate que tanto el identificador como la dirección a donde mandas sean las que tiene el nodo receptor, sino el slave no te devolverá nada.

Aunque el osciloscopio no sea digital, puedes hacer un hold y congelar una sección de la trama, almenos verás si tienes realmente valores digitales o cosas raras.

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: Ayuda BUS-CAN
« Respuesta #21 en: 15 de Febrero de 2007, 05:29:12 »

Buennass:

Quería puntualizar una cosa para que no hayan confusiones con los mips y la frecuencia del oscilador, sin animo de entrometerme ni ofender a nadie.

Deimos
Citar
Trabajando con un PLL x8, tu cuarzo no lo puedes pasar de 4MHz, como bien dice el compañero, con disipador.

Prueba a bajar el valor del PLL, que te saldrá más barato que cambiar el cristal. Quizas a PLL x4 consigas que funcione, aunque 8MHz x 4 son 32MIPS. Mejor usa un cuarzo de 7.3728MHz y el PLL x 4, estarás casi en 30MIPS, casi al límite de la máquina.

Una cosa es la frecuencia del oscilador, que en un dspic junto con el  (PLL) puede llegar a unos 120 Mhz aproximadamente (del dspic que estamos hablando), que son los 30 MIPS famosos, por lo tanto puede trabajar a mas 32 y 64 Mhz, exactamente hasta unos 120 Mhz.

Por lo tanto para trabajar a esa velocidad con el dspic, si es lo que quieres, lo conveniente es que hagas lo te comentaba Deimos, es decir, un cuarzo de 7,3728 Mhz pero el PLL x16, con lo que conseguirás trabajar a unos 118 Mhz, que son casi los 120 Mhz es decir los 30 MIPS máximos, o 32 con disipador como bien ha probado Nocturno.

Espero haber resuelto la confusión en vez de liarla mas.

saludos,


"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: Ayuda BUS-CAN
« Respuesta #22 en: 15 de Febrero de 2007, 05:34:53 »

Pongo aquí un recorte del dsPIC30F Family Reference Manual, para aclarar mas,

página 172

VERSION 1
30F6010,
30F6011,
30F6012,
30F6013,
30F6014


PLL Clock Multiplier:
• 4 MHz-10 MHz input frequency range
• 4x Multiplier mode (FOUT = 16 MHz-40 MHz)
• 8x Multiplier mode (FOUT = 32 MHz-80 MHz)
• 16x Multiplier mode (FOUT = 64 MHz-120 MHz)
• PLL VCO lock indication plus ‘out of lock’ trap option
• PLL input provided by the following sources:
- XT or EC Primary oscillator

saludos,
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #23 en: 15 de Febrero de 2007, 16:49:33 »
Esto a mejorado algo ahora me detecta que llega algo pero me llega una trama vacia (miro lo que va entrando en la variable del buffer y no hay nada....)¿? es el problema de no saber exactamente que proceso realiza el can de manera automatica cuando yo envío una trama y que envía en la trama, por cierto es curioso con el pll x 4 funciona por 8 no (una cosa parecida me paso con el i2c) quizas sea un bug del silicio es la primera revision de los dspic 306014 y sin A.
« Última modificación: 15 de Febrero de 2007, 16:51:58 por zer0 »

Deimos

  • Visitante
Re: Ayuda BUS-CAN
« Respuesta #24 en: 16 de Febrero de 2007, 08:15:21 »
Más que un bug de silicio, yo diria que la resistencia de referencia del mcp2551 no la tienes bien calculada para 8Mz, y cuando has bajado a 4MHz es cuando se ha puesto a funcionar algo. Con el i2c tambien pasa, las pull-up le marcan la velocidad máxima a la que puede ir el i2c. Hay mucha gente que cree que la cuestión es meterle pulsos de reloj y andando, y son los componentes periféricos los que normalmente marcan la velocidad. Lo mismo que los condensadores en los cristales de cuarzo, poner esos condensadores mal hace que el cuarzo no oscile correctamente.

Quizas en el registro de entrada no tienes nada porque no estas poniendo bien la dirección del nodo receptor. Si la dirección no está bien, el nodo no reconoce y por consiguiente no actualiza el registro.

Salu2

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #25 en: 16 de Febrero de 2007, 12:01:35 »
Ese es uno de mis problemas:

Si no te importa mirar esto:

Esta es mi inicializacion del can:


CAN1SetOperationMode(CAN_IDLE_CON & CAN_MASTERCLOCK_1 & CAN_REQ_OPERMODE_CONFIG & CAN_CAPTURE_DIS);
// Baud preescale con Fcy 6,144 sin PLL -> baud rate = 5,144
// Baud preescale con Fcy 6,144 con PLLx4 -> baud rate = 23.576
CAN1Initialize(CAN_SYNC_JUMP_WIDTH2 & CAN_BAUD_PRE_SCALE(23), CAN_WAKEUP_BY_FILTER_DIS  & CAN_PROPAGATIONTIME_SEG_TQ(4) & CAN_PHASE_SEG1_TQ(4) & CAN_PHASE_SEG2_TQ(5) & CAN_SEG2_FREE_PROG & CAN_SAMPLE1TIME);      

// Cargamos el filtro de aceptación de registro.
CAN1SetFilter(0, CAN_FILTER_SID(0) & CAN_RX_EID_EN, CAN_FILTER_EID(0));

// Cargamos la mascara del filtro del registro.
  CAN1SetMask(0, CAN_MASK_SID(0) & CAN_MATCH_FILTER_TYPE, CAN_MASK_EID(0));
      
      
// Configuramos los modos de transmisión y recepción
CAN1SetTXMode(0, CAN_TX_STOP_REQ & CAN_TX_PRIORITY_HIGH );
CAN1SetRXMode(0, CAN_RXFUL_CLEAR & CAN_BUF0_DBLBUFFER_EN);
 CAN1SetOperationMode(CAN_IDLE_CON & CAN_MASTERCLOCK_1 & CAN_REQ_OPERMODE_NOR & CAN_CAPTURE_DIS );
ConfigIntCAN1(0x3F, CAN_INT_PRI_5 & CAN_INT_ENABLE);

Recibo en este vector de interrupción:

oid _ISR _C1Interrupt(void){
   C1EC = 0;          // Ponemos a cero los contadores de error
   C1INTF = 0;       // Deshabilito las interrupciones
   IFS1bits.C1IF = 0;    // Borro el flag de la interrupción
   if((C1INTFbits.TXEP)||(C1INTFbits.RXEP)){
         //C1CTRLbits.ABAT = 1;
         C1CTRL |= 0x400;
         while((C1CTRL & 0x80) == 0);
         C1CTRL &= 0xF800;
      }
   if(!C1TX0CONbits.TXREQ){
      // Buffer 0  está vacio y preparado para la siguiente transmisión.
      
   }
   if (C1RX0CONbits.RXFUL){
       // Mensaje completo en el buffer 0, listo para ser procesado.
       C1RX0CONbits.RXFUL = 0;    // Vaciamos el buffer 0.
   }
}

Y envio así (es una prueba)

void SendBUSCAN(void){
   char * data;

   data = "Microchip";
   CAN1SendMessage((CAN_TX_SID(0)) & CAN_TX_EID_EN & CAN_SUB_NOR_TX_REQ, (CAN_TX_EID(0)) & CAN_NOR_TX_REQ, data, 8, 0);

   while(CAN1IsTXReady(0) == 0){ // Mientras aun no este preparado para la transmisión....
      asm("clrwdt");
   }

}





De momento pongo filtro y mascara a 0,  las dudas que tengo son:

1 Para que sirve CAN_CAPTURE
2 Que es CAN_SYNC_JUMP_WIDTHN
3 Que es CAN_PROPAGATIONTIME_SEG_TQ(N)
4 Que es CAN_PHASE_SEG1_TQ(N)
5 Que es CAN_PHASE_SEG2_TQ(N)
6 Que es CAN_SEG2_FREE_PROG
7 Que es CAN_SAMPLE1TIME
(De la inicializacion no me entero de el significado de casi ningún campo ni mirandolo en el datasheet)

Y por ultimo como se el identificador de un dispositivo o como lo asigno y como envio a un dispositivo en concreto ?




Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #26 en: 16 de Febrero de 2007, 12:37:21 »
Voy avanzando SID y EID son identificador extendido y estandar ¿no?

Debo decir a que nodo (identificador) envio el sendmessage
así ?
   char * data;
   data = "Microchip";
   CAN1SendMessage((CAN_TX_SID(1)) & CAN_TX_EID_EN & CAN_SUB_NOR_TX_REQ, (CAN_TX_EID(1)) & CAN_NOR_TX_REQ, data, 8, 0);

   while(CAN1IsTXReady(0) == 0){ // Mientras aun no este preparado para la transmisión....
      asm("clrwdt");
   }

Envio al can 1 ¿ok?

A ver que tal....

 y quien soy se lo digo con el

CAN1SetFilter(FilterNo, CAN_FILTER_SID(1) & CAN_RX_EID_EN, CAN_FILTER_EID(1));

OK ?

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #27 en: 16 de Febrero de 2007, 13:14:49 »
Ahora el id me funciona me entra cuando es para mi es decir se "direccionarlo"
la mascara como se usa ?

y el siguiente proble ma es que todos los mensajes me lee lo mismo ¿?

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #28 en: 16 de Febrero de 2007, 13:20:23 »
el baud rate se calcula con PLL o sin
Yo tengo un oscilador de 6,144 Mhz
Quiero emitir a 125Kh
Y tengo el PLL x4
Los resultados que me salen son: sin PLL -> baud rate = 5,144  y con PLLx4 -> baud rate = 23.576
Es correcto, cual es el bueno, Gracia sy perdonas las parrafadas, cuand me tire todo os ,lo dejare por aqui

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda BUS-CAN
« Respuesta #29 en: 16 de Febrero de 2007, 13:23:28 »
Me voy a comprar unoc MCP 2551 y luego a casa a seguir con esto (ahora estoy en el curro) Por favor si pasais por aqui leed mis post que estoy un poco desesperado :)