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.


Make your PIC18F4550 talk to your PC via USB

April 13, 2010

I have always fancied PIC USB communication. I bought a PIC USB development board from Rhydolabz. I am going to write about making your PIC’s USB port communicate to the PC.

You would be requiring the Microchip USB Stack to start.  After having downloaded the USB Stack, execute the exe file to install the USB stack. Once the USB stack is installed, proceed to the directory where your “Microchip Solutions” folder could be found.

You should be able to find a file by name picdemfsusb.hex under Precompiled Demos/Factory Hex Files folder inside your Microchip Solutions Directory. My development board came with a pre-loaded bootloader. If you are going to use a fresh PIC18F4550 chip, you may have to use the downloader that is readily available in the Microchip Solutions directory. I used a hex download software that came along with  my development board and loaded the picdemfsusb.hex into the controller.

As soon as you hit the reset button of your development board, you must be able to see a New Hardware Found Tab appear in your system tray.

In most of the cases, the hardware may not be recognised by the computer and you may have to install the drivers for your development board when your system asks for it as shown in the figure below:

You would be able to locate the driver files for Microchip Hardware in the respective project folders located inside the directory.

Once you locate the drive files and install them, your system would reflect the installed hardware as shown in the figure below:

You would be able to locate the connected device in Device Manager.

Bingo! You have installed a Microchip hardware to your system!

Write to me if you have questions about this post.


Tact Switches are Culprits

March 10, 2010

Tact switches are culprits

One of the several boards that was populated in order to cater to the needs of students didn’t work to my surprise. I measured the voltage across power supply terminals and between OSC2 and ground. They appeared to be perfect and I was not able to identify why the board wasn’t functional. I forgot to measure the voltage between the MCLR pin and the ground. When, I tried holding my MCLR pin at 5v, my board started working!

I planned to go for a tact switch in order to reset the controller on occasions of “hang-up” of the microcontroller. I had an heated argument with my friend about tact switches while designing this board. My friend told me that ” Tact switches are culprits”. I shrugged off his threat and moved on to taste my own medicine :(.

Tact switch springs are usually of poor quality and they cannot return to their original state on several occasions. In general ,it is advisable to go for debounce logic in your program if you are using a tact switch for any digital input. For reset option, it is advisable to use a power-on reset i.e Your controller resets every time you switch on the power supply.


PIC12F508 — as small as it is

March 3, 2010

I ordered a PIC12F508 from http://www.kitsnspares.com . I assumed that the package of the microcontroller would be a DIP package. It was a MSOP package when it arrived.

A cute little microcontroller

I am trying to develop a customised board for this controller.


The board has been populated and it is ready

February 8, 2010

PICdevelopment board

The board was populated successfully and most of the functional features of the board have turned out to be successful. I am yet to test one of the two voltage comparators available on the board.

The main features of the board include:

  1. PIC16F877A platform
  2. L293D module ( Can drive 2 geared DC motors or 1 stepper motor)
  3. ULN 2003A module for stepper motors
  4. Voltage comparator circuit for LDR based sensor module
  5. Voltage comparator circuit for IR LED – photodiode based sensor modules
  6. Analog Inputs
  7. Seven Segment Display * 4nos
  8. RS232 port
  9. LED outputs to test the comparators/voltage sensors
  10. 8 LEDs to test the outputs of the individual pins of the controller
  11. Plug and play option — Can test it with simple connecting wires across any pin of the microcontroller
  12. Power supply pins to power other add-on boards

Looking foward for your comments!


Functional Features of my development board

February 4, 2010

It had been a long time since the development board was manufactured. I was able to test some of the features of the board. I am done with the H bridge, RS232 communication and the A/D conversion. All were successful.

I realised the importance of input filters only when I blew up the microcontroller by connecting the 12V DC motor to the power supply that is not provided with input filters!

I tried pulse width modulation with my board and I have included  a video that shows the motor running at slow speed in opposite directions.

Interaction of the PIC with the PC using MikroC routines

The MikroC routines for the PIC microcontroller were handy to test my board. In the picture, I was able to send a data to my PIC and echo it back to the PC!

I am yet to program the correct sequence for energising the sequence of the stepper motor coils.


She(Development Board) is ready

January 24, 2010

Finally the board that I had developed is ready. I tested the function of the board with simple PWM program. I provided the output to capture the output using a LED. Though it may not look like a pulse width modulated output, I am happy that the basic functionality of the board is a great success. I believe that the other functionalities are also successful.  I plan to make it open source when the board is fully functional.

I am also enclosing a few photographs of my development board