Autor Tema: pic 18f6585 + mcp 2551 comunicação CAN não funciona  (Leído 10695 veces)

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

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
pic 18f6585 + mcp 2551 comunicação CAN não funciona
« en: 12 de Noviembre de 2007, 23:27:35 »
Olá pessoal!

Estou com problemas com este protocolo, queria comunicar dois pic 18f6585 atravéz do protocolo CAN mas não estou conseguindo. Já tentei utilizar as rotinas do CCS mas nem elas funcionaram...
Gostaria de rotinas em c o mais simples possíveis.

Muito Obrigado!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #1 en: 13 de Noviembre de 2007, 08:25:38 »
Cual ejemplo de CCS utilizas??
Deberias modificar el ejemplo del NodoA y el del NodoB para adaptarlos a tu sistema.

Para ayudarte necesitaria que pusieras el esquematico del circuito, para saber la distribucion de pines, etcetera.
Si no tienes un esquema, sirve uno hecho en papel y escaneado, puedes subirlo a rapidshare, por ejemplo, y luego pones el link en el mensaje... :mrgreen:

Ahh!!
Me olvidaba!!
Bienvenido al foro, MAUTV!! :-/ :-/
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #2 en: 15 de Noviembre de 2007, 22:52:19 »
Uso a "can-18F4580"

testei a comunicação ontem a noite e ela está funcionando, porém apenas consegui ver a ID, já os dados recebidos não...

Como uso as rotinas ?
como declaro as variáveis?

can_getd(ID, &data[0], len, status)
can_putd(0xAA,data,1,3,1,0)

Muito Obrigado..

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #3 en: 16 de Noviembre de 2007, 09:10:38 »
Contra que equipo esta funcionando tu comunicacion CAN??
Si es uno solo en el otro extremo esta bien que tengas la resistencia de fin de linea siempre colocada, pero si es mas de uno, deberias quitarla en los modulos que no estan en los extremos, se entiende??

Dices que usas la libreria del 4580 en tu ejemplo??
Esta libreria no declara a los pines RB2 y RB3 como los de comunicacion CAN??
Que version de Proteus utilizas??
No tengo el mcp2551 en la mia...

Pongo tu imagen aqui para verla en detalle:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #4 en: 19 de Noviembre de 2007, 07:41:39 »
Ok!
A resistencia esta apenas em uma das placas!
Transmito a ID, e recebo a ID corretamente, mas o dado da transmisão não chega corretamente, testo com um display, escrevendo a ID e o dado recebido... entendeu?

Já ajustei na biblioteca para modificar o TRIS, colocando na porta G do pic...

Sobre o proteus o modulo mcp2551 não existe, porem criei apenas para demosntrar a ligação que fiz...

Muito obrigado pela ajuda!

obs: como posto uma imagem, sem ser link da net?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #5 en: 19 de Noviembre de 2007, 08:46:07 »
Uso a "can-18F4580"

testei a comunicação ontem a noite e ela está funcionando, porém apenas consegui ver a ID, já os dados recebidos não...

Como uso as rotinas ?
como declaro as variáveis?

can_getd(ID, &data[0], len, status)
can_putd(0xAA,data,1,3,1,0)

Muito Obrigado..

Creo que aqui esta tu problema:
Citar
can_putd(0xAA,data,1,3,1,0)
La función Can_Putd() necesita que le pases el puntero de un array de hasta 8 bytes, tu le estas pasando solo una variable (data), por eso no es capaz de mostrarte los datos enviados por el BUS CAN.

Aqui estoy haciendo un hilo sobre el BUS CAN, te invito a seguirlo y ayudarme a plantear nuevos ejercicios, para aclarar un tema que es poco tratado en el foro.
http://www.todopic.com.ar/foros/index.php?topic=19182.msg139520;boardseen#new
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #6 en: 19 de Noviembre de 2007, 09:00:32 »
OK! Realmente pode ser isso, mas mesmo mandando apenas um byte??

vou tentar hoje a tarde.. :lol:

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #7 en: 19 de Noviembre de 2007, 09:09:04 »
El lenguaje C es muy estricto, cuando espera un puntero, mas vale le mandes un puntero!! :mrgreen:
O deberas atenerte a las consecuencias!!! :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #8 en: 19 de Noviembre de 2007, 18:46:08 »
ainda não funcionou:
Placa 1:

