Vonada’s Electrical Engineering Maxims

A list of electrical engineering maxims by DEC Engineer Don Vonada:

  1. There is no such thing as ground.
  2. Digital circuits are made from analog parts.
  3. Prototype designs always work.
  4. Asserted timing conditions are designed first; unasserted timing conditions are found later.
  5. When all but one wire in a group of wires switch, that one will switch also.
  6. When all but one gate in a module switches, that one will switch also.
  7. Every little picofarad has a nanohenry all its own.
  8. Capacitors convert voltage glitches to current glitches (conservation of energy).
  9. Interconnecting wires are probably transmission lines.
  10. Synchronizing circuits may take forever to make a decision.
  11. Worse-case tolerances never add — but when they do, they are found in the best customer’s machine.
  12. Diagnostics are highly efficient in finding solved problems.
  13. Processing systems are only partially tested since it is impractical to simulate all possible machine states.
  14. Murphy’s Laws apply 95 percent of the time. The other 5 percent of the time is a coffee break.

Source: Computer Engineering: A DEC View of Hardware Systems Design, 1978, Digital Press, Chapter 1, “Seven Views of Computer Systems”, by C. Gorgon Bell, J. Craig Mudge, and John E. McNamara, Table 5

Posted in Electrical Engineering | Leave a comment

RC2016/10 success? Failure? I’m not sure.

As seems to be usual, my stated plans for Retrochallenge didn’t come to fruition.  Several times I’ve planned to do vector graphics stuff, and not done it, so this time I planned to do something else, USB bubble memory. Of course, since this time I did NOT plan to do vector display stuff, I actually did a little bit on that.

Here’s what I accomplished:

  1. Made some progress on the USB bubble memory firmware. It’s currently a USB composite device implementing both CDC ACM (virtual serial port, for debugging) and MSC (mass storage). Currently the CDC works but I’m bogged down with issues getting the host to properly deal with the MSC side.
  2. Got an Data Check 5045 (HP 1345A) digital vector display powered up and running. The AMP 1-350241-1 6-pin “Miniature Rectangular” power connector HP specified is no longer made. The TE/AMP web site shows it as having been replaced, but oh-so-conveniently didn’t give any indication of what the replacement is. I found what looked like the right connector in stock at Pleasant View Electronics, just three blocks from where I live; it turned out that it was the right shape but wrong size (too large). Eventually I discovered that the TE/AMP 1-640250-0 socket housing and 641294-1 socket contacts are correct. I wired it to a Mean Well RT-50C triple output switching power supply, and it worked.
  3. I started writing a disassembler in Python for the Intel 8089 I/O processor last year, but hadn’t completed it. I dusted it off, finished the disassembler, and added an assembler. It’s published as Free Software (GPLv3) on Github.
  4. The motivation for the 8089 tools is that I wanted to reverse-engineer the Intel iSBC 215 family of Multibus controllers for Winchester disk drives, which uses the 8089 and is found (among other places) in Intel MDS Series II/III/IV development systems. I’ve made some progress reverse-engineering the code, and have put the assembly source code on Github. The assembly source does assemble back into the original binary. I’ve identified some of the global variables and much of the command parsing.
Posted in RetroChallenge | Leave a comment

Vector display working!

Some years ago I obtained a few Data Check 5045 digital vector displays from HSC Electronic Supply. Data Check bought the product line from HP, where this model had been the HP 1345A. HP used these in some of their own test equipment, and sold them for OEM use.

The displays have just sat unused until now. I’ve said for several years that I’d do some vector display stuff for RetroChallenge, and repeatedly did not get it done. After several such failures on my part, I decided to do a non-vector-display project for RetroChallenge this time around, so naturally this time I actually did something with a vector display.

So far I have wired the display up to a power supply, and without any data source connected, it displays a test screen from its internal ROM, which even includes an outline of Pikes Peak.
30356311636_9ff27f25c5_z

I took a few photos.

The display needs +5V ±5% at 0.75A , +15V ±5% at 1.05A, and -15V ±5% at 0.3A. The maximum p-p ripple is specified as 10mV for both 15V rails, and 50mV for the 5V rail.

I’ve used a Mean Well RT-50C closed-frame switching power supply, which provides +5V at 4A, +15V at 1.5A, and -15V at 0.5A.  Mean Well seems to make good quality switching power supplies at bargain prices; in quantity one, the RT-50C costs $21.26 from Mouser Electronics.

I did not add any ripple filtering, and even with the filtering recommended by Mean Well, the rated ripple exceeds the maximum specifications of the display. To do this right, I need to put some serious LC filters on the supply rails. However, I don’t think the ripple without the filters will cause any actual problem, other than that the display precision won’t meet its specs.

