I have a pic microcontroller that I can connect to with a USB to rs232 cable and I can communicate with Modbus protocol
now i want to connect to the pic microcontroller with arduino mega2560
I connected the arduino to rs232 to ttl (max3232) and the max 3232 is connected to the pic
I use this library Modbus RTU Master
and this is my code
#include <ModbusRTUMaster.h>
ModbusRTUMaster modbus(Serial3);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
modbus.begin(9600);
modbus.setTimeout(1000);
}
void loop() {
// put your main code here, to run repeatedly:
modbus.clearExceptionResponse();
modbus.writeSingleHoldingRegister(1,0,0);
Serial.println(modbus.getExceptionResponse());
delay(5000);
}
the result of the modbus.getExceptionResponse() is 0 and the register is not being rewritten
How can I fix this?
you require ethernet functionality for the PIC?
what PIC are you using?
if the PIC has a spare serial port have a look at XPORT Serial-to-Ethernet Wired Device Servers
I have used these in the past, they work well and are easy to configure
right now I'm trying to use the Arduino to write registers on the pic (with no success) and when I'm successful at that ill connect the arduino to ethernet
are you attempting to send control commands over serial from an Arduino to the PIC?
then when that works replace the serial with ethernet?
what Arduino are you using?
I used a USB to rs232 cable and I was successful in doing what I wanted in Windows with a program called Modbus poll I was able to connect to the pic and write holding registers on the pic
Please do not duplicate your questions as doing so wastes the time and effort of the volunteers trying to help you as they are then answering the same thing in different places.
Please create one topic only for your question and choose the forum category carefully. If you have multiple questions about the same project then please ask your questions in the one topic as the answers to one question provide useful context for the others, and also you won’t have to keep explaining your project repeatedly.
Repeated duplicate posting could result in a temporary or permanent ban from the forum.
Could you take a few moments to Learn How To Use The Forum
It will help you get the best out of the forum in the future.
first check the Mega to TTL-RS232 works
run the following code
// Arduino Mega serial1 test
// mega Serial1 pin 18 is Tx
// Serial1 pin 19 is Rx
// for loopback test connect pin 18 to pin 19
// for RS232 shield connect
// Mega pin 18 TXD to TTL/RS232 Tx
// Mega pin 19 RXD to TTL/RS232 Rx
// for loopback test connect 9-pin D_type connector pins 2 Tx to 3 Rx (pin 5 is GND)
// connect GND pins together and VCC to 5V
void setup() {
Serial.begin(115200); // initialise serial monitor port
Serial1.begin(115200); // initialise Serial1
Serial.write("Arduino Mega Serial1 test - for loopback test connect pin 18 to pin 19\n");
Serial.write("RS232: Mega pin 18 TXD to TTL/RS232 Tx and pin 19 RXD to TTL/RS232 Rx\n");
Serial.write("RS232 - loopback connect 9-pin D-type pin 2 Tx to pin 3 Rx\n");
}
void loop() {
if (Serial1.available()) { // read from Serial1 output to Serial
Serial.write(Serial1.read());
}
if (Serial.available()) { // read from Serial outut to Serial1
char inByte = Serial.read();
//Serial.write(inByte); // local echo if required
Serial1.write(inByte);
}
}
run the loopback tests, e.g. connect RS232 9pin Dtype connector pins 2 and 3
characters entered on mega serial monitor should echo back to the display
when it work connect the TTL-RS232 modules to the PIC RS232
you will probably require a crossover cable or just connect
TTL_RS232 pin 2 to PIC RS232 pin 3
TTL_RS232 pin 3 to PIC RS232 pin 2
TTL_RS232 pin 5 to PIC RS232 pin 5
this is results of a Mega Serial1 connected to TTL-RS232 mudule connected to Quectel EC21 modem
at
OK
at+cgmi
Quectel
OK
at+cgmm
EC21
OK
at+csq
+CSQ: 20,99
OKOK
at+cimi
+CME ERROR: 3
the TTL-rs232 is connected to the PC using a USB-RS232 cable
I have two Arduino IDE instances launched one connected to Arduino USB serial port and the second instance is connected to a USB-RS232 cable port
by sending a message in either of the serial monitors I receive the message on the second serial monitor meaning the TTL-RS232 is sending and receiving data correctly
when RESET is pressed on the PIC24 trainer the Mega serial monitor displays
Arduino Mega Serial1 test - for loopback test connect pin 18 to pin 19
RS232: Mega pin 18 TXD to TTL/RS232 Tx and pin 19 RXD to TTL/RS232 Rx
RS232 - loopback connect 9-pin D-type pin 2 Tx to pin 3 Rx
UART2 baud rate 57600 set up
PIC24 Mechatronics trainer V1.0 USB V0.3, build date Apr 27 2016
BoardData 26 CANBUSdata 52
CAN enabled normal mode
PIC24 trainer Version 0.3 (<ESC> key will reset the processor)
A = read analogue potentiometer
D = LCD display control
F = display motor Fan RPM
H = Heater control
L = LED control
M = Motor control
Q = read QEI digital potentiometer
S = read switches
T = read temperature of heater
K = read key pad
U = read message from second D-type connector
C = Canus functions
Z = general test
? display this menu
>
the software serial is leftover from previous code snippets that I used i forgot to delete it
can you send me your Arduino code I'm trying to send Modbus function code 16 to my pic
and i don't know how
is it even possible to use Modbus Master Library to communicate with the rs232 port?
I was using ModbusRTUMaster because it had support for rs232 in its documentation but it's not working (or I'm not using it right)