GOOD MORNING, I MADE A MODBUS COMMUNICATION PROGRAM OVER RS232 THAT WHEN COMPILED ON THE 16F887 WORKS PERFECTLY.
WHEN I RECOMPILE IT FOR THE PIC18F45K22, THE COMMUNICATION DOESN'T WORK AT ALL.
COMPARED TO THE PROGRAM THAT WORKED ON THE PIC 16F887, I ADDED THE UART PORT INITIALIZATION.
BUT IT DOESN'T WORK.
DO I NEED TO ADD FURTHER INSTRUCTIONS?
MODBUS RTU ON PIC 18F45K22
-
- Posts: 3
- http://meble-kuchenne.info.pl
- Joined: Mon Jan 22, 2024 9:35 am
-
- Posts: 3
- Joined: Mon Jan 22, 2024 9:35 am
Re: MODBUS RTU ON PIC 18F45K22
I managed to partially solve the problem.
by inserting this c block:
---------------------------------------------------------
// UART1 - PIC18F45K22 - 9600 bps - 4 MHz - 8N1
// Imposta modalità asincrona
TXSTAbits.SYNC = 0; // Asynchronous mode
TXSTAbits.BRGH = 1; // High speed baud rate
BAUDCONbits.BRG16 = 0; // 8-bit baud rate generator
// Calcolo SPBRG per 9600 bps @ 4 MHz:
// SPBRG = (Fosc / (16 * BaudRate)) - 1
// SPBRG = (4,000,000 / (16 * 9600)) - 1 ≈ 25
SPBRG = 25;
// Abilita UART
RCSTAbits.SPEN = 1; // Abilita seriale (TX/RX)
TXSTAbits.TXEN = 1; // Abilita trasmettitore
RCSTAbits.CREN = 1; // Abilita ricevitore continuo
// Imposta formato 8-N-1
TXSTAbits.TX9 = 0; // 8 bit trasmissione
RCSTAbits.RX9 = 0; // 8 bit ricezione
// Configura i pin RC6 (TX) e RC7 (RX)
TRISCbits.TRISC6 = 0; // TX in uscita
TRISCbits.TRISC7 = 1; // RX in ingresso
---------------------------------------------------------
can establish serial modbus communication,
but I can't establish communication on 485
To initialize the mobus serial communication I add the c5 port for rs485 flow control
// UART1 - PIC18F45K22 - Modbus RTU - 9600 bps - 4 MHz - 8N1
// Controllo direzione RS485 su RC5 (MAX485 DE/RE)
// Configura RC6 (TX) come uscita e RC7 (RX) come ingresso
TRISCbits.TRISC6 = 0;
TRISCbits.TRISC7 = 1;
// Configura RC5 come uscita per controllo direzione RS485
TRISCbits.TRISC5 = 0;
LATCbits.LATC5 = 0; // Inizia in ricezione (DE=0, RE=0)
// Configura UART1 per 9600 bps @ 4 MHz
TXSTAbits.SYNC = 0; // Modalità asincrona
TXSTAbits.BRGH = 1; // Baud rate alta velocità
BAUDCONbits.BRG16 = 0; // Generatore baud a 8 bit
SPBRG = 25; // 9600 bps @ 4 MHz
RCSTAbits.SPEN = 1; // Abilita UART
TXSTAbits.TXEN = 1; // Abilita trasmettitore
RCSTAbits.CREN = 1; // Abilita ricevitore continuo
TXSTAbits.TX9 = 0; // 8 bit trasmissione
RCSTAbits.RX9 = 0; // 8 bit ricezione
---------------------------------------------------------
Could someone please tell me where I am going wrong with the RS485 port initialization
by inserting this c block:
---------------------------------------------------------
// UART1 - PIC18F45K22 - 9600 bps - 4 MHz - 8N1
// Imposta modalità asincrona
TXSTAbits.SYNC = 0; // Asynchronous mode
TXSTAbits.BRGH = 1; // High speed baud rate
BAUDCONbits.BRG16 = 0; // 8-bit baud rate generator
// Calcolo SPBRG per 9600 bps @ 4 MHz:
// SPBRG = (Fosc / (16 * BaudRate)) - 1
// SPBRG = (4,000,000 / (16 * 9600)) - 1 ≈ 25
SPBRG = 25;
// Abilita UART
RCSTAbits.SPEN = 1; // Abilita seriale (TX/RX)
TXSTAbits.TXEN = 1; // Abilita trasmettitore
RCSTAbits.CREN = 1; // Abilita ricevitore continuo
// Imposta formato 8-N-1
TXSTAbits.TX9 = 0; // 8 bit trasmissione
RCSTAbits.RX9 = 0; // 8 bit ricezione
// Configura i pin RC6 (TX) e RC7 (RX)
TRISCbits.TRISC6 = 0; // TX in uscita
TRISCbits.TRISC7 = 1; // RX in ingresso
---------------------------------------------------------
can establish serial modbus communication,
but I can't establish communication on 485
To initialize the mobus serial communication I add the c5 port for rs485 flow control
// UART1 - PIC18F45K22 - Modbus RTU - 9600 bps - 4 MHz - 8N1
// Controllo direzione RS485 su RC5 (MAX485 DE/RE)
// Configura RC6 (TX) come uscita e RC7 (RX) come ingresso
TRISCbits.TRISC6 = 0;
TRISCbits.TRISC7 = 1;
// Configura RC5 come uscita per controllo direzione RS485
TRISCbits.TRISC5 = 0;
LATCbits.LATC5 = 0; // Inizia in ricezione (DE=0, RE=0)
// Configura UART1 per 9600 bps @ 4 MHz
TXSTAbits.SYNC = 0; // Modalità asincrona
TXSTAbits.BRGH = 1; // Baud rate alta velocità
BAUDCONbits.BRG16 = 0; // Generatore baud a 8 bit
SPBRG = 25; // 9600 bps @ 4 MHz
RCSTAbits.SPEN = 1; // Abilita UART
TXSTAbits.TXEN = 1; // Abilita trasmettitore
RCSTAbits.CREN = 1; // Abilita ricevitore continuo
TXSTAbits.TX9 = 0; // 8 bit trasmissione
RCSTAbits.RX9 = 0; // 8 bit ricezione
---------------------------------------------------------
Could someone please tell me where I am going wrong with the RS485 port initialization