The next step will be to hook the display up to a microcontroller, so I can display my own graphics.

Posted in RetroChallenge | Leave a comment

Vector display!

Some years ago I obtained a few Data Check 5045 digital vector displays from HSC Electronic Supply. Data Check bought the product line from HP, where it had been the 1345A. HP used these in some of their own test equipment, and sold them for OEM use.

The displays have just sat unused until now. I’ve been saying for several years that I’d do some vector display stuff for RetroChallenge, and not getting it done. After several such failures on my part, I decided to do a non-vector-display project for RetroChallenge this time around, so naturally this time I actually did something with a vector display.

So far I have wired the display up to a power supply, and without any data source connected, it displays a test screen from its internal ROM.

The display needs +5V ±5% at 0.75A , +15V ±5% at 1.05A, and -15V ±5% at 0.3A. The maximum p-p ripple is specified as 10mV for both 15V rails, and 50mV for the 5V rail.

I’ve used a Mean Well RT-50C closed-frame switching power supply, which provides +5V at 4A, +15V at 1.5A, and -15V at 0.5A.  Mean Well seems to make good quality switching power supplies at bargain prices; in quantity one, the RT-50C costs $21.26 from Mouser Electronics.

I did not add any ripple filtering, and even with the filtering recommended by Mean Well, the rated ripple exceeds the maximum specifications of the display. To do this right, I need to put some serious LC filters on the supply rails. However, I don’t think the ripple without the filters will cause any actual problem, other than that the display precision won’t meet its specs.

The next step will be to hook the display up to a microcontroller, so I can display my own graphics.

Posted in RetroChallenge | Leave a comment

Power supplies, connectors, fan, etc.

I’ve made a small amount of progress on the code, but nothing particularly noteworthy. I’ve given some thought to the design of a 3D-printable enclosure. I’m not sure whether I’ll end up needing a fan. I’ll put ventilation holes in the sides of the enclosure, which might be sufficient. I’d like to put the power supply on the bottom of the enclosure, but without a fan, that will result in heating up the boards above it.

I just placed an order with Mouser Electronics for power supplies, connectors, fan, etc., specifically:

  • Mean Well RD-35A switching power supply, 5V 4A and 12V 1A
  • Qualtek 761-18/003 AC power entry module with switch and fuse
  • Qualtek FAD1-08025CBLW11 80mm x 25mm 12V DC ball bearing fan
  • Qualtek 09325-F/100 fan finger guard and air filter assembly
  • TE 3-350816-2 quick-connect crimp terminals (for AC power entry)
  • Molex 19142-0024 spade crimp terminals (for power supply)
  • Molex 47053-1000 four-pin fan headers
  • Molex 47054-1000 four-pin fan connector housing
  • Molex 08-50-0114 crimp pins for fan connector

If I do use a fan, I’d like to use a four-wire fan, with PWM input and tachometer output, though that’s overkill.  The Tiva microcontroller has plenty of timers that are suitable for generating PWM and measuring the tachometer output.

It’s easy to find four-wire fans for PCs, and it’s easy to find ball-bearing fans, but it seems remarkably difficult to find four-wire ball-bearing fans. I ordered a Qualtek two-wire ball-bearing fan, but I’m considering ordering a Delta AUB0812L-9X41 four-wire fan from Digi-Key. It uses a “Superflo bearing“, which is a permanently lubricated sleeve bearing.

The OEM fans just have the wires unterminated, so I have to add the connector. The wire colors Delta uses don’t match the colors in the Intel four-pin PWM fan specification. Also Delta specifies a preferred PWM operating frequency of 20 kHz, while the Intel spec calls for 25 kHz nominal with an acceptable range of 21-28 kHz.

 

 

Posted in RetroChallenge | Leave a comment

More GPIO fixes; changed EPI code for two chip selects

My GPIO fix for pin numbers vs. masks needed to be made in a few more places, so I’ve done that now.

The Intel D7220-1, like many peripheral chips, uses a chip select input (CS) for programmed I/O, but a separate DMA acknowledge (DACK) for DMA transfers. I might only use programmed I/O for this project, but the External Peripheral Interface (EPI) of the Tiva supports 1, 2, or 4 chip selects, so I updated my EPI code to use 2, and will wire the second one to DACK.

Posted in RetroChallenge | Leave a comment

Fixed the LED and USB problem

In a GPIO initialization function I’d written, I was passing a pin number as an argument to a vendor function that expected a mask. Changed it to 1 << pin, fixing both the LED and USB problems.

