====== SSD1306 and SSD1315 oLED Modules for the Pi1541 ======
As mentioned in my [[pi1541|previous article]], while building the [[https://cbm-pi1541.firebaseapp.com|Pi1541]], I had a lot of difficulty getting the oLED module to work.
I blamed it on the fact I had accidentally purchased an SSD1315 instead of an SSD1306.
I fiddled a lot with the [[https://github.com/pi1541/Pi1541/blob/master/options.txt|options.txt]] file and ensured I had the correct configuration soldered. But still, I got no display on my tiny oLED and had to resort to using the external monitor to select games. Not a very portable option.
I was pleased when my new SSD1306 arrived yesterday and I was keen to try it out.
This is the one I ordered: https://www.aliexpress.com/item/32920071528.html
I plugged it in: no screen. OK.
Now here is something I didn't mention at the end of my last article: the fact that when I turn on the Pi1541, I do see the message:
I2C not found on Bus 1.
That was something I didn't really go back to. So I took a closer look at [[https://github.com/pi1541/Pi1541/blob/master/options.txt|options.txt]]:
// If you are using a LCD screen then specify it here
//LCDName = ssd1306_128x64
//LCDName = ssd1306_128x32
//LCDName = sh1106_128x64
// If you are using a LCD screen and you would like PageUp and PageDown keys to work with it then specify this option
//KeyboardBrowseLCDScreen = 1
// If you are using I2C LCD you can optionally change what pins it is connected to.
// (defaults to 0 for non-split lines (Option A) or 1 for split lines (Option B))
//i2cBusMaster = 0 //SDA - pin 27 SCL - pin 28
//i2cBusMaster = 1 //SDA - pin 3 SCL - pin 5
//i2cLcdAddress = 60 // I2C display address in decimal and shifted. 60 == 0x78, 61 == 0x7A
//i2cLcdFlip = 1 // Rotate i2c LCD screen 180 degrees
//i2cLcdOnContrast = 127 // Allows you to adjust the contrast on your i2c LCD screen
//i2cScan = 1 // scan i2c bus and display addresses on screen
//i2cLcdUseCBMChar = 0 // set it to 1 to use CBM font on LCD. Small but fun !
The part that tripped me up was:
(defaults to 0 for non-split lines (Option A) or 1 for split lines (Option B))
That seemed to indicate that for an Option B Pi1541, the screen should be configured for Bus 1. I didn't know if this was the same "Bus 0" I configured earlier on the daughterboard or something local in the oLED module itself.
Of course, as it mentions //defaults// that means it's configurable either way.
Essentially, for an Option B machine, I should be able to leave everything to default and it should work. But as I'd fiddled around so much previously, I went with the following to ensure the settings were explicit:
LCDName = ssd1306_128x64
i2cBusMaster = 0
i2cScan = 1
Restarted the Pi1541. Guess what? It worked beautifully! The external screen no longer showed any output, and the oLED now took over and I could use it to select a D64 image.
{{ :wiki:ssd1306.jpg?nolink |}}
And the amusing part of the tale? I swapped out the SSD1306 with the SSD1315, restarted, and it works too. So it was just me all the way along.
{{ :wiki:ssd1315.jpg?nolink |}}
===== Conclusion =====
So there's a couple of good things to come out of this:
- If you built an Option B Pi1541 and chose the same Bus selection that I did (Bus 0), the above option.txt config items will work for you.
- You can use an SSD1315 as a 100% compatible replacement for the SSD1306 (but still call it ''ssd1306_128x64'' in your config).
And I think I'll stick with the SSD1315. I prefer the blue/yellow colours rather than monochrome white.