Well, Veronica is alive, and running code that we can put (very slowly) into memory. So far so good, but something has gotta give.
This is swell and all, but it's hardly robust, and quite frankly I've run out of breadboards.
It’s time to starting making some of these bits (pardon the pun) solid, both so I can work on new interesting abilities for Veronica, and so I can have some damn breadboards back.
I spent a lot of time thinking about this, and planning out various strategies. I’ve settled on what’s called a Backplane Design. Essentially, every component of the machine is treated as a module that is plugged into a large master bus. Wikipedia has a nice treatment of this topic. Ideally, everything is completely general, so you could have multiple CPUs, multiple memory systems, or any other weird combination of components. In reality, that’s a lofty goal, and mine won’t be so fancy. This is in contrast to a motherboard design, where most major systems are on one large board, and you have a couple of connectors or slots for expansion in specific ways.
For me, the advantages of a Backplane design are:
Modularity. Since I’m new at this computer design thing, and I’m definitely not an electrical engineer, it’s likely inevitable that I’m going to make a bunch of mistakes. A design like this lets me swap out pieces and rebuild them as I learn better ways to do things.
Size. By distributing the pieces over a bunch of smaller boards, they all fit into the size limits of the free version of Eagle. I also have practical limits on how big a PCB I can etch.
Warm fuzzies. The modular nature appeals to my inner engineer. My primary area of expertise is in software, so this way of thinking comes very naturally.
Ignorance. I have a weird habit of wanting to figure everything out myself, without reading up on how other people solved the same problem. It’s less efficient, but more fun this way. Thus, I chose this idea because I thought it sounded like a good way to do things, then found out later that there’s actually a name for it.
So, my next step for Veronica will be to take all the major systems that I laid out on the breadboard, and convert them to backplane modules. First, I’m going to need the backplane itself. This is a passive backplane design. I had originally designed an active one (where the backplane itself regulates communication between modules), but I simply ran out of physical space on the board. I had to move the bus control logic onto the module cards. Here’s the Eagle file, and the schematic:
I couldn't find Eagle components for the card-edge connectors I'm using (surplus, as usual), and I was too lazy to make some, so I just layered some header symbols. It looks messy, but the PCB traces come out right, and that's what matters.
The slots are (old) standard IBM ISA connectors (two-sided, 31 pins per side). I’m using physical ISA connectors, but I have no idea how the ISA standard actually works. I’m making up my own bus system as I go along. Each slot has address lines, data lines, power, ground, and some control signals (labelled on the schematic, in the lower right). Of particular interest is the Bus Master pin. Each module must check this pin for permission to use the bus. All those pins are pulled low by default, and routed to a connector. Eventually, some sort of bus arbitration controller will be plugged in there. For now, I can just plug in some switches to get things going. I always try to do the bare minimum that will accomplish something, while allowing room for the future. It’s easy to get trapped in a cycle of analysis paralysis, trying to design the perfect system the first time through. Speaking of the future, there’s also a row of breakout pins at each end of the bus. These will allow for more slots to be added, and will also be great for debugging.
As is my custom, the red traces are jumpers, just there to remind me of their connection during asssembly. Also, you'll notice the slot connections go right through both sides of each connector. I originally routed the traces between the pads, to leave the other half of each slot connector open for future expansion. However, once printed, the tolerances were too tight for me to etch. The simplest solution for now was just to short both sides of the connectors to each other, as shown here. The fat trace is power, and the fill plane is ground.
I recently had a small fusion generator installed in my lamp. Really makes the mask exposure go quickly. Okay okay, it's just a trick with the camera settings. I need to have a little fun, don't I? How many photographs can you really take of PCB making before they get boring?
Even though the free version of Eagle limits you to about 100mm square, I wanted my backplane to be a little larger, for physical stability. I had the bright idea to simply mask off the extra real estate around my 100mm x 100mm mask, and center it on a 150mm x 150mm PCB. Well, that seemed like a bright idea, anyway.
What have we learned here, kids? We've learned that blue painters' tape isn't especially opaque to UV light. The areas where I happened to have multiple layers worked okay, but the rest, not so much. Oh well, I think it gives it a certain rustic charm. The PCB area itself came out perfectly, so no harm done.
Shameless plug is shameless. Actually, these margin areas are a good way to test the limits of the etching method. This text is clearly right below the boundary of what I can achieve (click the image to see what I mean) and still get reliable traces, which is useful information for the future. Smaller traces make routing a ton easier, so it's good to know how low I can go.
Here's the main backplane, all soldered up. Looks pretty snazzy, except for the hot mess around the edges. I may cut that off. I haven't decided yet.
That was a lot of drilling. My Dremel hand is still quivering. Sometimes... at night.... I can still hear the buzzing.
As sort of an after-thought, I decided to put a little power supply on the backplane as well. Until now, I’ve been using my Juice Bridge on the breadboard, but that will be inconvenient once I start developing modules on this backplane. Having its own power seems like a good idea. The design is the same as I used for Cardio Power.
I threw together the power supply on some perf board (the Jameco ones are great!), which I will clamp to the end of the backplane. As Veronica grows, at some point, this little guy won't be enough anymore. I'll cross that bridge when I come to it, though. This supply will be easy to swap out when I need to upgrade it.
The power supply bolts to the end of the backplane. It takes power in from the bench supply, and sends it out to the backplane. The white connector, just visible below the power supply, is where it connects. The longer black connector next to it is for bus arbitration.
Here's the entire backplane, ready for use! Things are getting pretty interesting now, as Veronica becomes less of an idea, and more of an actual thing.
So, with the backplane out of the way, I can start making real parts for Veronica. Hooray!