Working With I2C Port Expanders

There are times when you don’t need much processing power for your project but you do need a lot of I/O pins. It often doesn’t make economic sense to choose a larger microcontroller just to get extra pins so the answer is to use a port expander chip. [Raendra] posted a guide for using one of these chips, it’s a Microchip MCP23008 chip that uses the I2C protocol for communications.

You are probably already familiar with using shift registers like the 595 series for port expansion. There can be benefits to using an I2C device instead. One of them comes when using multiple port expander chips. With cascading shift registers you must always shift in the data for the entire chain of chips. But I2C devices are individually addressable, so you only need to push data over the I2C bus for the chips that need to be changed, the others will remain unaffected. It is especially easy to use these if you already have another I2C device in your project design as the addition only requires the connection of the SDA and SCL lines. Keep them in mind for future undertakings.

I2C Arduino GPS Shield

i2c_gps_shield

[Wayne] wrote in to share an item he just finished working on, an I2C GPS shield for the Arduino. While other GPS solutions have existed for quite some time, his caught our eye due to its feature list.

The shield removes a good bit of the hassle associated with parsing raw NMEA data from traditional GPS addons. While you have the option to communicate with the GPS module over serial in order to obtain the raw data, the use of the I2C interface makes getting the most commonly used GPS data a breeze. The GPS module itself can be set to update at anywhere from 1 to 10 Hz, and [Wayne] says that the I2C bus blows away the oft-used 9600 baud serial interface. While I2C is primarily used for receiving data, it can also be utilized to configure the GPS via its control registers, allowing for on the fly settings tweaks.

While he does sell the units pre-assembled at a competitive price, [Wayne] also provides a full schematic, making this an easy afternoon project once you have sourced the proper components.

Arduino I2C Sniffer

[Johngineer] found himself in need of an I2C sniffer, but didn’t have one available. Necessity is the mother of invention, so he put together this I2C sniffer sketch for Arduino. The arduino will record what is going on for a set time interval, then dump the data via serial as a .csv. You then have to plot it to see what is going on. [Johngineer] recommends Livegraph, since it is portable and easy. As you can see in the code, the time interval is adjustable, but you have the physical limitations of the RAM on the board to consider. This seems like a pretty handy piece of code stored around, effectively giving you a passable I2C sniffer in a pinch.

I2C 101

Embedded Labs has come out with a very detailed I2C 101  tutorial, that you should check out if you have any questions on the system. I2C is a short distance serial interface that only requires 2 bus lines. Keep in mind that as wires go down complexity goes up. While there are more than a few I2C devices out there in the wild, and the 2 wire system does make wiring a breeze sometimes, the information required to make use of it often seems confusing to someone who is just starting with it.

The tutorial covers basic theory, stop / start conditions, addressing, data transfer, and acknowledgment plus illustrations. A couple of specific examples are given in the form of a 24LC512 serial eeprom, and a DS1631 digital thermometer complete with code.

Motion Controlled Reddit Vote Sign.


A little while back I attended the largest east coast gathering of folks from the ever popular social news site, Reddit.com. Those of you familiar with Reddit already know that it is all about link aggregation. Users post links to interesting websites and material, and can then vote up or vote down content based on interest or relevance. Through the magical site algorithms original and interesting content is, as implied, aggregated up to the front page.  The whimsical nature of this big DC event lead many people to furnish signs of all types based on the culture of the site, internet memes, etc… The signs that really caught my attention were based primarily on the stylistic site layout, blowing up mail icons and other Reddit specific graphics.

The concept of using site graphics gave me the idea of being able to personally vote up or down other peoples’ signs. It was far too easy to just make a cardboard arrow, and I don’t have a color printer. I happened to have a shelved coffee table project involving orange and blue LEDs. Same colors as the arrows! Sweet. To make this project work I would have to work entirely from my project pile, there simply was no time to order anything from the internet. I managed to crank out a functional up/down voting sign in 3 days leading up to the gathering (and the morning of), here is what I did:

Continue reading “Motion Controlled Reddit Vote Sign.”

NBA Hangtime Pinball Display

[Ed Zarick] continues work on his NBA Hangtime pinball machine with the completion of the scoreboard and backglass. You should remember this project as we already covered the layer audio he developed for the system. Now he’s proving to be a protoboard master, using point-to-point techniques to build a pair of two and a half digit LED displays for team scores, as well as a shot clock timer and other status indicators.

The lighting board that controls it all is commanded via the i2c protocol, just like the three audio modules. It uses shift registers along with MOSFETs and [Ed] has taken the time to add pin headers and sockets for board interconnects. As is true with the audio system, one Arduino Mega acts as the master on the i2c bus and you’ll notice in the video after the break that the display works in perfect harmony with the sound effects.

We can’t wait to see what he comes up with for the play field!

Continue reading “NBA Hangtime Pinball Display”

Nokia LCD, Nunchuck, And MSP430 Join Forces

[JB’s] driving a Nokia 6100 LCD using an MSP430 with input from a Wii Nunchuck. He’s using the G2211 microprocessor that came with the Launchpad, and developing his code with MSP-GCC. As you can see in the video after the break, this works but there’s some room for improvement. That’s being said, he is bumping up against the code memory limit, with just around 500 bytes left to work with. The LCD screen is SPI and currently it’s hogging the pins that are used for the hardware i2c. Since he needs an i2c bus to talk to the nunchuck he had to go with software i2c which explains part of his program memory troubles.

We’re in no way experts on this, but it seems like he could save space (and improve the input responsiveness) by rewriting his LCD drivers in order to remap the pins. Then again, it might just be better to move up to a larger MSP430. If you’ve got some advice, make sure to share it by leaving a comment.

Continue reading “Nokia LCD, Nunchuck, And MSP430 Join Forces”