Saludos...
Soy nuevo en el foro, por lo que pido paciencia en lo que domino el uso de este foro. Como comenté en el título del post, tengo un extraño problema con el Bus CAN, estoy tratando de realizar una comunicación mediante pics (en este momento solo dos, un nodo y otro como concentrador), por favor, alguien que me ayude, estoy programando en CCS y empleo el PIC 18F2680 y el 18F2480.
Los archivos de cabecera de mi programa son los siguientes:
#include <18F2480.h>
#include <stdlib.h>
#include <math.h>
#fuses HS,NOWDT,NOPROTECT, NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=20M)
#use rs232(baud=19200, xmit=PIN_C6,rcv=PIN_C7)
#define MAX517_SDA PIN_C0 //pin11 pic al pin4 del max517
#define MAX517_CLK PIN_C1 //pin12 pic al pin3 del max517
#use i2c(master, sda=MAX517_SDA, scl=MAX517_CLK, FAST)
#define CAN_DO_DEBUG TRUE
#include <can-18xxx8.c>
// ------------------------- Variables CAN -----------------------------------
int32 rx_id = 5;
int16 buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int rx_len = sizeof(buffer);
struct rx_stat rxstat;
//------------------------------------------------------------------------------
void main (void)
{
while(1)
{
setup_adc_ports(ALL_ANALOG|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
can_init();
enable_interrupts(GLOBAL);
set_adc_channel(1);
delay_us(20);
yk = read_adc();
buffer[0] = yk;
can_putd(5, &buffer[0], rx_len, 1, 1, 0); //
}
}
para mi concetrador, un PIC18F4680 el codigo es:
#include <18F4680.h>
#include <stdlib.h>
#include <math.h>
#fuses HS,NOWDT,NOPROTECT, NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=20M)
#use rs232(baud=19200, xmit=PIN_C6,rcv=PIN_C7)
#define MAX517_SDA PIN_C0 //pin11 pic al pin4 del max517
#define MAX517_CLK PIN_C1 //pin12 pic al pin3 del max517
#use i2c(master, sda=MAX517_SDA, scl=MAX517_CLK, FAST)
int32 rx_id;
int16 buffer[8];
int16 a = 0;
int rx_len = sizeof(buffer);
int i;
struct rx_stat rxstat;
void main (void)
{
printf("CONCENTRADOR 4680_ID5\n\r");
enable_interrupts(GLOBAL);
can_init();
printf("Running... receptor\n\r");
while(TRUE)
{
can_getd(rx_id, &buffer[0], rx_len, rxstat);
printf("buffer = %Ld\n\r",buffer[0]);
}
}
Por el momento no quiero checar si el identificador corresponde al destinatario, sólo quiero ver si recibe algo
el hardware es el pic y el mcp2551,
PIC MCP
CAN_TX (23) -> TX_MCP(1)
CAN_RX (24) -> RX_MCP(4)
PIN2_VSS
PIN3_VDD
PIN5_NO_CONECTADO
CAN_H del concentrador con el respectivo CAN_H del nodo
CAN_L del concentrador con el respectivo CAN_L del nodo
PIN_8_VSS
¿alguien puede descifrar mi error?, !me urge!