Pi1541io Revision 4

The prototype batch of PCBs for revision 4 of the Pi1541io board didn’t take long to ship and it arrived from PCBWay while I was on vacation. Today, I finally managed to assemble one of the boards and everything seems to work great!Revision 4 is basically what the previous one should have been: an improved rev.2 with an added I2C connector for an OLED display. In this revision though, the I2C connector can be configured to accommodate different kinds of display modules.

Again, the BOM for this board is mostly identical to that of revision 2. But I’d recommend you get yourself a compatible display, too.

1   OLED Display with I2C SSD1306, 128x64px eBay (China) eBay (Germany)
1 J12 1×4 pin female header eBay (China) eBay (Germany)

When assembling the board, you need to make your choices and configure the solder bridges as described for revision 2. Additionally, you need to configure the I2C header using new solder bridges if you intend to use it.

Configure the I2C header.

  1. Choose whether to power the display module with 5V or 3.3V. You must not use 5V if your display module is lacking its own voltage regulator! If in doubt, choose 3.3V — it should work in basically all cases.
  2. Configure the pin order for your display module. You need to choose between one of GND-Vin-SCL-SDA or Vin-GND-SCL-SDA.
  3. If you configured your board to use the 7406 IC as a bus driver, you have the choice between using I2C bus 0 or 1 of the Raspberry Pi. If you opted for the “simple” layout without the 7406, you are limited to using I2C-0.

Example for a valid I2C configuration.

[Update] In the example image above, the I2C header is configured for 3.3V, I2C bus 1, and a display module with the pin order of GND-Vin-SCL-SDA.

The project sources will again be available on Github as soon as I find the time to update the documentation. In the meantime, you can already order your boards on PCBWay, if you like.

Update: Sources and Gerber files for revision 4 are now available on Github.