Windows 10 isn’t completely happy with my USB device, which is a composite device with a CDC ACM (virtual serial) device and an MSC (mass storage) device. It sees both, but neither work properly. In Device Manager, both say “The device is working properly”, but they both have “Device not migrated” in their event logs, the CDC says “requires further installation”, and the MSC says “Device not started”.

On the other hand, Linux assigned the CDC to /dev/ttyACM0, and Kermit was able to open it fine, though the device driver logged some complaints. Right now the CDC device just echos back what is sent to it, and that’s working since what I type in Kermit is displayed.  Linux doesn’t like the MSC device.

Posted in RetroChallenge | Leave a comment

GPIO, USB problems

I’ve continued working on the firmware, and have run into two problems:

  1. I can only turn on one of the four LEDs on the Tiva board. The other three obstinately remain off. I don’t really need any LEDs, but this makes me think that I don’t understand the Tiva GPIO as well as I should, and that could cause other problems.
  2. After all of the USB stack initialization, the USB interrupt is never invoked, so nothing ever happens. It won’t enumerate when the USB is plugged into a host computer.

I put the partially reverse-engineered firmware of the Helix Labs bubble memory card for the Apple II on github. That’s not part of this RetroChallenge project, but it’s somewhat relevant because the card uses the same Intel bubble memory chipset as this project.

Posted in RetroChallenge | Leave a comment

Started writing firmware for USB bubble memory interface

I’ve started writing the firmware for my Retrochallenge project. For the USB to bubble memory interface, I’m using a Texas Instruments EK-TM4C1294XL “Tiva™ C Series TM4C1294 Connected LaunchPad Evaluation Kit”, which is based on the Tiva TM4C1294NCPDT microcontroller. This has a 120 MHz ARM Cortex-M4F core, USB, 10/100 Ethernet (including PHY), and an external bus interface (EBI).

There’s some irony in that the bubble memory board I’m interfacing to USB provide 1 Mbit (128Kbytes) of non-volatile bubble memory storage, while the microcontroller has 8 Mbits (1 Mbyte) of internal flash memory. C’est la vie.

The Intel D7220-1 bubble memory controller has a fairly typical peripheral interface, with an 8 bit data bus, one address line, chip select, read and write strobes, and interrupt and DMA request outputs. I’ve previously used the Tiva external bus interface to interface to a Western Digital style floppy disk controller chip (actually a Fujitsu MB8877A), and this interface is electrically similar.  The D7220-1 is a 5V NMOS devices, and the Tiva does not have 5V-tolerant I/O, so I will have to use external level shifters.

I installed TI’s Code Composer Studio 6.2.0 and the TivaWare SDK 2.1.3.156 on my Fedora 24 system. Although TI doesn’t officially support Fedora, it works fine.

I dusted off the code I used to talk to the floppy controller and ripped out everything specific to the floppy, to use as a base for the software for this project. What’s left is the initialization for the UART and EBI, and DMA code to do write transfers over the EBI.

The D7220-1 requires a 4 MHz clock, so I wrote code to initialize one of the Tiva timers in PWM mode to produce the clock. It took about 5 minutes to write the code, and about an hour to attempt to debug it. The PWM output appeared to be stuck at 0. I put in code to toggle the GPIO pin without using the timer, and the pin still stayed at 0. I ultimately discovered that I was looking at the wrong logic analyzer channel. Actually the timer code worked just fine.

Next I’ll try adding some USB code. I’m considering using FreeRTOS, though I probably could get by just fine with no RTOS.

 

Posted in RetroChallenge | Leave a comment

RC2016/10 entry

For the RC2016/10 RetroChallenge, my project is to interface some bubble memory to USB, to act as a very low capacity drive.

Bubble memory is the future of non-volatile memory.  Or rather, it was the future of non-volatile memory from the 1960s to the 1980s.  It was expensive, and didn’t scale beyond 4 megabit (512 Kbyte) devices, so it was displaced by flash memory. Development of bubble memory technology ceased in the mid-1980s, and it saw use in military and other specialized applications into the 1990s.

I’ll be using an Intel BPK72A bubble memory board, which has one Intel 7110A 1 megabit (128 Kbyte) bubble memory device and associated support components, including the Intel D7220-1 controller.  I have not yet verified that the BPK72A is operational; if there is a problem with it I may be able to repair it, or as a backup plan, I might substitute a known good Helix bubble memory board for the Apple II, which also used the 7110A, D7220-1, etc.

The BPK72A needs about 6.75W of power, before I add a microcontroller and USB interface, so unfortunately it cannot be powered from USB, and will require a separate power input.

Posted in RetroChallenge | Leave a comment