The Atmel’s Universal Serial Interface (USI) sucks for I2C

Quick Intro to I2C

Along with USART and SPI, I2C is definitely the most common interface used by a microcontroller to communicate with peripherals. In order to implement an I2C bus all you need is two open-collector collector pins, one for the SCL (clock) line and one for the SDA (data) line.  It has to be open-collector because there are times during the protocol when two devices drive the clock line at the same time which can lead to a short circuit if one device drives it high and one drives it low. This way, the bus lines are high by default due to the pull up resistors –  if a device wants a line to go low, it just shorts it to ground via an internal transistor. There is no path from VCC to GND that does not contain a high-valued resistor.

Continue reading “The Atmel’s Universal Serial Interface (USI) sucks for I2C”


Philips Hue Lights Repair

I bought a set of Philips Hue White Personal Wireless Lighting LED Starter Kit on eBay which were listed as “untested” (just another way to say broken). These, when working, allow you to control the brightness of your lights via the internet from your phone. Being broken, I bought for a fraction of the cost. Now all I had to do was fix them.

Continue reading “Philips Hue Lights Repair”

Project: Nixie Clock (upgrade) – Accuracy

Throughout this project, I have been saying that the oscillator I am using, the DS32kHz, is accurate to 7.5 parts per million, or 4 minutes per year. Having run the clock continuously for about 3 weeks now I would expect the clock to have drifted by approximately 14 seconds. However, measuring the clock against the clock on my phone I have found that it has drifted by approximately only two seconds.

Continue reading “Project: Nixie Clock (upgrade) – Accuracy”

Mini Project: Guitar Amplifier (old!)

Playing guitar and electronics have been two of my favourite things for a long time now. When I was about 14, I combined these two for the first time and built a pretty simply 32W amplifier. While the design is super simple, it actually has a really nice clean tone and does not distort the sound at all. It’s capable of diving an 8 ohm or 4 ohm load. Today I decided to give it a bit of a clean and check if it still worked.

Continue reading “Mini Project: Guitar Amplifier (old!)”

Project: Nixie Clock (upgrade) – Final Code

The clock is controlled by an ATTiny87 which has three main jobs:

  1. Counting the pulses from the Maxim DS32kHz
  2. Controlling the display via the shift registers (read more)
  3. Interacting with the user via the reed switches to produce a user interface

Each of these jobs will be discussed separately below as well as the main code to bring it all together in a power efficient way. Full code can be found at my GitHub.

Continue reading “Project: Nixie Clock (upgrade) – Final Code”

Project: Nixie Clock (upgrade) – SPI Bus Chip Select/GPIO Contention

As discussed in the previous article, the display is controlled by a number of shift registers. Shift registers can be controlled directly by a SPI bus, which is useful as most microcontrollers (including our ATtiny87) have a built in SPI bus peripheral. This means that writing a byte to the shift register is almost as easy as just writing a byte to a register.

Continue reading “Project: Nixie Clock (upgrade) – SPI Bus Chip Select/GPIO Contention”