void main (void)
{
int8 data[3]={0,0,0};

data[0]=123;

PORTF=0X00;
TRISF=0X00;

can_init();

while(1)
  {
  while(can_putd(0xAA,data[0],1,3,1,0)==0);
  RF7=1;
  delay_ms(1500);
  RF7=0;
  delay_ms(1500);
  }
}

Placa 2:

void main (void)
{
int32 ID;
int8 data[3]={0,0,0};
int8 X;
int8 len;
struct rx_stat status;
int8 OK1[20]={"CONFIGURACAO OK"};
int8 OK2[20]={"MENSAGEM RECEBIDA"};
int8 TEXTO[20]={"A ID FOI ACEITA"};
int8 F[20]={"VALOR TX=    "};

can_init();
GLCD_MODE(1);
GLCD_ESCREVE(0,0,OK1,1,1);

while (1)
  {
  if ( can_kbhit() )
    {
     GLCD_ESCREVE(0,10,OK2,1,1);
     if(can_getd(ID, &data[0], len, status))
       {
       if (ID == 0xAA)
         {
         GLCD_ESCREVE(0,20,TEXTO,1,1);
         X=data[0];
         //X=22;
         F[10]=(X/100)+0x30;
         F[11]=((X%100)/10)+0x30;
         F[12]=((X%100)%10)+0x30;
         GLCD_ESCREVE(0,30,F,1,1);
         }
       }
    }
  }
}

O valor do dado transmitido é sempre errado...

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #9 en: 19 de Noviembre de 2007, 19:02:02 »
Ops... erro encontrado

while(can_putd(0xAA,data[0],1,3,1,0)==0);

onde o correto é

while(can_putd(0xAA,data,1,3,1,0)==0);

muito obrigado pelas dicas.. :-/

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #10 en: 19 de Noviembre de 2007, 19:08:50 »
Como estan puestos los ID de cada placa y los filtros de recepcion??
Puede que alli este el problema.
Tambien podrias poner el modulo CAN en modo loopback, y revisar con el display o el puerto serial que llega nuevamente... :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: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #11 en: 19 de Noviembre de 2007, 19:11:30 »
¿¿ :shock:??
Y no te funcionaba por eso??? :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #12 en: 20 de Noviembre de 2007, 08:08:34 »
Agora funciona, apos detectar o erro que te falei anteriormente...

funciona muito bem.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #13 en: 20 de Noviembre de 2007, 08:36:12 »
Mira esto, de la hoja de datos del MCP2551:

Citar
1.4.1 HIGH-SPEED
High-speed mode is selected by connecting the RS pin
to VSS. In this mode, the transmitter output drivers have
fast output rise and fall times to support high-speed
CAN bus rates.
:shock:

Citar
1.4.2 SLOPE-CONTROL
Slope-control mode further reduces EMI by limiting the
rise and fall times of CANH and CANL. The slope, or
slew rate (SR), is controlled by connecting an external
resistor (REXT) between RS and VOL (usually ground).
The slope is proportional to the current output at the RS
pin. Since the current is primarily determined by the
slope-control resistance value REXT, a certain slew rate
is achieved by applying a respective resistance.
Figure 1-1 illustrates typical slew rate values as a
function of the slope-control resistance value.

Luego tienes una resistencia de 10K en el pin RS, esto te lleva a utilizar una baja rata de velocidad, ahora caigo en que mi placa esta mal aquí, eso explica que deba utilizar las resistencias terminadoras.

Si tu velocidad de comunicación esta por debajo de 125 KBPs esto estará bien, si tu velocidad es de 125 KBPs hasta 1000 KBPs deberas cambiarla por otro valor según las tablas.... :mrgreen:

Una buena forma de comprobar si está bien es quitar las resistencias de fin de línea, eso te indicará cuanto de bien has seleccionado tus parámetros.

Te invito a visitar el hilo que estoy llevando sobre el tema CAN, y participarnos allí con tus avances y experiencias!!  :lol:
Este es el Tema
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MAUTV

  • PIC10
  • *
  • Mensajes: 15
Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
« Respuesta #14 en: 21 de Noviembre de 2007, 08:38:05 »
OK! Muito obrigado pela dica, realmente passou sem sem ver este detalhe, utilizei o software q vc postou para calcular os registradores do baund rate, porem os pelos cálculos deveria ser uma comunicação lenta, 12,5KBPs, com um cristal de 10MHz e PLL x 4, mas não encontrei este valor no osciloscópio... :mrgreen:

Como devo calcular este valor ?

do inicio da transmissão até o final?

Obrigado novamente...



 

anything