TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: MAUTV en 12 de Noviembre de 2007, 23:27:35

Título: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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!
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT 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!! :-/ :-/
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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..
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT 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:
(http://img401.imageshack.us/img401/7866/imagemcanfa5.jpg)
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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?
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT 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 (http://www.todopic.com.ar/foros/index.php?topic=19182.msg139520;boardseen#new)
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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:
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT 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
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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...
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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.. :-/
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT 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:
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT en 19 de Noviembre de 2007, 19:11:30
¿¿ :shock:??
Y no te funcionaba por eso??? :lol: :lol:
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV en 20 de Noviembre de 2007, 08:08:34
Agora funciona, apos detectar o erro que te falei anteriormente...

funciona muito bem.
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT 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 (http://www.todopic.com.ar/foros/index.php?topic=19182.msg139831;boardseen#new)
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV 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...

Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT en 21 de Noviembre de 2007, 09:05:54
Si tu cálculo esta hecho para 12,5 Kbps, entonces tu resistencia está OK !! :mrgreen:

En cuanto a medir con osciloscopio la señal, recuerda que es una señal diferencial, debes medirla entre los dos terminales del BUS CAN.
Creo que por ahí tengo una nota sobre como medir en DeviceNet, la busco y te la posteo, pero a decir verdad yo nunca medí sobre el BUS, prometo hacerlo apenas pueda, así lo pongo en el hilo... :mrgreen: :mrgreen:

Respecto al cálculo, recuerda que 10 MHz con PLL4 te da una frecuencia de 40 MHz, por eso tu cálculo debería ser:

Setup Criteria

Oscilator Frequency              40,000 MHz
Target CAN Bus Baud Rate    12,500 kbps

Selected Options
BRP-1 (Baud Rate Prescaler)         63
Tq (Time Quanta)                         3,200 µs
Number of Time Quanta                25
% Error of Target Baud Rate          0,0 % (Actual Baud Rate is 12,500 kbps )

Bit Timing Setup in Tq
Propagation Delay                        8
Phase Segment 1                         8
Phase Segment 2                         8
Syncronization Jump Width (SJW)  1

Configuration Register Setup (PIC18) 
Register                       Binary                  Hexadecimal
BRGCON1                 b'00111111'                  0x3F
BRGCON2                 b'10111111'                  0xBF
BRGCON3                 b'00000111'                  0x07


Así los has puesto??
Sino deberías tener cuatro veces mas velocidad en el BUS... :mrgreen: :mrgreen:


Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MAUTV en 23 de Noviembre de 2007, 09:54:21
Foi isso mesmo que coloquei, agora estou com dúvidas se realmente o PIC está trabalhando em 4 x PLL:

Código: [Seleccionar]
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES H4_SW                    //High speed osc with SW enabled 4x PLL
#FUSES NOPROTECT                //Code not protected from reading
#FUSES OSCSEN                   //Oscillator switching is enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No 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 NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOMCLR                   //Master Clear pin used for I/O
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: MGLSOFT en 23 de Noviembre de 2007, 10:23:31
2.5 Phase Locked Loop (PLL)
A Phase Locked Loop circuit is provided as a
programmable option for users that want to multiply the
frequency of the incoming oscillator signal by 4. For an
input clock frequency of 10 MHz, the internal clock
frequency will be multiplied to 40 MHz. This is useful for
customers who are concerned with EMI due to
high-frequency crystals.
The PLL can only be enabled when the oscillator configuration
bits are programmed for High-Speed Oscillator
or External Clock mode. If they are programmed for any
other mode, the PLL is not enabled and the system clock
will come directly from OSC1. There are two types of
PLL modes: Software Controlled PLL and Configuration
bits Controlled PLL. In Software Controlled PLL mode,
PIC18F6585/8585/6680/8680 executes at regular clock
frequency after all Reset conditions.
During execution,
application can enable PLL and switch to 4x clock
frequency operation by setting the PLLEN bit
in the
OSCCON register. In Configuration bits Controlled PLL
mode, PIC18F6585/8585/6680/8680 always executes
with 4x clock frequency.
The type of PLL is selected by programming the
FOSC<3:0> configuration bits in the CONFIG1H
Configuration register. The oscillator mode is specified
during device programming.
A PLL lock timer is used to ensure that the PLL has
locked before device execution starts. The PLL lock
timer has a time-out that is called TPLL.



Deberias revisar el estado del bit PELLEN de OSCCON, a ver como esta durante la marcha del pic, no se como lo maneja CCS...
Título: Re: pic 18f6585 + mcp 2551 comunicação CAN não funciona
Publicado por: ASTROCAR en 10 de Marzo de 2011, 09:15:47
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:
(http://img401.imageshack.us/img401/7866/imagemcanfa5.jpg)

Hola buenos dias estoy haciendo mi esquemadico para un nuevo nodo can bus y lo estoy haciendo en proteus se que proteus no simula  can bus por ende no dispone del mcp2551 pero noto que de igual forma se puede crear de forma representativa me gustaria hacerlo si me puedes ayudar te lo agradesco.

Saludos y estamos en contacto.
Atten.
Alexander Santana.
Venezuela-Barcelona.