I would like to send and receive data between two PIC24F microcontrollers via RS485. Here i'm using SP3485 IC. I've set one microcontroller as transmitter and another one has receiver. My microcontroller has 4 uart. One of the uart(here i use UART4) is connected with RS485 IC(SP3485) for both. As usual data pins 'A' to 'A' and 'B' to 'B' are connected. Below is the image shows which PIC24F pins are connected with RS485 IC. I'm transmitting data from one pic to another pic via RS485. In receiver side i've connected UART1 with hyperterminal for seeing the received data.The problem is While i print the received data in the hyperterminal it shows junk data. I've checked the UART1 its working fine.
Here i just post only UART4 initialize code.
init_processor() { TRISB = 0x46E0;
/******** pps for uart4 **************/
RPINR27bits.U4RXR = 4;
RPOR3bits.RP6R=21; //RP(6)R---> 6th pin of pic(RP6R has RPOR3)
// Init UART4
U4MODE = 0x8000;
U4STA = 0x0000; //Enable Transmission, Clear all flags
U4BRG = 25;
//IFS0bits.U1RXIF = 0; // Clear the Receive Interrupt Flag
//IEC0bits.U1RXIE = 1; // Enable Receive Interrupts
U4MODEbits.UARTEN = 1; // And turn the peripheral on
U4STAbits.UTXEN = 1;
//UART4
void uartsend4( char in_c)
{
while(U4STAbits.UTXBF == 1);
U4TXREG = in_c;
}
void uart4str( char *s)
{
while(*s!='\0')
{
uartsend4(*s);
s++;
}
}
char uartrec4()
{
while(U4STAbits.URXDA == 0);
if (U4STAbits.OERR)
U4STAbits.OERR = 0;
return U4RXREG;
}
}
main.c transmitter:
int main()
{
init_processor();
PORTBbits.RB5=1; //RB5 is RE/DE
while(1)
{
uart4str("Hello\r\n");
Delayms(1000);
}
return 0;
}
main.c receiver:
int main()
[![{
init_processor();
PORTBbits.RB5=0; //RB5 is RE/DE][1]][1]
while(1)
{
uart1str(uartrec4()); //printing received uart4 data in hyperterminal
Delayms(1000);
}
return 0;
}