27 thoughts on “Pi1541io Revision 4

  1. Just found this project and it looks great. I just ordered some rev 4 boards from pcbway. Not really clear on how the solder bridges should be configured though. Do you bridge the left two pads top and bottom for GND-Vcc and the right two pads top and bottom for Vcc-GND pinouts? For bus 0 and bus 1 selection do you bridge all three pads? Thanks

  2. You are right, that could be clearer. I should add an example photo or drawing to clarify. Yes: Left two pads top and bottom for GND-Vcc. No: Left two pads in both boxes for bus 0, right two pads for bus 1.

  3. Can you share the Gerber files of revision 4?
    PCBWay is ignoring my messages on Facebook so now I want to place the order elsewhere.

  4. Yes, I will. The Gerber files will be included in the git repo. I still need to do some cleaning up there before I can push the latest changes, though. Maybe I’ll get around to that later today.

  5. @Okurka: As I told you before, I will share the Gerber files. But pushing me will not speed up the process.

  6. My first question nor your answer to it were showing when I posted my question a second time. I didn’t mean to push you, I simply thought my first question was blocked.

  7. You Sir, are a legend. I built an OLED-enhanced Pi HAT based on your Rev. 4 board, which was a joy to work on and works flawlessly. Thank you so much for all your hard work here, you’ve made a lot of old retro-heads very happy.

  8. Thanks Dan, I’m glad you like my board! But the praise mostly belongs to Steve for the actual Pi1541 project, of course.

  9. I just hand-built a Pi1541 board, and while looking for case STL files found this board. I think I’ll order a set and make some for friends. 🙂

  10. Hi,

    I really appreciate all the hard work that went into this project. But do you see a Pi1541 Revision 5 in the near future or will Revision 4 be the last one for a while?

    Thank you,

  11. Hi Gene, I’m glad you like my project. Your question is not easy to answer. As of now, I don’t have any plans for a new revision. But the Pi1541 project itself is still evolving quickly. If new hardware options arise from this, there might very well be a Rev.5 of my board. And if anyone finds a major fault in Rev.4, there will certainly be a new revision. But the latter seems a little unlikely by now.

  12. Great work! I’m planning to build a few of these and is about to order components. The DIN sockets I’m looking at* differ somewhat from the holes on your PCB:s; the two front “support pins” have a spacing of 5.08mm instead of 10.16mm. Would it be possible to add holes for 5.08mm spacing too to make other DIN connectors fit?

    *DIN measurements:

  13. Built this board with the exact same display and chips used in the example and photos. Would you share your config for it?

  14. @Mackie: I actually considered supporting those “other” DIN sockets before. So yes, I could do that. But I am reluctant to broadly share a new layout revision that I have not tested before myself. If you agree to do this testing for me, I could supply you with updated Gerber files. Without any warranty of course, just like the rest of the stuff I share here. And I would need a few days to find the time for an update. Drop me a mail if you are still interested.

  15. Thank you very much for this. I just finished building it and works perfect. It also made me realize my sight isnt what it used to be when trying to do the surface mount soldering haha.

    Anyways, great work. If there is a rev5, would it be possible to move the reset button so its not under the oled screen?

    Other than that amazing job! haven’t had any issues with it.

    Thank you.

  16. It would be fantastic if someone could design a 3D printable case for it. That would be the icing on the cake for this great project.

  17. great work! I have it working for 95%. 🙂 With an original Serial cable, I am able to load PRG files using the browsing mode on the Pi1541 or with FB64. When emulating .D64 roms, the Pi1541 says ‘Emulating’ but my Commodore is not able to load the directory or the game. Any suggestions how I can fix that would be very welcome. Thank you in advance for your help.

  18. Remote debugging is hard. You being able to use the browsing mode means that there is at least some kind of working connecting between the Pi and the C64. I would suggest you first double check your hardware to make sure everything is soldered and connected properly. Pay special attention to the configuration of the solder bridges. Next, also double check that you have prepared the contents of you SD card exactly as described on Steve’s project page. Does your options.txt match the hardware build option you have chosen? If your are still stuck then, you could describe your issue on the Pi1541 thread on the Lemon64 board. There are lots of people around that might be able to recognize the symptoms and help you.

  19. I’ve build the option B board, configured the I2C jumpers as in the picture, except that I’m using bus 0, but I get no display. I’ve also tried bus 1 but same results. I’ve tried two different oleds from two different vendors and still no display. Voltage configuration is correct and measures correct, i2cScan reports 0x78, which is correct. Only thoughts are maybe config.txt needs something changing, so I have pasted what i though was the relevant part below. Any help with getting this working would be appreciated.

    // 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

  20. Ignore my post above, I failed to look in the obvious place and hadn’t un-commented ‘LCDName = ssd1306_128x64’…DOH!

  21. Hi everyone. I have also a problem with the ssd1306 oled (no display). I have build the option 2 with bus-master 2. The i2c-address is usually 0x3c. But 0x3c is 60 in decimal and not 0x78 (in the options.txt comment)?! Vin and GND allocation is ok. Can someone help me? Thx

    // Sample options.txt configuration file for Pi1541

    // If you would like to change the drive number then specify it here (8 is the default)
    //deviceID = 9

    // If you are using the split line hardware option (ie Option B) then you need to specify this option
    splitIECLines = 1
    // If you are using some type of hardware that requires the lines to be inverted then specify these options here
    //invertIECInputs = 1
    //If you are using a 7407
    //invertIECOutputs = 0

    // If you are using the Pi’s composite video out then these options allow you to experiment with the display resolution
    //ScreenWidth = 512
    //ScreenHeight = 384

    // By default Pi1541 will search the root of the SD card for a ROM file and use this for ROM1.
    // The first file found with either of the following names will be used; d1541.rom, dos1541, d1541II, Jiffy.bin
    // You can override the default ROM1 by specifying it here
    ROM1 = d1541.rom
    // You can specify additional ROMS here (up to 7)
    // You can then use the function keys (F1-F7) on the keyboard to change which one you would like to use (only in browse mode and not in emulation mode)
    // You can also use the buttons to swap ROMs by holding down button 1 and pressing one other buttons 2-5
    // .LST files can also specify one of these ROMS that will automatically be selected when the LST file is loaded.
    //ROM2 = Jiffy.bin
    //ROM3 = d1541II

    // The rate (in seconds) a long selection is scrolled
    scrollHighlightRate = 0.07

    // Enable RAMBoard emulation – 8k drive RAM expansion at 0x8000
    //RAMBOard = 1

    ChargenFont = chargen // 8 bit font file

    // If using CBMFileBrowser then it is best to specify this option. When the computer resets the Pi will always revert back to the root folder ready to load CBMFileBrowser again.
    OnResetChangeToStartingFolder = 1

    // If you use FB64 (CBMFileBrowser) and want to use a fast loader cartridge (AR6, EFL, FC3) to load it then use this option to automatically mount it.
    //AutoMountImage = fb.d64 // You MUST have a disk image in \1541 with this filename

    // If you are using a FB128 in 128 mode you can get FB128 to auto boot using this option
    //AutoBootFB128 = 1

    // If you are using a 128 you can auto boot anything using this option
    // This over-rides AutoBootFB128
    //128BootSectorName = bootsect.128

    // If you would ever like to disable browse mode completely you can do so here
    //DisableSD2IECCommands = 1

    // This option displays the IEC bus activity on the bottom of the Pi’s screen
    GraphIEC = 1

    // If you have hardware with a peizo buzzer (the type without a generator) then you can use this option to hear the head step
    SoundOnGPIO = 1
    SoundOnGPIODuration = 1000 // Length of buzz in micro seconds
    SoundOnGPIOFreq = 1200 // Frequency of buzz in Hz

    // You can create 320×240 PNG files with the same name as your disk images. With this option turned on they will be displayed on the Pi’s screen.
    //DisplayPNGIcons = 1

    // If you would like to specify what file will be loaded by LOAD”*” in browse mode then specify it here
    //StarFileName = somefile

    // Alt-N creates a new disk image.
    // Names are formed automatically as autoname001.d64, autoname002.d64 etc…
    // change the base of the filename here
    //AutoBaseName = autoname

    // 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

    // change startup logo on oled – 1541ii or 1541classic
    LcdLogoName = 1541ii
    //LcdLogoName = 1541classic
    //LcdLogoName = customfile.raw

    // 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 = 30 // 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

    //QuickBoot = 0 // faster startup
    ShowOptions = 0 // display some options on startup screen
    //IgnoreReset = 0

    // You can remap the physical button functions
    // numbers correspond to the standard board layout
    //buttonEnter = 1
    //buttonUp = 2
    //buttonDown = 3
    //buttonBack = 4
    //buttonInsert = 5

  22. Nice design, thanks for sharing. But why not flip or move the OLED header around so the display doesn’t cover the reset button and power LED?

  23. The location of the OLED header is indeed not optimal in rev.4. This due to the fact that the first revisions did not have this connector at all and space is quite tight. Actually, there is already a rev.5 which resolves this issue by moving the reset button and the LED’s instead. But I haven’t had the time to test it yet.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.