Roger D. Pease

System Architect with an "AI and People First" approach

rogerpease@gmail.com
← Back to portfolio

Project

SSD1315 with a Seeeduino Xiao

A small Valentine's gift with a SSD1315 display.

Parts

Skills & Tools

Narrative

A couple years ago, as a small Valentine's day gift for my wife I decided to make her an electronic display with a Valentine's message. The Xiao offers a I2C interface to the SSD1315 display. I2C is a serial bus which uses two wires to communicate. It is low speed, low power, and has a simple multidrop architecture. It is commonly used for peripherals such as displays, sensors, and minor memory chips.

A stumbling block I encountered was that the Arduino libraries were for the similar (but not identical) SSD1306. Looking at the SSD1306 Datasheet and the SSD1315 Datasheet, I determined:
  • 1306/1315 is the controller chip number. The display itself is the same and they just named the assembly after the controller chip.
  • There is no more memory on the chip than the size of the display. There is a lot of talk about “pages”, but those are columns of 8 pixels. The 128×64 display is a 128-pixel wide group of eight “pages” of 8 bits each (the LSB is the top of the page). That is surely done so you can render text fonts horizontally.
  • The differences were in the charge pump control and a couple scrolling commands. Those shouldn’t impact us. A charge pump is used when you need a higher voltage than the supply voltage but only for a very short period of time (such as programming a flash).
With that I was able to get it working but with some flickering. Flickering is often caused by overscanning and excess power use. I fixed that by adjusting the multiplier, divider, contrast and precharge settings and the flicker went away.
Fixed Settings
The next step was to add some text to the display. I used the Adafruit GFX library to draw text and I leveraged font8x16.h and built a simple message pretty easily.

Since this is a Valentine’s day gift I’d like to do a graphic heart. Since the graph assumes a grid centered at the origin and my display assumes a grid with the origin at the top left, I had to adjust the formula to get the heart to look correct.

To power the device, I used a 9V battery and a voltage regulator to get me down to 3.3V.

The final product came out very well and I was very happy with the result.


What went well:
  • Bringup of I2C interface. I2C is pretty robust (although slow, but it has its reasons for that).
  • The heart and fonts worked very well. Speed of the microcontroller was more than adequate for my needs.
  • Using Test Driven Development (TDD) really helped. I have a rule with embedded systems that you test as little of the embedded software on the embedded system as you can.
The only issue I ran into was the display bringup I mentioned above since it’s a 1315 and not a 1306. Feel free to review my repo.