====== 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.