Serial RS232 Communication for Newbies

After a long time again, While working in FARASBEE, First project I got finally compelled me to study about Serial Communication, the term I heard very long time before. ūüôā Its not that terrifying but ya concepts are bit complication ( at least were for me), In this post I am discussing about the Concept of Serial Communication , its interfacing with Computer using serial terminals and few more stuff that I got while working on this project.

Serial Communication:-

Process of sending 1 bit at a time over a communication channel is Serial Communication. RS232 is the most common and one of the oldest type of Serial Communication protocol still widely used.

RS232 Block Diagram

This is the basic block diagram for serial communication.

Line Driver ( important part) :-

RS232 communication uses voltage upto +15V and it uses inverse logic that is

high | true  1  =  negative voltage,

low | false |0 =  positive  voltage.

Now the question arises Why do we need Line Driver?

Answer is pretty clear : Since these voltages are far too high for modern computer logic, So we do have to use Line Driver. It converts computer logic to High Voltage & output voltage is typically continuous short-circuit safe.

Why does Line receiver required here?

It just inverses the operation of line driver i.e. converts incoming RS232 Signal to voltage safe for computer logic.

UART (Universal Asynchronous Receiver Transmitter) :-

  • The Universal Asynchronous Receiver/Transmitter (UART) takes bytes of data and transmits the individual bits in a sequential fashion.¬†At the destination, a second UART re-assembles the bits into complete bytes.
  • The UART usually does not directly generate or receive the external signals used between different items of equipment. Separate interface devices are used to convert the¬†logic level¬†signals of the UART to and from the external signaling levels.
  • It adds necessary start/stop & Parity bits when transmitting & decode this information when recieving.
  • It operates completely on Logic Voltage.
  • UARTs are called¬†asynchronous, because they don’t use a special clock signal to synchronize with the the remote side. Instead, they use the start/stop bits to identify the data bits in the serial stream.

 This is the theory part. Now back to some practical stuff I learned.

In a UART serial Communication, Line Driver/Receiver shifts voltage level for that TTL is normally used in this chip. Now basic pins you have to consider are Transmitter (Tx), Receiver (Rx) & Ground (GND) in that Line Driver/Receiver IC. Normally for RS232 communication Maxim MAX232 IC is used to change the level from 3.3V to your computer level which is usually at 12V.

Technique to find Tx, Rx & GND from Line Driver/Receiver IC (if you don’t know its datasheet its really hard) that I found after lot of searching is as follows:

To find out the serial console pins on the PCB, you’ll be looking for a populated or unpopulated 4-pin header, which can be far from the SoC (signals are relatively slow) and usually with tracks on the top or bottom layer of the PCB, and connected to the TX and RX.

Once found, you can easily check where is the GND, which is connected to the same ground layer than the power connector. The VCC should be fixed at 3.3V and connected to the supply layer ; the TX is also at 3.3V level, but using a multimeter as an ohm-meter, if you find an infinite resistance between the TX and VCC pins, it means they’re distinct signals (else, you’ll need to find the correct TX or VCC pin). The RX and GND are by default at 0V, so you can check them using the same technique.

If you don’t have a multimeter, a simple trick that usually works is using a speaker or a LED to determine the 3.3V signals.

Now here comes an important term BAUD RATE , Many of us gets confused with Baud Rate and Bit rate, so here is the best place to find its difference BAUD RATE Vs BIT RATE . Now Software part and its tracing will be discussed in my next post.


Sticky-Tweet is my under-graduation Major Project . I am working on Arduino from last one year and after many small experiments, An Idea was in my mind which I am now trying to implement as my Major.

Project in brief :-

LED’s blinking according to coordinates of mouse

This is the experimental set-up I tried using Processing inheriting Arduino Libraries. Objective I wanted to do was to make red and blue coloured LED’s to blink according to the location of mouse’s X- coordinate is whether even or odd when clicked. i.e. When Mouse’s X-coordinate is even Red coloured LED blinks and when it is odd Blue Coloured LED will blink while clicking it including making different sized ellipse on the screen according to clicks.
hardware setting was nothing that hard, just two LEDs connected to pin 13 and pin 12 of arduino. Thats it.

Rest programming in Processing was as following:-

import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
int ledPin1 = 13;
int ledPin2 = 12;
void setup(){
arduino = new Arduino(this, Arduino.list()[0],57600);
arduino.pinMode(ledPin1, Arduino.OUTPUT);
arduino.pinMode(ledPin2, Arduino.OUTPUT);
void draw(){
color c = color(200,0,0);
if(mousePressed == true){
fill(c, 150);
if(mouseX % 2 == 0){
arduino.digitalWrite(ledPin1, Arduino.HIGH);
if(mouseX % 2 == 1){
arduino.digitalWrite(ledPin2, Arduino.HIGH);
arduino.digitalWrite(ledPin2, Arduino.LOW);

Processing using Arduino

Processing is an awesome library for interactive designers. I was reading stuff about it from last 1 month and after trying its example got an idea to implement after synchronising Arduino and processing and outcome was more awesome.
I synchronised arduino with processing library by following this link.

Controlling Fading (brightness) of LED from Potentiometer Using ARDUINO

Posting after so long, Obviously expecting a good stuff from my lab. :), but again I am posting my one more small though important experiment. Its about Controlling Intensity of a LED by varying Potentiometer (as input) using arduino board. Here is the program:

int potIn = 0;                                        // Potentiometer analog input at analog pin 0
int ledPin = 12;                                    // LED at digital Pin 12
int potVal = 0;¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† // Initializing Potentiometer’s input as zero

void setup() {
pinMode(12,OUTPUT);                  // Setting pin 12 as OUTPUT


void loop() {
potVal = analogRead(potIn);         // analog value read at analog pin 0 assigning to potVal
for (int brightness = potVal; brightness <= 200; brightness+=5) {             // for loop for adjusting brightness
analogWrite(ledPin, brightness);                                                                         // value of brightness is analog write to pin 12



Setting whole setup:

Potentiometer had 3 legs out of which middle one is input pin connected to pin 0, whereas pin at one end must be grounded and other end pin must be +5V.

A resistor of 220 ohm between pin 12 and LED must be connected.

LED’s positive leg to output pin 12 and negative leg must be grounded.

Inform me if anyone finds its better and shorter way. see ya guys.