I2C Bus Splitting with a more Professional Touch

Last week, I covered some of the bitter details of an interesting hack that lets us split up the I²C clock line into multiple outputs with a demultiplexer, effectively giving us “Chip Selects” for devices with the same address.

This week, I figured it’d be best to layout a slightly more practical method for solving the same problem of talking to I²C devices that each have the same address.

I actually had a great collection of comments mention the same family of chips I’m using to tackle this issue, and I’m glad that we’re jumping off the same lead as we explore the design space.

Recalling the Work of Our Predecessors

Before figuring out a clever way of hacking together our own solution, it’s best to see if someone before us has already gone through all of the trouble to solve that problem. In this case–we’re in luck–so much that the exact bus-splitting behavior we want is embedded into a discrete IC, known as the PCA9547.

chip_reverence

It’s worth remembering that our predecessors have labored tirelessly to create such a commodity piece of silicon.

The PCA9547 (PDF) is an octal, I²C bus multiplexer, and I daresay, it’s probably the most practical solution for this scenario. Not only does the chip provide 8 separate buses, up to seven more additional PCA9547s can be connected to enable communication with up to 64 identical devices! What’s more, the PCA9547 comes with the additional benefit of being compatible with both 3.3V and 5V logic-level devices on separate buses. Finally, as opposed to last week’s “hack,” each bus is bidirectional, which means the PCA9547 is fully compliant with the I²C spec.

Selecting one of the eight I²C buses is done via a transfer on the I²C bus itself. It’s worth mentioning that this method does introduce a small amount of latency compared to the previous clock-splitter solution from last week. Nevertheless, if you’re planning to read multiple devices sequentially from a single bus anyway, then getting as close-as-possible to a simultaneous read/write from each device isn’t likely a constraint on your system.

 

With a breakout board to expose the pads, I mocked up a quick-n-dirty Arduino Library to get the conversation started and duplicated last week’s demo.

Happily enough, with a single function to change the bus address, the PCA9547 is pretty much a drop-in solution that “just works.” It’s definitely reassuring that we can stand on the shoulders of our chip designers to get the job done quickly. (They’ve also likely done quite a bit more testing to ensure their device performs as promised.) Just like last week, feel free to check out the demo source code up on Github.

Until next time–cheers!

Homemade High Voltage Caps

Do you happen to have any 15,000 volt capacitors sitting around? [Ludic Science] didn’t so he did the next best thing. He built some.

If you understand the physics behind a capacitor (two parallel conductors separated by a dielectric) you won’t find the build process very surprising. [Ludic] uses transparency film as an insulator and aluminum foil for the conductive plates. Then he wraps them into a tube. He did throw in a few interesting tips about keeping the sheets smooth and how to attach the wires to the foil. The brown paper wrapper reminded us of old caps you might find in an antique radio.

The best part by far, though, was the demonstration of drawing an arc from a high voltage power supply with and without the capacitor in the circuit. As you might expect, playing with a few thousand volts charged into a capacitor requires a certain amount of caution, so be careful!

[Ludic] measured the capacitance value with a standard meter, but it wasn’t clear where the 15,000 volt rating came from. Maybe it was the power supply he used in the video and the capacitor could actually go higher.

Continue reading “Homemade High Voltage Caps”

Decapping the CC2630 and CC2650

[Jelmer] got curious about the TI CC26XX wireless MCUs and did a little decapping.

TI sells four different models of their CC26XX wireless MCUs. Three support one of the following: RF4CE, Zigbee/6LoWPAN, and Bluetooth and a further model which supports all protocols. Each IC has the same baseline specification: 128Kb Flash, 20Kb RAM and 15 GPIOs. cc26xx_nitric[Jelmer] was curious to know if the price difference was all in the software. And in order to verify this decided that decapping was the only thing to do!

We’ve covered decapping using Nitric acid before, as well as lower tech techniques. Luckily [Jelmer] had access to Nitric acid and a fume hood, not the easiest items to get hold of outside of a research lab (checkout the video of the IC bubbling away below). [Jelmer] got some great die shots under an optical microscope and was able to confirm that the die markings are identical. This opens the door to future hacks, which might allow the cheaper models to be re-flashed, expanding their capabilities.

Continue reading “Decapping the CC2630 and CC2650”

Using a Voltage Regulator as a Constant Current Source

[Afroman] contacted us to share his new video on the LM317. The humble LM317 adjustable voltage regulator is everywhere. From wifi routers, to high spec lab equipment. Given a noisy input and a variable load, a voltage regulator will give a nice clean, stable output voltage. We’ve covered the basic operation and usage of the LM317 many times. But even the most common of parts can be used in new and interesting ways.

