Friday, September 14, 2012

The Joy of Bit-Banging

One of the joys of doing things with microcontrollers is the ability to bit-bang: to simulate the serial interface to a device so it can be controlled by the microcontroller without special hardware. The digital I/O pins on microcontrollers are ideal for interfacing to a variety of serial devices.

For example, I've used software controlled serial to connect to various things...

1. A Lassen IQ GPS module as part of my high-altitude balloon flight. The code is here and used a software serial interface to communicate with Lassen's binary TSIP protocol.

2. On the same flight I bit-banged an interface to a DS1821 temperature sensor. This was typical of many small devices where the serial interface is entirely controlled (including the clock signal) by the microcontroller. Details here.

3. A string of addressable RGB LED Christmas lights for my home made 7x7 display. The code for that serial protocol is here.

4. Yesterday, I blogged about interfacing to an optical mouse sensor using this code.

Microcontrollers can also be used for other software signal generation quite successfully:

1. On my high-altitude balloon flight the 50 baud RTTY radio signal was generated in software using two digital pins.

2. And in my games console in a can, software was used to generate a PAL or NTSC television signal.

If you want to get into using microcontrollers like this I recommend you get a logic analyzer that lets you spy on the signals being used and generated. I have a Salae Logic which is very, very handy.

Here's a screenshot of the logic analyzer looking at the GE Color Effects 50 Christmas lights used in the 7x7 display.

There tend to be only three things to worry about when bit-banging: the timing of signals, whether any pull up or pull down is needed on the lines and the voltage level of the logic being used.

The big disadvantage of not using specialized interface hardware is that your microcontroller spends time on the communication because it has to generate the signal; in my home projects that's vastly outweighed by the advantage of just being able to hook up directly to some digital I/O pins and get on with the project.

No comments: