Giving the MSP430 a GUI

Sometimes you need to toggle or read a few pins on a microcontroller for a project so simple (or so temporary) that coding some firmware is a rather large investment of time. [Jaspreet] had the same problem – wanting to read values and toggle pins without writing any code – so he came up with a rather clever solution to control an MSP430 through a serial connection.

[Jaspreet] calls his project ControlEasy, and it does exactly as advertised: it provides a software interface to control ADC inputs, PWM outputs, and the state of output pins via a desktop computer. ControlEasy does this with a matching piece of code running on any MSP430 with a hardware UART (like the TI Launchpad) sending and receiving data to the computer.

Right now ControlEasy can read analog values, generate PWM output, and set individual pins high and low. [Jaspreet] plans on expanding his software to allow control of LCDs and I2C and SPI devices.

In the video after the break you can see [Jaspreet] fiddling around with some pins on his LaunchPad via the GUI. The software is also available for download if you’d like to try it out, but unfortunately it’s a Windows-only build at this point.


  1. Hack Man says:

    Anybody done this with a Mega yet?

  2. madis says:

    This product has basically the same UI. Really helpful and universal piece.

  3. leeahart says:

    That’s a really neat idea. Is the serial command language documented? If it is, it could be the basis for making the GUI work with many other micros.

  4. Alex says:

    Library for processing
    Demo of GUI

  5. bob odle says:

    i highly recommend xscada
    it can be downloaed here

    its worked well for a few hmi projects i did with microcontrollers

  6. Chris C. says:

    Definitely useful.

    I’m working hard on something similar right now for PIC24. The main difference is the GUI on the PC side is mostly defined by the MCU; so you can add or change something without reprogramming the GUI. Or even use a different MCU altogether, and everything is being designed with easy porting in mind.

    Hardware devices on the MCU are represented as objects, each with a name and a list of properties. An object can optionally be parented to another object, or a property to another property, allowing the PC to display all available MCU resources in a nicely structured tree; which can be expanded or collapsed to show only what you’re using. You can even connect multiple MCUs, and they’re shown in the same tree.

    The MCU keeps track of which object/property definitions, and changed property values, have been sent to the host. This is kept in a bit array. When the host sends a “Scan” command, the MCU scans the array, finds the first update and sends it to the host, then clears the bit. Or send an “Autoscan” command, and the MCU continuously sends all available updates as an idle task. A second bit array acts as a mask, allowing you to turn off updates for any objects/properties you’re not currently interested in; saving processor time and bandwidth.

    The property definition includes its name, and whether it can be read/written. Most importantly, it includes typing info, some examples:

    1) Numeric, various integer and float sizes, with optional min/max limits.
    2) Enumerated value. Essentially a limited numeric, but also returns text descriptions of each valid value in its definition. Like True/False, to allow a boolean property. Or a list of available analog pins.
    3) String. Can be read or written in its entirety.
    4) Stream. Like a string, but can be partially read, and writes are treated as appends. Usually represents an underlying ring buffer. Useful for things like UARTs, or ADC channels that have been set to sample continuously.
    5) Null. Serves only as a node in the GUI’s tree, to which other properties can be parented.

    This allows intelligent display and editing of virtually anything in the GUI, with only a limited and fixed set of editors required.

    You can also open up an oscilloscope window, and drag any property over to it; allowing any set of properties to be displayed with a common timebase. Even string or stream properties. When they’re read, it shows a tick at the bottom of the window, which can be hovered over to see the value.

    There’s more, but this is long enough. ;)

    • jaspreetsingh009 says:

      Your idea is great ! The GUI which i developed is just for sending instructions … The rest of the task is dependent on the code inside the uC i.e, the GUI is not uC dependant. After completing this GUI (will require maybe a week or two), i will shift to other TI platforms C2000 & Stellaris launchpad and will develop algorithms to control them using the same GUI.

  7. Roklobsta says:

    I made something similar to this on an Arduino Mega board for a customer a while back but they never used or bought it. I used BertOS though and not that horrid Arduino IDE ‘thing’. I should do some more work on it methinks and publish it.

  8. Rob Thomas says:

    I stumbled upon this:

    Could be interesting

  9. Tom says:

    Typical engineer’s GUI: Fucking ugly. Are you colourblind?

  10. xobmo says:

    I cannot get the GUI to run, code is on the Lanuchpad, 2553 chip, but GUI tries to load for 1/2 second, then no dice. using XP pro, 2gb ram, CCS5. and TI Launchpad 1.5

  11. LaunchyPadHank says:

    For MSP430 why not use the GRACE GUI for CCS? It’s really cool and SO easy to use…

    …just sayin’


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


Get every new post delivered to your Inbox.

Join 96,699 other followers