Me gustaría enviar y recibir datos entre dos microcontroladores PIC24F a través de RS485. Aquí estoy usando SP3485 IC. He puesto un microcontrolador como Transmisor y otro tiene receptor. Mi microcontrolador tiene 4 uart. Uno de los uart (aquí uso UART4) está conectado con RS485 IC (SP3485) para ambos. Como de costumbre, los pines de datos 'A' a 'A' y 'B' a 'B' están conectados. A continuación se muestra la imagen que muestra las clavijas PIC24F que están conectadas con RS485 IC. Estoy transmitiendo datos de una imagen a otra foto a través de RS485. En el lado del receptor, he conectado UART1 con el hiperterminal para ver los datos recibidos. El problema es que Mientras imprimo los datos recibidos en el hiperterminio, muestra datos no deseados. He comprobado que el UART1 está funcionando bien.
Aquí solo publico el código de inicialización de UART4.
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!='/******** 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!='%pre%')
{
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;
}
')
{
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;
}