|
|
View previous topic :: View next topic |
Author |
Message |
shashank27187
Joined: 28 Jul 2009 Posts: 13
|
Receiver problem in RS 485 communication |
Posted: Wed Aug 26, 2009 10:29 pm |
|
|
Code for transmitter:
Code: |
/// code for the master PIC or the node A
#include <16F887.h>
#fuses HS, NOWDT, NOLVP, NOPROTECT
#use delay(clock=20000000)
#define RS485_RX_PIN PIN_C7 // Data receive pin
#define RS485_TX_PIN PIN_C6 // Data transmit pin
#define RS485_ENABLE_PIN PIN_B4 // Controls DE pin. RX low, TX high.
#define RS485_RX_ENABLE PIN_B5
#use rs232(baud=9600, xmit=RS485_TX_PIN , rcv=RS485_RX_PIN , enable=RS485_ENABLE_PIN)
#include <rs485.c> //rs485 c driver file is called here
//#include <flex_lcd.c>
int8 msg;
char* p;
int8 size=20;
void main()
{ int j;
// int data_received[32];
//lcd_init();
//output_low(LCD_RW);
rs485_init();
msg=0x01;
p=&msg;
while(1)
{
rs485_wait_for_bus(FALSE);
//send address=0x11, length = 1, msg=3
if(rs485_send_message(0x01, 1, p))
{
//lcd_gotoxy(1,3);
//printf(lcd_putc, "\n sent..\n");
delay_ms(100);
}
delay_ms(5);
}
} |
For receiver:
Code: |
/// code for the slave PIC or the node B
#include <16F887.h>
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT
#use delay(clock=20000000)
#define SLAVE_ID 0x10 //slave ID defined
#include <flex_lcd.c>
#define RS485_RX_PIN PIN_C7 // Data receive pin
#define RS485_TX_PIN PIN_C6 // Data transmit pin
#define RS485_ENABLE_PIN PIN_B4 // Controls DE pin. RX low, TX high.
#define RS485_RX_ENABLE PIN_B5
#include <rs485.c> //rs485 c driver file is called here
#include <stdlib.h>
#use rs232(baud=9600, xmit=RS485_TX_PIN , rcv=RS485_RX_PIN , enable=RS485_RX_ENABLE)
int8 i;
int8 data[32];
void main()
{
rs485_init();
lcd_init();
output_low(LCD_RW);
lcd_putc('\f');
printf(lcd_putc, "initd");delay_ms(500);lcd_putc('\f');
while(1){
printf(lcd_putc, "WL");
delay_ms(200);
//lcd_putc('\f');
if(rs485_get_message(data, FALSE)) //does not enter this loop
{printf(lcd_putc, "a=%d ", data[0]);
delay_ms(300);
lcd_gotoxy(1,1);
printf(lcd_putc, "dl=%d ", data[1]);
delay_ms(300);
lcd_gotoxy(1,1);
printf(lcd_putc, "d=%d ", data[2]);
delay_ms(300);
//lcd_putc('\f');}
}
}
}
|
I have observed the working in the scope. The transmitter works fine.
The scope says that the data is coming up to the Rx pin of the receiver PIC but is not read.
Is there any problem with the code??
I have tried to work out with interrupts but that doesn't work either.
Could anybody tell me where I am making mistake. |
|
|
shashank27187
Joined: 28 Jul 2009 Posts: 13
|
|
|
arloedx
Joined: 21 Aug 2009 Posts: 15 Location: Texas
|
|
Posted: Fri Aug 28, 2009 8:49 am |
|
|
Hi,
You are having a similar problem to what I am having. I was unable to get the rs485_get_message to work properly, but I was able to receive the data I was transmitting using this:
Code: |
#include <18f252.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7, stream=PC)
.
.
.
.
int8 in_char = 0;
int8 next_in = 0;
int8 next_out = 0;
int8 msg[64];
char PCgetc()
{
in_char = 0;
while(!in_char);
return in_char;
}
typedef struct
{
int8 from_id;
int8 to_id;
int8 length;
int8 data1;
int8 data2;
}receive_buffer;
void main()
{
receive_buffer rb;
.
.
.
rb.from_id = PCgetc();
rb.to_id = PCgetc();
if(rb.to_id == RS485_ID)
{
rb.length = PCgetc();
rb.data1 = PCgetc();
rb.data2 = PCgetc();
printf(lcd_putc, "%c", rb.data1);
}
.
.
.
}
|
Let me know if you come up with a new solution. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|