-
Back in Stock!
01/27/2023 at 19:55 • 0 commentsAssembled boards are back in stock and available for purchase from Tindie: https://www.tindie.com/products/sstallion/pidp-11-io-expander-kit/
-
Code Complete
10/16/2021 at 03:36 • 0 commentsI am happy to report the software for the PiDP-11 I/O Expander is finally complete! I've posted installation instructions, a brief theory of operation, and usage on GitHub along with a new release tarball which contains an updated SIMH.
I have to admit, It's been quite satisfying to finally program external hardware using the switch register. This should hopefully be everything that is needed for folks to begin writing device drivers in their OS of choice. -
Back in Stock!
10/07/2021 at 22:28 • 0 commentsAssembled boards are (finally) back in stock and available for purchase from Tindie: https://www.tindie.com/products/sstallion/pidp-11-io-expander-kit/
-
Tindie Store
09/02/2021 at 01:20 • 0 commentsIf you'd like to purchase an I/O Expander kit for your PiDP-11, assembled boards are available for purchase from Tindie: https://www.tindie.com/products/sstallion/pidp-11-io-expander-kit/
This kit contains everything needed to expand the I/O capabilities of your PiDP-11:
- I/O Expander PCB (Assembled & Tested)
- Jumper Wires
- Pin Headers
- Double-Sided Tape
-
Automation Saves Your Sanity
09/01/2021 at 17:36 • 0 commentsWhile gathering photos for the previous post, I found a video demoing test fixture operation. Developing the test fixture and corresponding functional tests were a lot of fun. In past projects I've relied on a combination of bench validation and spot checks. I've never had a board returned due to defect, but I worried nonetheless. Having this part of the process fully automated not only saved a lot of time, it also saved my sanity™️.
-
Behind The Scenes
09/01/2021 at 16:49 • 0 commentsI have a habit of taking a ridiculous number of photos when working on a project. I especially enjoy looking at the various things I thought were important at the time - every now and then a photo stands out.
Enjoy 🎉
This was one of the earliest photos I could find. On the right is the first prototype I hand soldered to validate the design. On the left is a prototype test fixture that used a bit of discrete logic and a Total Phase Aardvark for functional testing. I was hoping to get away with something simple, however the insertion force was just too great to be done by hand and the idea was scrapped before populating the rest of the board.
I spent a bit of time researching cheaper alternatives to press fit jigs, especially since the naive approach of using pogo pins mounted to perfboard failed miserably. I stumbled across Merifix and purchased a fixture kit (the drilling service is highly recommended). I kept the same interface, but switched to a larger perfboard to better support terminal blocks to connect test probes.
Top side of the test fixture with locating and test probes installed. If you look closely, the prototype PCB lying on the drill plate lacks tooling holes. Fortunately, I was able to remove the locating probes to continue working on the functional test suite while I waited for the next board revision to come in.
Production panels with stencil. Only minor adjustments were needed for this revision; silkscreen artifacts in the prototype were cleaned up and tooling holes were added for test fixture placement.
A shot of my bench after finishing assembly for the first run of boards. It's a mess, but it's home.
I think it was at this point I realized how difficult it is to take good photos using a white background. Lighting will forever be my bane.
Finally, a lazy morning reviewing an early draft of the fabrication drawing.
-
Project Retrospective
09/01/2021 at 14:33 • 0 commentsI first encountered Oscarv's PiDP-8/I project while browsing Hackaday back in 2017. Like many a maker, I dutifully bookmarked the project in my RSS reader (where it still sits today) and turned my attention toward other projects with the intention of swinging around when I had more time. History repeated itself when the PiDP-11 was released and later featured on Hacker News and I knew this would be the year to finally take on building a PiDP kit for myself.
While building the kit, I noticed that while there was a generous prototyping area on the PiDP-11 PCB, there were limited options for integrating it with the Raspberry Pi. Fortunately, Oscar's design exposed the Raspberry Pi's I2C pins in addition to a single unused GPIO pin, which was just enough to squeeze in an I2C I/O Expander. I struck up a conversation with Oscar about enhancing the PiDP-11 with an expansion board and he encouraged me to reach out to the wonderful PiDP-11 community on Google Groups to gauge interest. An enthusiastic response followed and I began work on the design in mid-June.
The design revolved around choosing a suitable I2C I/O expander. I settled on the MCP23016 over the MCP23017/18 as it was the last model that supported TTL logic levels, which would allow mixing 3V3 and 5V logic (period accurate for the PDP-11/70). The interrupt logic was also simpler and limited to a single open drain output, which wouldn't require a buffer to integrate with the Raspberry Pi. Once the I/O expander was selected, a bi-directional I2C level shifter was added to translate signals to/from the Raspberry Pi.
One of the unexpected pleasures of working on such a simple design was being able to focus on the manufacturing and packaging processes. This was the first project I've worked on where I needed to manufacture more than a dozen boards at a time. To keep things simple, I did all of the SMT assembly myself with a benchtop reflow oven and manual paste application using a stencil. A test fixture was needed to validate assembly before packaging PCBs since through hole components would be packaged separately. This was also a chance to dip my toe in having custom cable assemblies manufactured in larger quantities than I can do myself.
Overall, I'm very pleased with the results, and I hope you will be too! This project was a great reminder that even smaller efforts can have something to teach - it's just a matter of focusing on the right things.
-
Clock Stretching (Sigh)
08/31/2021 at 02:35 • 0 commentsUnfortunately it looks like the MCP23016 is no exception when it comes to clock stretching on the Raspberry Pi. For those that may not be familiar, clock stretching is a method for throttling an I2C master that is communicating too quickly by having the slave temporarily hold SCL low. Under normal circumstances, clock stretching goes unnoticed unless examined with a scope or logic analyzer, however the SoCs that power the Raspberry Pi have a long-standing bug that breaks this behavior.
The good news is there is a simple workaround to address the issue, though it requires reducing the bit rate for the entire bus to eliminate the need for clock stretching. The bad news is this is not enabled by default.
To reduce the bit rate to 10kHz, update the following line in /boot/config.txt and reboot:
dtparam=i2c_arm=on,i2c_arm_baudrate=10000
After rebooting, you can verify proper communication by issuing:
$ i2cdump -y -r 0x00-0x0b 1 0x20 b 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 00 00 00 10 00 00 ff ff 01 00 00 00 ...?....?...
It's a shame this is still an issue on modern Raspberry Pis. The Raspberry Pi 4 added support for clock stretching via software I2C, but it looks like this limitation will continue to persist in hardware for the foreseeable future.