In his video [Afroman] describes how the LM317 can be used to regulate current rather than voltage to provide a constant current source under varying load. This can useful for a number of applications including driving LEDs and laser diodes. While this circuit may not be as efficient as an LED driver module or a switching solution the LM317 is cheap and readily available. [Afroman] also describes how the circuit works in detail allowing us to enjoy this ubiquitous part in this slightly unusual application.

Continue reading “Using a Voltage Regulator as a Constant Current Source”

Another Radio Module for IoT fun – EMW3162

The availability of cheap radio modules is making them ubiquitous in an increasing number of projects that we have been seeing recently. The usual go-to solution is using any one of the several modules based on the ESP8266 device. [Willem] wrote in to share with us his experiences with another radio module – the EMW3162 from MXChip, which at $10 isn’t as cheap as the ESP8266 modules, but is a more capable, power packed, device.

The EMW3162 (PDF datasheet) is a low-power embedded WiFi module with integrated wireless LAN, and a STM32F205 Cortex-M3 microcontroller that runs a “self-hosted” WiFi networking library and software application stack. The microcontroller has 1M flash, 128k RAM and runs at 120MHz. And since MXChip is a Broadcom partner, they are allowed to use the WICED_SDK.

The on-board ARM M3 means all kinds of useful interfaces are available: UART, SPI, I2C, ADC, DAC, PWM, TIMERS, GPIO, and a JTAG flash interface. The good news could be on the power consumption figures – the module is touted to be low-power, and the data sheet shows 7mA when connected to an access point but with no data transfer. When transmitting at 20kbps, the current draw is about 24mA, which goes up to 320mA at 11Mbps.

[Willem] has his EMW3162_WICED repository up on Github, but also take a look at the MXChips MICO (Mico-controller based Internet Connectivity Operation System) repository. At the moment, he has it working using Linux, with a gnu gcc compiler and a JLINK JTAG programmer. He also has the WICED SDK working and has a WiFi AP with an on-board 120MHz arm chip. It would be interesting to hear about other users’ experiences with this radio module. Do let us know in the comments below!

 

Measuring Heart Rate With A Piezo

Look around for heart rate sensors that interface easily to microcontrollers, and you’ll come up with a few projects that use LEDs and other microcontrollers to do the dirty work of filtering out pulses in a wash of light.

[Thomas] was working on a project that detects if water is flowing through a pipe with a few piezoelectric sensors. Out of curiosity, he taped the sensor to his finger, and to everyone’s surprise, the values his microcontroller were spitting out were an extremely noise-free version of his heart rate.

The piezo in question is a standard, off the shelf module, and adding this to a microcontroller is as easy as putting the piezo on an analog pin. From there, it’s just averaging measurements and extracting a heartbeat from the data.

It’s a much simpler solution to measuring a heart rate, and since two people haven’t heard of this technique, it’s likely a lot more people haven’t heard of this technique either. If you’re looking for an entry to The Hackaday Prize, this would be a great jumping off point for anything in either the fitness or medical domains.

New Part Day: SPI RAM and a Video Controller

Generating video signals with a microcontroller or old CPU is hard if you haven’t noticed. If you’re driving even a simple NTSC or PAL display at one bit per pixel, you’re looking at a minimum of around 64kB of RAM being used as a frame buffer. Most microcontrollers don’t have this much RAM on the chip, and the AVR video builds we’ve seen either have terrible color or relatively low resolution.

Here’s something interesting that solves the memory problem and also generates analog video signals. Yes, such a chip exists, and apparently this has been in the works for a very long time. It’s the VLSI VS23s010C-L, and it has 131,072 bytes of SRAM and a video display controller that supports NTSC and PAL output.

There are two chips in the family, one being an LQFP48 package, the other a tiny SMD 8-pin package. From what I can tell from the datasheets, the 8-pin version is only an SPI-based SRAM chip. The larger LQFP package is where the action is, with parallel and SPI interfaces to the memory, an input for the colorburst crystal, and composite video and sync out.

After looking at the datasheet (PDF), it looks like generating video with this chip is simply a matter of connecting an RCA jack, throwing a few commands to the chip over SPI, and pushing bits into the SRAM. That’s it. You’re not getting hardware acceleration, you’re going to have to draw everything pixel by pixel, but this looks like the easiest way to generate relatively high-resolution video with a single part.

Thanks [antibyte] for the tip on this one.