RS232 to USB converter connection issues — Windows

May 21, 2012

It has been a very long time since I wrote a post. Recently, I had been trying to connect an “old school” data logger to my laptop. The datalogger had an RS232 port and hence I decided to use a USB/Serial converter. I got the drivers installed successfully and the device was also recognized on my Windows 7 machine. 

Unfortunately, I was not able to start logging data. The software provided by the manufacturer was “buggy” and hence would not scan for more than “COM3” port. 

Windows keeps assigning an incremental number to every serial port/virtual COM port devices that are connected to your computer. I came across this document that helps reset the COM port assignments on your machines.

In Linux machines, the device assignment is usually “hot plug”. The device access is more like a file access and I have read somewhere that it has better “security” features compared to Windows.


My Own COM Port GUI

June 9, 2010

I am going to  write about the GUI that I developed for sending data to my PIC development board. I used Liberty BASIC Gold version to develop this GUI.

You may download the demo version for free at http://www.libertybasic.com/. However, there are certain limits for the software and you have to register for a Gold version to enjoy all the features of the software.  The programming window of the software looks like the one shown in the picture below. There are tutorials available in the software which may be accessed as shown in the picture below. You may learn to open a GUI window, add buttons and consequently handle events upon button click  using the simple tutorials. These are  essential elements for our COM port recipe. When you are done with the tutorials,  you would be capable enough to design a small interface as shown in the picture below: Once you are done adding buttons, you must add a functionality to the buttons. For eg: I have added the close window option to Quit button. I am sending a string of information to my controller when I press either of the Forward, Reverse or Neutral buttons.

The algorithm for the same is as follows:

1) Open COM port

2) Send string

3) Close COM port.

Close button press event handle

Note: You have to close the event handles properly once you are done with handling the event of a button press or your code may end with bugs.

The algorithm at the PIC microcontroller end  to receive ASCII string from your computer is as follows:

1) Initialise ports and Set the Baud rate

2) If data received, read the data.

3) If string x is received, move forward

4)If string y is received, move reverse

5)If string z is received, move to neutral position

6) Go to step 2

Please note that I am trying to control a servo motor through serial port.  If you would like to know the operation of a servo motor, please refer to the following link.

I used the MikroC compiler to write the code for serial port communication and servo motor control.

unsigned short i;
void main()
{
TRISB = 0x00;
USART_init(19200);
while(1)
{ if (USART_Data_Ready())
{
i = USART_Read();
i = i-48;
if( i ==1)
{
PORTB = 1;
delay_us(1500);
PORTB = 0;
delay_ms(18);
delay_us(500);
delay_ms(1000);
}
else if(i==0)
{
PORTB = 1;
delay_us(1250);
PORTB = 0;
delay_ms(18);
delay_us(750);
delay_ms(1000);
}
else if(i==2)
{
PORTB = 1;
delay_us(1750);
PORTB = 0;
delay_ms(18);
delay_us(250);
delay_ms(1000);
}
else
{
}
}
}
}

Please note that the baud rate was 19200 bps, 1 stop bit, no parity, no hardware control and the number of bits transmitted was 8.

When you are done coding your PIC, you may create an exe file for your application as follows: You may download the GUI that I developed from the following location.

You may also have a look at my video of operating my servo motor through serial port.


Reading Serial Port Data using VISA in Labview

September 10, 2009

I had been feeling so sleepy today that I wanted to try VISA (Virtual Instrumentation Software Architecture) to read the data from my PIC16F877A microcontroller using the LabVIEW software. Well I did it in a whopping 5 minutes!

Well, the data that is being read is shown in the snapshot below:

LAbview serial port communication

The number of bytes to be read is controlled by the user. However, the data that is being read is displayed in a marquee sequence.

For e.g: When you choose to read a 4 byte data, the fourth byte of data is replaced by a byte with a  shift towards the right when the latest byte of  data arrives at the first bit (left side).

So your data hello would be read as : h –> he –> hel —> and so on. I captured a snapshot when the indicator read ‘hello’ 😉

However, my reading process was interrupted by an error log created everytime. I added an error out constant which made things smooth!

Woohoo!

I shall try adding some features to this VI in future.


PIC serial communication

September 8, 2009

24 July 2009:

I am currently working on serial communication using PIC16F877A. More details to follow.

September 08 2009:

This shows how I procrastinate things. Finally, I achieved it. I have communicated to my PC using PIC16F877A. It took more than 48 hours to achieve this task!

Well! My two cents on serial communications is “Datasheet is your Bible!’

Never digress from the procedure mentioned in the datasheet!

In the rudimentary stages, I blindly followed the rules and I was able to send the letter ‘h’ to the hyper terminal. But I faced problems with the set baud rate of my microcontroller and it was sending some unknown characters to the terminal.

The frequency of my crystal oscillator was 11Mhz. Hence my Baud rate value would be 71 which was arrived at by using the formula given in the data sheet.

The screen shot of the letter h being received at the terminal is shown below!

First data from uC

I had to follow this procedure to declare an array containing the data ‘hello world’ which gives the satisfaction of winning a noble prize to any rookie.

The word ‘hello’ over the terminal  is shown below:

Hell from uCThe Pic 16F877A data sheet can be downloaded from the Microchip website!

The code used for serial port communication was:

#include<pic.h>

void delay(unsigned int n)

{

while(n- -);

}

unsigned char data[17]=” hello world ‘”;

int i;

void main()

{

TRISC = 0x80;

SYNC =0;

SPEN = 1;

TXIE = 1;

TX9 = 0;

BRGH = 1;

GIE = 1;

PEIE = 1;

RCIE = 0;

SPBRG = 71;

while(1)

{

TXEN=1;

}

}

void interrupt isr(void)

{

for(i=0; i<=6; i++)

{

TXREG = data[i];

delay(500);

}

}

Happy Programming!
#include<pic.h>
void delay(unsigned int n)
{
while(n–);
}
unsigned char data[17]=” hello world””;
int i;
void main()
{
TRISC = 0x80;
SYNC =0;
SPEN = 1;
TXIE = 1;
TX9 = 0;
BRGH = 1;
GIE = 1;
PEIE = 1;
RCIE = 0;
SPBRG = 71;
while(1)
{
TXEN=1;
}
}
void interrupt isr(void)
{
for(i=0; i<=6; i++)
{
TXREG = data[i];
delay(500);
}
}