Proteus is a popular microcontroller simulation software that allows you to simulate and debug microcontroller-based designs. It provides a comprehensive suite of tools for simulating various aspects of microcontroller systems, including the microcontroller, peripherals, external interfaces, analog and digital circuit. It is also capable of PCB layout design. One of the useful features of Proteus is its ability to simulate the communication between an Arduino board and a computer using a virtual COM port.
In this article, we'll look at how to set up a virtual COM port in Proteus and use it to control an LED connected to an Arduino board. That is you will learn how to use physical to virtual serial port to communicate with Arduino in Proteus for simulation. We'll use the Arduino Nano as an example in this tutorial, but the same principles apply to other Arduino boards.
Simulating an Arduino board in Proteus
To start, you need to add the Arduino Nano model to your Proteus design from the Proteus library. Also add a LED and a resistor from the library. Place them and make a simple circuit where the LED is connected to the Arduino Nano on pin via a 220Ohm resistor as shown below.
Next, you need to add a RS232 COM port part to your design. To do this, search for "COMPIM" in the Proteus library, then place it on the design schematic editor canvas and add the RXD of the RS232 com port to RX pin of the Arduino. This is as shown below.Setting up the COM port
Now the Arduino is able to receive data from the serial port. However we have to configure the com port component. Right click on the COM port part "COMPIM" and click on edit Properties to open its properties dialog box. In the Properties dialog box, you can set the baud rate, data bits, stop bits, and parity. In this example, we'll set both the physical and virtual baud rate to 9600, physical and virtual data bits to 8, physical and virtual stop bits to 1, and parity to None. See the setting below.
Arduino Program Code for Serial Data
Below is the code to turn on or off an LED connected to pin 9 on an Arduino based on the data received from the serial port:
const int LED_PIN = 9; void setup() { pinMode(LED_PIN, OUTPUT); // Set pin 9 as an output for the LED Serial.begin(9600); // Start the serial communication digitalWrite(9,HIGH); } void loop() { if (Serial.available() > 0) { // Check if there is data available on the serial port int data = Serial.read(); // Read the data if (data == '1') { // If the data is '1' digitalWrite(LED_PIN, HIGH); // Turn on the LED } else if (data == '0') { // If the data is '0' digitalWrite(LED_PIN, LOW); // Turn off the LED } } }
In this code, the LED is connected to pin 9 and the pin is configured as an output in the setup()
function. The serial communication is started with a baud rate of 9600.
In the loop()
function, the code checks if there is any data available on the serial port using the Serial.available()
function. If there is data available, the code reads the data using the Serial.read()
function and checks if the data is either '1' or '0'. If the data is '1', the LED is turned on by setting the digital output of pin 9 to high using the digitalWrite()
function. If the data is '0', the LED is turned off by setting the digital output of pin 9 to low.
With this code, you can control the state of the LED by sending '1' or '0' to the serial port from another device, such as a computer or another microcontroller.
Virtual Serial Port Emulator Program
Next we need to use virtual serial port emulator program that creates an virtual interface between the Proteus COM port part above and the PC/Laptop actual COM port. There are many free virtual serial port emulator software out there which you can easily find by simple google search. Here we will use the Virtual Serial Port Emulator(VSPE).
After downloading and installing the program, open the program to configure the port. Go to Device then select Create. In the Device type option select Connector and click on Next. Then select the com port you want to use. Here COM1 is selected. The click Finish and a new virtual COM1 port is created. Click on the Run button to start the serial port emulation.
Serial Port Terminal
The next program we need is a serial port terminal. Again there are lots of free serial port terminals and here we will use Tera Term. If you don't have a terminal yet, download and install one. Open tera term and select Serial option with COM1 as the com port. Make sure that the term term port is configured with correct baud rate of 9600bps and the data bits and parity bit are also configured correctly. You can configure these settings by going to Setup > Serial Port. See below for this.
You send data with this terminal by typing on the keyboard but you will not see the character or words you typed in. Therefore to see what you have actually typed you have to turn on the local echo option. You can do this by going to Setup then select Terminal and there you have to check mark the Local Echo option as shown below.
Controlling an LED with the virtual COM port
Now that you have set up the virtual COM port, the terminal and connected it to the Arduino, you can use it to control an LED. At this point ensure you have uploaded the above code to the Arduino in Proteus, the VSPE program is running and the tera term terminal is also running.
Click on Run button in Proteus to start the simulation. Then on the tera term type in "1" to turn on the LED and type "0" to turn off the LED. What is happening is that, when we type in "1" or "0", we are sending these values from the PC com port using tera terminal to the emulated COM1 port as shown below.
The emulated COM1 port is configured in the Proteus RS232 COM port. So it receive the data sent from the tera term. The RS232 COM port is connected to the Arduino serial port receiver pin RX or pin 1. Thus Arduino is receiving the data sent from the PC. The Arduino code above reads the incoming serial data and either turns ON or OFF the LED according to whether 1 or 0 is received.Video demonstration
The following video demonstrates how to configure the VSPE, tera term and Arduino to turn on and off the LED.
So in this way we can simulate Arduino with Serial port to send data to Arduino via PC serial com port interface.
References:
[1] Serial communication from PC to Proteus