Tuesday, May 23, 2017

Adjustments made to disk tool

Maker Faire took place these last few days and I was busy volunteering as an examiner for amateur radio license testing, for attendees who wished to get or upgrade their ham radio licenses. Since the FCC requires a ham license to transmit video from a drone, in addition to the usual reasons people become hams, we were fairly busy. I worked the first shift every day. 


While at the ham testing booth at Maker Faire waiting for the show to open to the public each morning, I did some work on the disk tool to clear up the synchronization issues when writing images to disk cartridges. Of course, this requires testing to validate but this looks promising.

I also tweaked the reading logic to be independent of recorded clock pulses from the disk drive once the checksum of each record is read and tested. The Alto switches from the disk drive clock line to its internal clock at this point, just as it uses the internal clock to count off the preamble time before it looks for the sync word beginning each record.

Thursday, May 18, 2017

Mostly testing and data collection tasks on the Alto


I stopped by the workshop in Marc's basement and did some testing with my logic. I discovered a problem in the way I load the shift register that serializes each word to be written to the disk drive. I am clobbering the data in the shift register before it has been written fully out, in some cases, which manifests itself when the sync word (x0001) last bit '1' does not make it onto the disk.

The challenge here are several independent processes with strong timing requirements that have to interface with my overall logic to write out a record. Another timing dependent activity is RAM access, taking multiple fpga cycles to complete, in order to fetch the next data word.

One machine is emitting clock bits every 600 ns and at the 300 ns point, midway in that cycle, it will emit either a 1 or 0 data bit. The serializer must shift out a bit to set it up for the first machine. The serializer counts down the 16 bits as they are shifted out, then emits a signal to get the next word.

My overall record-writing logic must load words when the serializer requests them, but also has to have read the data word from RAM in advance to allow it to feed the word on demand to the serializer. I issue the load request for the serializer as soon as the RAM read is complete, but that is before the prior word is fully shifted out since I have to do the reading in advance.

I am refactoring the logic again to get this cleaned up and will then have to test next week, after Maker Faire is over since many of us will be doing duty there.


In addition to the data capture I pursued, we worked on a few other tasks. I upgraded the ethernet bridge machine (on loan from LCM) with the latest code they sent. We made use of it to boot over the network and explore many functions and capabilities. The one we failed at was achieving a copydisk over the network, to read a cartridge in the real Diablo drive in the Alto and copy it to the bridge machine which is PC based.

Ken worked with his ethernet tool to check out and build up his protocol support. His code begins the network booting sequence for the Alto getting back the specific image request but is not yet able to send the entire image. He is able to connect as ftp users and ftp servers, but something is still going awry with building command lines the server will accept

Wednesday, May 17, 2017

Issues found and hopefully fixed in disktool writing, plus good day with the 1401 computers


Counting clocks and laying out the data bits into words was the key to spotting problems. Immediately, I saw a few issues in the stream I wrote. I have to work through the logic in the tool, instrument some signals to help me debug it with a logic analyzer and resolve these.

First, I see that the bits that looked correct for the header record were actually incorrect. The header record consists of the sync bit, two words of zero (32 bits of 0), and a checksum word of 0x0151, then there will be ten words of zero following it. 

The checksum on the disk is a bitwise XOR of each word with the running total, initially seeded with 0x0151. Thus, if we start with 0x0151 and XOR by 0x0000 twice, we still have 0x0151 in the running total. The checksum word on disk, 0x0151, is compared to the running total 0x0151 and we have a validation of the record integrity.

However, I found that I wrote the sync bit, only one word or 16 bits of zero, 0x0151, and a stream of zero words after. I dropped one of the two words of the header (0000 instead of 0000 0000). This coincidentally passes the checksum validation (!) thus giving the misleading symptom that my reading problems only occurred on the following label record.

To see why this still passes muster, consider the process in the microcode. After it finds the sync bit, it reads two words in and XORs them to calculate the checksum. It then reads the third word from disk and compares to the running total. Here is what happens with my abbreviated record:

  • Initial seed for checksum sets it to 0x0151
  • First word of zero is read, XOR leaves running total at 0x0151
  • Second word is 0x0151 since I omitted the true second word
  • XOR of second word with running total sets it to 0x0000
  • Third word read is really one of the zeroes that sit between records
  • Check of the third word - 0x0000 - with the running total 0x0000 yields equality
  • Checksum appears to validate integrity of the record
I have a miscount in writing out the data, omitting one of the header record words of 0x0000. That must be addressed, But wait, there is more! The gap between the header and label records should be exactly ten words of 0x0000 followed by the sync word of 0x0001 but the timing shows there are a few extra clock cycles or bits of zero in the gap. This must be addressed too,

Looking at the label record, which should be a sync bit, eight words of the label data, a checksum for the record and another gap filling set of ten words of zero, I find that the first data word is correct but the second is not right. Therefore, the problems are not simply a failure to write all N words of a record, but are worse. 

My logic is fetching words from RAM to fill a shift register, shifting the bits out serially to output each word of a record. Either I didn't fetch the second and ensuing words properly or there is some other failure in coordination between shifting, reading, loading and managing the record. 

The first word of each record comes out right, which makes the results on disk superficially appear correct. It is only when carefully counting more than 5000 clock cycles and laying out the words they represent that the problems are clearly visible. 

I think I fixed several of the problems through a refactoring of the write field logic in the disktool, but I also set up key signals to be monitored on the four PMOD connectors on the fpga board. I can hook these to the logic analyzer and debug more deeply, if what I see on the scope doesn't match what should be written.


I rebuilt four more of the power sequencing SMS cards today, replacing three resistors with two of different values and one transistor from type 26 to type 30. They were all tested in the Connecticut machine and performed perfectly. We now have both machines with two new cards in the sequencing gate, plus two spares placed into our inventory.

We seem to have a problem on one of the 026 keypunches which were converted from selenium rectifiers to modern silicon diodes. We think that at least one of the six diodes is malfunctioning, although the full wave bridge is working fine. More diagnosis needed to find and replace the pesky critter.

A new volunteer, Nora, is working on organizing all the parts in the workroom. It will be a delight to have everything well labeled and easily accessible. The challenge in front of her is formidable, as we have many boxes or bags that contain a huge jumble of components.

Imaging a few hundred assorted transistors in a plastic baggy, then multiply that by many such collections. Finding a part of a given type, such as the type 30 transistors I needed, is a painstaking process thumbing through everything. When Nora is done, we will have these sorted, separated and labeled.

One of the 1401 systems forgot how to stop today. A program would be started but none of the Stop buttons on the CPU or peripherals would cause it to stop the execution. Bill traced it to a failed Stop Latch and replaced the card. I will diagnose and repair the card itself next week and put it back into spares. 

Saturday, May 13, 2017

IBM 1130 panel schematic, Alto restoration progress


I decided to attach the circuit drawing for the replacement lamp driver circuit I am building, noting its similarity to the original IBM circuits although superior from a mounting and service standpoint.

Lamp driver circuit - lamp test switch shown at bottom

IBM 1130 circuit by comparison


Still not booting from the cartridge after I write it. Did read of the sector and captured on a scope. Now for extremely tedious counting and measurements to see what/if I did something wrong.

I centered the scope on some key pulses, such as the one bit that comprises a sync word, to get precise timings relative to the sector start, then other sets of pulses were interpolated from the grid marks on the scope face so that I can determine the timing with reasonable precision.

The clock pulses are in a train on the other trace below the data bits, one every 600 ns in a sector that 3,333 us long. That is a LOT of clock pulses and for long strings of zero words I have to count them. Each word is 16 bits therefore 16 clock pulses per word. For example, the separation between records in a sector is 10 words of zero plus a sync word with a single bit on. That is 176 clock pulses that have to be carefully counted.

Then, in the data words of a record, I have to carefully count clock pulses to divide out the data bits into words, before checking them against the file contents I tried to write to the cartridge. Checking 326 words in a sector involves accounting for 5, 216 clock pulses.

I spent the day Saturday capturing and recording the timings of the 1 bits, but was only beginning the checking of clock pulses to align them into words by the end of the day.


Yesterday we made progress on several fronts and dug into diagnostic information on others. The Digibarn machine was further cleaned and examined. The monitor that came with it is built for a Dorado, a later machine. It has a 6502 microprocessor on a board inside that multiplexes the monitor, keyboard and mouse signals over a bus using seven differential pairs with fast ECL drivers. That is very different from the connectors used with the Alto. Fortunately, we can intercept the signals from a connector inside the monitor and wire up our own cable adapter.

The capacitors to replace inside the power supplies have not yet arrived, so we didn't make any progress on that part of the Digibarn machine. Al Kossow warned us of a tantalum capacitor that often fails in the supplies, which we will also check before finishing the restoration of the supplies.

Ken's network tool passed several milestones, successfully handling echo protocols, telnet connections and ftp connections. The ftp protocol is different from the more commonly known protocol that comes with TCP/IP systems, but has similar goals. The client connects to the server properly, and command strings are mainly recieved and parsed properly, but the unit is not yet executing those commands.

With a bit of tweaking, we had the LCM ethernet bridge operational, which will be important to link together groups of Altos as we more are made operational. We did some network booting and communications, but didn't explore the file server or other utility functions. 

Wednesday, May 10, 2017

Finished up the upgrade of 026 keypunches, 1401 power sequencing, and built Digicomp I replica


I finished up the work changing out selenium rectifier stacks for silicon diodes in the remaining two 026 keypunches. It was a somewhat tedious job but done by lunchtime.

I managed to find another IBM 030 transistor and heatsink, which I put into my modified power sequence card for the 1401. This version of the circuit, discovered in the main 1401 ALDs but not matching the cards installed in the systems, runs much cooler. 

The original cards, used to validate a power supply voltage and activate relays in the powerup sequence, had pretty low resistor values biasing the transistor, one end of the divider tied to a 30V reference voltage and the other tied to the power supply being validated. It burned almost 4W in the divider, all the time, with the two resistors sitting flat on the card with no airflow around them.

The result is scorched card material, sizzling hot resistors and periodic failures of the cards. The alternative schematic I found replaces a 600 - 56 divider with a 3000 - 220 divider and puts in a different transistor number with a small heatsink. The circuit runs about 25 times cooler.

Now we have both of the two sequencer cards in the German 1401 converted. As soon as Glen, our wizard finding parts in the workshop, returns and finds me two more, I will convert the two cards for our other 1401. 


When I was young, in the 1950s and early 1960s, the only 'computer' access available to virtually any youth were machines designed to teach computing principles but built with mechanical, switch and light bulb and perhaps a few relays on the high end options.

Geniac (sometimes called Brainiac), consisted of a large perfboard with six large round perfboard dials, where the holes would be filled with screws and nuts, so that the round dial's screws contacted the screws on the main perfboard underneath. One wired between the various screws to implement logical functions, ultimately illuminating one or a few small flashlight bulbs to indicate the answer. 


Digicomp I was a plastic kit with three "flip flops", where a lever was turned to implement logical functions. It was programmed by placing cylindrical plugs on the flip flop edges, then when the lever moved the boards, some vertical wire rods were pushed and in turn shoved sliders left and right. The outcome was read through a slot on the left, consisting of the three binary digits that were the current flipflop state.

The Minivac 601 had eight pushbuttons, eight relays, eight slide switches, and eight light bulbs, which could be wired up to implement very simple logic functions. In addition, it had a rotary dial powered by a motor, which acted as a rotary switch. You could program it to run the motor and stop when the dial reached the answer position, thereby energizing or dropping one of the relays. 
Minivac 601.jpg
As you can see, these were incredibly simplistic virtually toys. Unless you were one in a million and had some access to an actual computer, this was all you could get as a 'personal computer' in those days. The Minivac 601 was designed by Claude Shannon, had some cachet, but was also inordinately expensive for a youth, as its price was the equivalent of over $675 today. 

I had a Geniac and a Digicomp I, plus I knew a well off schoolmate who had a Minivac 601 that I could look at longingly on occasion. My Digicomp, being rickety plastic, fell apart long ago and was just a memory, but I discovered someone selling a reproduction kit, using cardboard and foamboard rather than plastic.

I just assembled my Digicomp I replica and spent a bit of time 'toying' with it. Three flip flops and a limited number of ways to make them interact - pretty limited but it can count modulo 8 and do some very simple tricks. 

My high school had a 1620 computer but the conditions for attending the related class didn't work out for me, so it wasn't until a couple of years later than I had a chance to get hands-on time with an IBM 1130.

Not just keypunch decks of Assembler or Fortran to have run in a batch, like most users, but if I was willing to show up at 2AM when the batch processing was complete, I could work by myself for the rest of the night. Hand stepping code and quick turnaround of coding errors helped me appreciate computers to a sufficient depth that I changed the trajectory of my life and moved into the computer field, rather than working on space programs. 

Tuesday, May 9, 2017

Digging into remaining Alto disk mysteries, prototype successful for IBM 1130 pedestal panel light enhancement


I have two unresolved questions concerning the Alto disk behavior:

  1. 1) There is a delay at the start of the sector that appears as a long wait in the logic analyzer trace but I don't know what causes this.
  2. When the Alto does an update, it reads at least the header record before switching to write mode to write the data (and optionally label) record(s), but I don't see how it retains the 10 word gap that exists with pure write or pure read. 

I am studying microcode and thinking about this, hoping to resolve #2. I can deal with issue #1, if I can't understand its cause, either by writing without the padding if an Alto still reads it, or by injecting an arbitrary padding myself.

The flow of the microcode is to loop through four times in the lifecycle of a sector. First is a quick initialization pass. The next three are for the header, label and data records respectively. Most of the flow is the same, but there is a conditional branching construct based on the record number being processed that picks up the unique values related to the record being processed.

The other important conditional branching constructs are RWC and WR. The first changes the path depending on whether the operation for this record is a read, check or write. The second changes path depending on whether a read or write line operation is active.

The microcode sets up a countdown loop, called a preamble, at the front of each record. It is 29 words long when writing zeroes in front of the header record and 18 words long of ignoring input for reading that same record. The preamble for the label and data records is 4 words of zero when writing and 5 words to ignore when reading. The postamble of all three record types is six words when writing and four words when reading.

Thus, we write all three records in a sector with 29 zero words, the sync word, the header record, six postamble zero words, four preamble zero words, the sync word, the label record, six postamble words, four preamble words, the data record and six postamble zero words.

When we read that record, we skip over 18 words, then start reading but waiting until we see the sync word. That would be in roughly 11 more word times. We read the header record and read four of the postamble words but don't look at them. The next record begins by skipping over five words worth of time then reading while looking for the sync word, which takes one word of zeroes before we see it.

This all works because the reading process involves 9 words in total across preamble and postamble, while we wrote 10 during the write operation. That means we skip over one more word of zeros before seeing the sync word.

Reading the microcode for an update operation shows timings that don't make sense. The header record is always read, so skip 18, look for sync, read the record, and read but ignore the next four zero words as a postamble. Now, however, when we switch to the label record which will be written, the logic will write out four words of zero as a preamble. It then writes a sync word and the label record itself.

The inconsistency is that the gap between the end of the header record we just read and the label record we write has eight words of zero before the sync word, not ten like occurs with a pure write of all three records. Yet, the reading logic will consume nine words before it looks for sync. This means it will gobble up the sync word as the last of the nine words, thus failing to sync up.

It doesn't make sense that only eight words will be between the records after an update but ten otherwise. I have to ascribe this to something subtle I don't understand in my interpretation of the microcode and its likely execution path.

To handle issue #1, I dedicated slide switch 3 to add an 82 us delay at the start of a written sector when the switch is on, otherwise we write the 29 preamble words immediately. I can experiment with the effect of adding this, to see whether the Alto can boot or read packs that I have written in either case.

As I prepare for a testing session on Friday, I expect that I will be able to write a cartridge that can be booted and read by the real Alto. Whether this requires the mystery padding words or not, this will allow the tool to both read and write cartridges properly. The ability to update just the label or label plus data records is still untested and in great doubt.


I looked closer at the SCR modules used by IBM and found that they do NOT have isolation diodes as I would have expected. Instead, IBM places a 6.2K resistor in line with every system signal input to the modules and has a 6.8K resistor internally to the module in line with the lamp test input.

My prototype circuit will involve a series resistor to limit current into the SCR module, which hopefully will work safely with the existing 6.2K inline resistors since it will be infeasible to replace them. I could augment them if I need more resistance, however.

I could play around with an alternative that uses a diode to isolate the lamp test input, driving the entire panel worth of SCRs with a single 6.8K resistor (or whatever value the SCR needs) fed through those diodes.

My testbed consisted of a 6.3VAC AC power source (not quite the 7.5V of the IBM system but good enough as a proof of concept), a variable DC source set to 3V to mimic an SLT output level, and some point to point wiring across the scr, resistor and other components as I tested it. I also tack soldered the lamp onto the module.

The circuit worked great. Bulb bright, with the actual AC voltage measuring a tad over 7V so even better than expected. I studied the IBM lamp test and lighting circuit wiring more closely and discovered that the resistors will work just fine, avoiding the need for diodes. The trigger voltage was dropped to near 1V and still turned the lamp on brightly.

The way the IBM circuit is wired, the SCR gate is tied to a voltage divider of a 6.2K ohm resistor up to the system signal line and a 6.8K resistor to the lamp test line. Lamp test is held at ground unless the switch is momentarily activated, at which point it is connected to +3V.

The input from the system logic will be either up near +3V if logically on or down near 0V if logically off. The resistor divider network will take that signal down to ground through 13K of resistance, drawing less than a milliwatt of power and less than 1/4 milliamp of current. The midpoint of the divider presents a bit more than 1.5V, which works just fine to switch on the SCR.

If the lamp test is connected, the +3V on the lamp test line is either divided by the near 0V from the system logic line or up at +3 if both are active, in either case firing the SCR. There is no issue with having multiple system logic lines connected through 13K to ground as this is a normal load for an SLT circuit.

This saves me a bunch of money, as I only need a 6.8K resistor and an SCR for each bulb and I will have a completely suitable lamp driver for the 1130. The signal lines connect in directly to the gate of the SCR, the cathode is at ground, the 6.8K resistor runs between the gate and the lamp test line, and the anode of the SCR runs through the light bulb to the 7.5 VAC that swings above and below ground.

I have to plan for 155 lamp circuits - 96 for the six major registers plus another 51 status signals and 8 CE lines that can be wired to monitor any 8 logic levels in the system. With some extras as a buffer, hat comes to about $100 in SCRs, perhaps another $100 for the circuit board and miscellaneous components such as resistors and headers.

A project that is well worthwhile given the headaches it saves. I placed the order for the SCRs and resistors today and will begin designing the circuit boards soon.

Monday, May 8, 2017

Introduced important fix to the Alto Disk Tool, began prototyping for 1130 panel upgrade and worked on CHM modifications


I reengineered the tool to add the extra delays I am seeing in packs that boot properly. Initially, the tool will write zero words equal to about 82 us of delay before it starts the 28 preamble words of zero. In between records, the tool will insert two extra words of zero.

The microcode uses constants for the delay words between records, but the actual execution takes one more loop than the value in each constant. Thus, if a constant of 4 is described, the microcode does this task five times. It was easy to overlook this when interpreting the microcode listing, but the logic analyzer makes it clear.

I don't think the initial delay is critical, as the Alto did read the header record of the sector correctly before stumbling on the label and data records. However, the extra two words between records is essential. The way an Alto moves between records ensures that it has already passed the sync word I wrote before it starts scanning for it, thus guaranteeing a misread.


I received my sample SCR and diode devices, allowing me to build a prototype to test driving indicator lamps with a 7.5 VAC supply and logic signals conforming to IBM Solid Logic Technology specs on both the signal and lamp test inputs. If this works well enough, I can design the circuit board to implement all the light positions in the 1130 pedestal box.


I worked with Bill Newman who was applying an upgrade to four of the 026 keypunch machines, replacing the original selenium rectifiers with modern silicon diodes. We are doing this to avoid the noxious and slightly toxic fumes that Selenium rectifiers emit when they fail, as a safety measure.

We completed two of the four machines completely, meaning replacing the bridge rectifier as well as six separate selenium stacks used as diodes. Two other machines had their bridge rectifiers replaced, but we didn't have enough single diodes to replace the stacks with six diodes apiece. We will complete those on Wednesday.

I brought in a supply of 220 ohm 2W resistors to refill the empty drawer in our workroom and to complete the modified power sequencing SMS card for the 1401 systems. The original cards that sit in the machine have a pair of resistors that get extremely hot in operation, scorching the actual card underneath.

A 1401 power sequencing schematic shows an alternate set of components that run much cooler. I changed the card to match. This involved three new resistor values to drop the bias current, reducing the power dissipated from 3+ watts down to fractions of a watt, in conjunction with a changed transistor type.

We placed the modified card in the machine and verified that it successfully sequences power up and down. Next, I will build another such card since the 1401 uses a pair of them. The next card was all but complete, except for the IBM type 030 transistor, which I couldn't find in our stocks.

Saturday, May 6, 2017

Working on Digibarn Alto, disk tool and ethernet bridge


I may have found some differences that could account for the failure to boot/read the disk cartridge that was written by my disk tool. Changes made, but I also set up some diagnostic output that I can use to closely examine the output of my tool while writing if it doesn't work first time.

The changes were not sufficient to allow a cartridge I wrote to be booted. See below for more on this.


We have a loaner ethernet gateway built by the Living Computer Museum which will allow us to access a file server in that box, share with other Altos including our unit, and do network bootups. In addition to loaning us the gateway, Al Kossow loaned us the cables and transceivers to connect to the unit.

I brought my disk tool changes to see if I can write a pack that will boot on the Alto, or at least collect more definitive forensics if it doesn't work right away. Ken brought his ethernet gateway as well. Bruce Damer brought along his Alto system in order to see whether it is working or what might be wrong. Of course, we had to visit his Digibarn collection in order to help him load it up.

Bruce's Alto had been visited by mice while in the barn, so the first order of business was to wash off all the boards and remove droppings from inside. We discovered that a few key parts are missing from the unit, including the memory addressing board, the jumper cable for control ram, and the video display cable.

We couldn't test his display as the cable connection is different from the unit on our Alto. He had brought a disk drive along but we found a label inside it - "smoked" - which may indicate serious problems. No obvious signs of damage, but he will bring other drives next week.

We pulled the four power supplies out of the machine and brought them to the bench for testing. One large supply provides +5V with both high current (60A) and low current outputs, two units provide 15V up to 12A of current and one provides 12V with up to 15A of current.

One of the 15V units came up perfectly, tested right up to its 12A load limit and with acceptably low noise showing on the scope. Another 15V unit had a missing fuse, which we replaced but it promptly blew the new one. The 12V unit refused to delivery any output power. The 5V supply also delivered no output at either the high or low current connections.

We opened the 5V supply and found a blown 12A fuse inside. We didn't have a spare 12A fuse but decided to remove the filter capacitors and check them, as they are the most likely component to have failed. Three of the four capacitors failed miserably and the fourth was way off spec, meaning they must be replaced.

Once we install new capacitors and a new fuse next week, the last check before power is applied should be the rectifier diodes, to be sure they didn't fail due to the capacitor problems.

Moving on to the LCM ethernet bridge, we installed it. It consists of two ethernet transceivers, one cabled to the Alto and the other cabled to the special board in a small PC that houses the bridge. A section of ethernet, terminated at either end, is hooked between the two transceivers.

We powered up and started the software as outlined in the instructions, but were unable to ping the unit nor able to netboot from it. We didn't have time to determine where the problem lay, partly because we weren't fully familiar with the unit. Next week we will look to this.

My diagnostic outputs on the disk tool allowed me to watch the signals I was producing when writing to a disk cartridge with a image of a games disk that works fine on the Contralto emulator. They matched exactly what I expected to produce. Once again, the Alto wouldn't boot from it.

I then took three good cartridges, ones that were written on various Altos and that booted fine, watching what I could read from sector 0. I discovered two big discrepancies from what we expected to see, indicating that the spec to which I am working is not correct.

First, the initial sync word for the header record of the sector should, per the spec, occur 28 word times after the sector started. That would be around 280 us or so. On the three cartridges I tested, this happened at 415 us or slightly later, a big discrepancy.

Second, the time from sync word to sync word is longer than I expect by two extra words of zeroes. From header record to label record, I should see two header words, the header checksum, five postamble words and three preamble words for a total of 11 word times. Instead the delay is 13 word times. The label record to data record gap should be 17 words long but was 19, also having two extra words of zeroes.

The logic analyzer traces I have when the Alto read a cartridge successfully don't show the extra time,neither the source of the 130 us or so of initial delay nor the occurrence of two extra words of zeros between records.

As a practical matter, I will modify the tool to push the first sync word back to the 415 us region and to stick two extra words of zeroes between records.  Next week we can see if this produces a properly bootable cartridge.

Even so, I want to understand how the real world disks can be so far off what the microcode seems to produce. Maybe I can find clues in the logic analyzer trace or the disk controller hardware.

Tuesday, May 2, 2017

Progress on Alto disk tool, planning improvement to IBM 1130 display panel, and helping move a 4331 system


Working through the logic analyzer trace line by line, decoding and understanding the microcode of the Disk Word Task and its related hardware, led to the discovery that some of the comments documenting the microcode used numbers that appeared to be decimal but were in fact octal values. 

Thus, when the DWT writes a sector, it begins with 34 words of zero (in octal) which is only 28 words. My spec for writing the sectors had a few such constants wrong. Working through it all, I have an updated spec and am in the process of adjusting my fpga logic to fit that. 

To understand this well, I had to master the Alto microcode and controller hardware so that I know exactly what is happening on the disk. I had a logic analyzer trace while the Alto read a sector, which I used to ensure I knew the exact sequence and timing of the operations.

I didn't have a corresponding trace of a disk write, but I mocked up a copy of the trace, changing each instruction which varies during a write instead of read. It confirmed my newly corrected spec for the disk format and operation. 


On the IBM 1130, a pedestal above the console typewriter contains about 150 incandescent lamps behind a smoked plexiglass faceplate, used to report on the values in key registers and system state information. Any time a bulb burns out and needs replacement, the design of the pedestal turns this into a long, tedious and frequently futile effort to end up with all lamps working correctly. 

Lamps pushed onto PCB boards
Honeycomb that the bulbs must fit into
I conceived of an alternate implementation for the insides that would preserve the incandescent bulbs, SCR control of the bulbs from a 7.5 VAC supply, and lamp test functionality, yet would allow for fast and easy replacement of any future failed bulb.
Boards pushed into the honeycomb - all 16 bulb sockets must align perfectly
I will replace the long shallow PCBs used by IBM. These contain an SCR module and have two pins to push into each light socket. The socket is in turn pushed into the honeycomb. The stiff power wires on the left or right end of the board, plus the 16 yellow signal leads running to the SCRs, make it extremely hard to maneuver the board and all its sockets into place. 

Instead, I will build one wide and tall PCB that is oriented in the plane of the honeycomb (top to bottom, left to right but not front to back). It will have a socket in place for each of the sixteen lamp positions of the existing boards, replicated so that the one new board replaces the six rows of old boards. 

The lamps used by IBM have bare wire leads coming out of the glass envelope. They are inserted into a plastic socket which has two cylindrical metal openings at the rear for insertion of pins. One of the pins for a light is fixed on the front of the SCR module, but the other is attached to the PCB with a looped pigtail wire. The pigtail wire can't be easily pushed into the lamp socket. 

Bare wire lamp inserted in plastic socket
pigtail wires
SCR modules on board
If the wires from the bare bulb extend out of the side of the plastic socket too far, they can short to adjacent sockets, which results in a block SCR module. This module has two diodes as well as an SCR, to provide individual firing of a lamp from the signal coming in by yellow wire on the back, and also bulk firing of all lamps from a 'lamp test' signal fed to all modules simultaneously. 

If the pins are slightly bent, the socket will also be bent. Since the pins must be press fit into the socket but the socket must also be press fit into the honeycomb, the result is a board with 16 sockets all slightly skewed from the position needed to push into the honeycomb. Now imagine the stiff wires that are in place and you see why it becomes quite challenging to fit even one PCB into place, much less 12 that are very close together. 

bulb sockets pressed into honeycomb
Roughly 150 lamps more or less inserted into place
My solution will allow two large PCBs to swing out from the left and right sides respectively, giving access to plug in my new lamp sockets for each failed bulb. The right side PCB, viewed from the angle of the picture above, will have six rows of 16 bulbs stacked vertically, with all the yellow wires you see running to pins on the back of the PCB. It is anchored to the ground, 7.5VAC power and 'lamp test' line at the right edge, those wires acting as its hinge. The left side will hold the remaining lamps. 

Instead of the plastic sockets used by IBM, I will use a two pin header strip, with the bulb leads wrapped and soldered to the pins. A header socket on my PCB will be in each place where a lamp should sit. I can quickly pull off one and put on a replacement just by swinging the PCB backwards. The bulb itself will stand off the PCB because of the header strip and then its own length, so that it will be deep inside the honeycomb when the PCB is pressed against the back of the honeycomb structure. 

Instead of the fairly large IBM SCR modules, I will use modern surface mount SCRs and diodes placed on the rear of my PCBs. I have ordered the parts I think will work, in order to build a prototype and do testing. My method will replace the plastic sockets and narrow PCB boards with their SCR modules, but preserve everything else inside the pedestal. It could be returned to original condition if a new owner wished to do so. 


A fellow collector bought a 4331 system, along with a full complement of peripherals, but had to move it roughly 150 miles to its new home near Grass Valley, California. I agreed to help him move it this past weekend, along with a few other helpers. About 9000 pounds of boxes, cables and parts were involved in the move.
Image may contain: indoor
Loaded truck
The system included the following peripherals:

  • 2540 card reader/punch
  • 1403 N1 line printer
  • four spindles of 3340 disk storage
  • two 3420 tape drives
  • 2821 and 3803 control units
  • four 3278/3279 terminals

Image may contain: indoor
4331, 3340 spindles, 3420 tape drives
Image may contain: indoor
3420, 2540, and 1403

Monday, April 24, 2017

Not fully satisfied with the usability of my curve tracer, especially its 'quick test' function


I discovered that one of the final tubes, a 6146A, had a cracked envelope and the anode was disconnected. The first final tube measured decently, but the second was bad. I then grabbed a tube that appeared to be a 6au8, which is how I set it up, but it didn't measure any plate current at all. I then decided it was a 6au6, swapped the pin settings but still zero. 

Old tubes tend to have faint or virtually nonexistent markings, which would make this risk unacceptable. I will need to try each tube in my TV-3 tester, go through all the shorts testing, and look for leakage before I attempt a tube in the tracer. 

Yikes, when I stuck in yet another tube, no plate current. Doing more testing, I did find that the reservoirs produce good voltage, the tests run and curves plot, although I found several tubes where the current through the tube was much too low at the 'correct' grid bias, but a higher (less negative) bias gave me closer readings. 

Measurements were far enough off to douibt that I happen to have a pair of tubes, one a dual-triode, that are that worn. I knew I had to do some recalibration when I swapped to the power brick from my lab power supply, but these odd results force the issue.

After recalibration, the results were about the same. Everything was running lower at the same settings in these tubes. I fortunately have a set of unused NOS tubes, which I know have never been powered up because the chain of custody is clear. They were shrink wrapped in an old kit (actually, portion of a kit) I bought years ago and I have just removed the parts within the last week. 

The new tubes are producing similarly confusing results - the 'quick test' that should recreate the characteristics defined in the tube data sheet are not working out. I did notice that many of the tube datasheets include a cathode bias resistor in the circuit, which changes the effective grid bias compared to my tracer which hooks the cathode up to 'ground'. 

For example, a characteristic given for -3.5V bias isn't reached until the setting is nearly 0 on the curve tracer. I need to investigate this further. The curves being drawn are more reasonable, although for the new tubes I can find no datasheets online that include curves. 

The cathode resistors are for biasing the circuit and produce the bias voltage by the drop across the resistor from the current flow. Thus, when spec sheet lists the characteristics at some plate and screen voltage with a given cathode resistor value, I should be able to figure out the effective bias. 

That is, if they give the expected plate and screen current, those sum to the cathode current. Using ohms law, the voltage drop is the sum current times the resistance. These tend to give me values close to what I am observing when I experimentally set various grid values to try to achieve the reported currents. 

I found some recommendations in the curve tracer manual having to do with manually setting some ranges and averaging values in order to get a more accurate quick test result. I will experiment with this to see if I can get quick test results that are close enough to spec to give me confidence I can tell a good tube from a mediocre or bad one. 
I got closer, but invariably the specs are at a low negative grid bias and the current and other results are low unless I bump it up a bit. For example, a new 6CL8A was low on both plate and screen current at the spec sheet bias of -1V, but when I set to -0.7 I got almost exactly the right current. The transconductance came out close, but the plate resistance was off by quite a bit and the amplification factor was almost nonsensically high (869x). 

One hypothesis is nonlinearity and inaccuracy at low negative voltages, perhaps combined with too much resistance in the wiring, switches and tube socket, if the grid voltage is not delivered at the value I intended. If it is errors calculating at very low values of grid bias, I am kind of stuck since most characteristic reports I have found are at low negative grid bias voltages. 

I also don't know how precise the tracer can vary the voltages for the quick test - if the grid bias is -0.8V then the variance is 0.08V which may not be achievable by the circuitry. If the delta V is off, all the derivatives will be off. 

Vacuum tube curve tracer completed and working perfectly


I installed the barrier strip, insulated joints, tied down the fuse holders and choke inside, trimmed up connections, and put the entire unit together in its final configuration. It sits in the wooden case of a Century Tube Tester that I repurposed to hold my project, leaving some items like the meter and unused sockets because the cosmetics would be worse with all the gaping holes.

Completed curve tracer in its wooden case
The side panel has the connector for an RS232 serial link to the PC, a switch to choose either anode/screen reservoir voltages or the barrier terminal block to connect to special positions 10 and 11 on the rotary switches.

Side connections - serial port, special voltage switch and external heater block
The power brick and the USB to RS232 adapter cords sit in the slot on the left of the faceplate. The nine rotary knobs choose the appropriate connection for each of the 9 possible pins on a tube socket. Only five of the sockets are connected, the rest are dummies.  The black and red top hat connection cables allow grid and anode sources, respectively, to be connected to any tube with a top hat connector. 
Completed and assembled tracer
The Quality light is actually the power on LED showing the circuit board is powered up. The Short light is actually the "high voltage present" LED which indicates that the screen and anode reservoirs have hundreds of volts present. The small 'power' light is not active, nor is the meter on the top.

I fired up the tracer, hooked it to the PC, fired up the GUI control software, and inserted a 12AU7 tube in one of the active 9 pin sockets. I rotated the appropriate switches to connect the target pins to the voltage they represent. 

For example, the second triode in the 12AU7 (it is a dual-triode tube) has the plate connected to pin 1, the grid to pin 2 and the cathode to pin 3. The filament is 12.6V across pins 4 and 5. Thus, switch 1 was rotated to the position for anode voltage (position 8), switch 2 to the position for grid voltage (position 6), switch 4 rotated to filament A (position 2), etc. 

I ran the 'quick test' on the tube, which is set to the voltages from the data sheet where characteristics such as plate resistance, transconductance and amplification factor are reported. In this case, the manufacturer's data sheet showed that with 250 volts on the anode and -8.5 volts on the grid, it should draw 10.5ma on the plate, have a plate resistance of 7.7K ohms, a transconductance of 2200 uMho and an amplification factor of 17. 

I entered the two settings and the nominal values into the quick test form. It showed the plate current a bit high, the plate resistance exactly on spec, and the transconductance and amplification factor about 9% low compared to spec. Reasonable results for a used tube.

I then ran a curve trace to match the conditions for one of the curves illustrated in the data sheet. The curves for 100, 150, 200 and 250 volts on the anode where shown while varying the grid from -18 to 0 volts, displaying the plate current against grid voltage for the four curves. 
The expected performance of a new 12AU7 tube
My curves are similar but not identical, consistent with the degradation of the used tube but similar enough to be a reasonable test of this curve tracer. I could have moved the plate current scale to the right side and adjusted the start/stop values of the axes to line up exactly with the factory drawn curve, if that was important. I can also hide the measurement points and just leave the interpolated curves. 
Measured curve of one of the triodes in my used 12AU7
This project is complete! Next up I started through all the tubes from my Heathkit HW-100 transceiver, to check them against spec. Might as well play with different curve plots and options too.

Saturday, April 22, 2017

Wrapped up tube checker construction - 99% done


This morning while thinking about testing the tubes in our 026 keypunches at the Computer History Museum, I remembered one limitation of the circuit board I built. It can supply filament voltage only up to the supply voltage of the power brick - just over 19V - which is insufficient to test the 25L6 tubes or any others that have high heater voltage requirements. 

The solution for measuring is to hook up external DC for the filament. At that moment, I was faced with new design choices.

I could add in two more positions on each rotary switch to connect external heater power to the tube socket pins, in addition to the two positions I was about to wire to connect the screen and anode voltage reservoirs for continuous measurements. 

Alternatively, I could use two positions on the switches as a generalized set of special sources, with switches to route the reservoir volts and connectors to route external filament power to the same positions.

I liked the new method and set about adding that. I means that I have to find a suitable toggle switch and mount it, to connect or disconnect the reservoir voltages to these special loops. I also need to find and mount some kind of connector for external heater power. 

While I sought these parts and mulled over locations on the panel, I did some remaining tasks - hooked in the top cap connectors to grid and anode voltage loops plus moved the 'power on' and 'high voltage present' LEDs off the board and onto the faceplate.  

I will have a number of connections and a switch to mount, which I decided to place on the side of the cabinet instead of the faceplate due to restricted space up on top. The items to mount on the side are:

  • RS232 DB9 connector for PC communication
  • Switch to connect reservoir capacitors to special rotary switch positions
  • Terminal block to connect external heaters to special rotary switch positions
The switch to install should be a DPDT, wired so that the reservoir power wires are on one side and the terminal strip are on the other, thus having no risk that high voltage will be present on the terminal strip.

The circuit board is now firmly mounted inside the case. Once I have the connectors added to the side, and the power brick mounted inside somehow, there are some ferrite beads and fuses to add to the filament lines before I hook it all together and close it up, plus a fuse and large choke to install on the line from the power brick to the board. 

When I first mounted the DB9 connector, it stopped communication with the PC. Likely this was caused by a short from some of the handshaking bridge wires that are often soldered onto the back pins of DB9 connectors. After inspection and rearrangement, the connector is back in the case and fully functional.

I now have the ferrite beads on the filament lines, the fuses for filament and main power, the main 300 uH choke and the wires coming from the screen and anode reservoir capacitors. I needed to find and mount the switch, connected to the reservoir lines and the new loops I soldered for switch positions 10 and 11 to deliver either reservoir or external heater power to tube socket pins. 

The reservoir lines can carry 300 or so volts each, which is above the voltage rating of most switches, complicating the sourcing. I needed the switch to be on-off-on, stay in any of those three positions, and have twin poles and double contacts for each pole. 

Having found an acceptable switch, I have it wired in place, although it is only an on-on, no center off position. This is okay because the terminal block that will connect to external heater power can be connected to the rotary switch positions 11 and 10. 

The only risk with this on-on switch would be if I switched a tube pin to 10 or 11 and inside the tube that pin was connected to another pin with screen or anode potential. Even there, the high voltage will only be present for a millisecond at a time during testing.

The power brick is installed, although I have to recalibrate slightly to accommodate the slightly different voltage supplied to the board. Mounting and insulating of a few components and connections, e.g. choke and fuses, will wrap up the work. 

Friday, April 21, 2017

Finished main wiring, tested by measuring a 6AU6


I finished wiring the voltage loops for all the regular connections from the circuit board. After very carefully checking every connection with a continuity tester, I discovered that when I swapped out the original selector switch for a new one yesterday, I miswired the filament connections. With that fixed, it was time to run a trace on sample tube, a 6AU6.

Leveraged tester that has become the curve tracer
The controls are simple - there are nine rotary selectors, one for each of the possible pins on a tube socket. They are switched from positions 1 to 11, but only some of the positions are active. Switching the dial for a given pin to the following numbers hooks it up to the associated voltage from the circuit board inside:

  1. n/c
  2. filament side A
  3. filament side B
  4. n/c
  5. cathode
  6. control grid
  7. screen grid
  8. anode
  9. n/c
  10. n/c
  11. n/c
Only five sockets are wired up - one each loctal, octal, and 7 pin mini, plus two 9 pin mini types. The remainder of the sockets on the plate, as well as the meter, is superfluous. The following picture shows which switch controls each pin, highlights the working sockets, and obscures the unused parts. You can see the connections to the circuit board hanging out of the bottom, as I haven't finished the mount yet.

Marked controls and active sockets only
I fired up the 6AU6 and measured curves - I really like the circuit and GUI of the uTracer 3+. I have some more wiring to accomplish, however. First, there are two top cap connectors, for tubes that have the anode or the grid connection on the top of the tube. I have to hook these to grid and anode voltage lines and remember they are also hot during any measurement. Second, I have to create loops for positions 10 and 11 of the rotary switches to carry the screen and anode voltage reservoirs out to tube pins.

The normal mode of operation is for the circuit board to build up the target voltages in the screen and anode reservoir capacitors, but only connect those to the screen and anode pins for milliseconds at a time while making measurements. Certain unusual measurement situations may require a steady voltage, not a short burst, which is the purpose of positions 10 and 11. 

The boost converters can't supply more than 3ma steadily, so this connection to continuous screen and/or anode reservoirs will only work for low current applications. The archetypical case for using the reservoir voltage is to test magic eye tubes. This will not be a frequent mode for me, in fact I may never use it, but the wiring should be in place. 

Thursday, April 20, 2017

Construction continues on vacuum tube curve tracer


I grabbed some lockwashers and other hardware and attempted to install the three remaining rotary switches. Alas, the chassis opening for a 9 pin mini tube socket is slightly wider than the lockwasher. While I can use flat washers to cover the gap, they don't have any grip to keep the switch from rotating when the knob is twisted. Back to the drawing board (hardware store). 

Armed with new wider star lockwashers and a combination wrench, I tightened on the three new switches and began wiring them up. By midafternoon I had seven switches wired. The next two are easier, because both skip the 7 pin mini socket and one of them also skips the two 9 pin mini sockets. 

In the meantime, I started the lines for each voltage, bridging across the various rotary switches on the same position of each, ultimately leading down to the curve tracer circuit board itself. To do this correctly, I had to decide where the board would be mounted. 

The choice is on small standoffs on the bottom inside the case. This complicates things a bit because wire runs have to be somewhat longer to allow the top to be opened for servicing. I want the wire runs to the rotary switches to be as short as I can, in a loop themselves, to minimize inductance. 

I will also run wires out from the PCB to remotely mount the two LEDs under the faceplate, so show the 'power on' and 'HV present' states to the operator. For this I had to desolder the existing LEDs, put on the wire and place my own LEDs on the faceplate. I don't need to worry about wire length for these thus it won't cause problems opening the unit for service.

This will be powered by a 19+ V DC power brick, also installed inside the case. I had one from an old laptop I used to own, which worked out great for this purpose. It will be fixed inside and the AC cable routed out in the case slot that contained the original AC cord. 

By dinnertime, I had completed wiring all nine rotary switches to the associated pins of the five tube sockets on my tester. I had also wired up the two filament loops - wiring looped through switch positions 2 and 3 respectively of every rotary switch. This worked well and lit heaters on real tubes.

I will wire the cathode, grid, screen and anode voltage loops to their relevant positions 5, 6, 7 and 8 on the rotary switches. By the evening, I was done with the screen and anode loops. A terminal snapped off the old rotary switch that I was leveraging from the original Century circuitry, which required me to remove it, drill out the hole to fit my new type of switch, and wire the new one into place. 

After these are seen to work properly, I can bring the two reservoir capacitor lines in a non-loop to positions 10 and 11 of the switches. I will finish up the cathode and grid lines tomorrow, test out everything carefully with a continuity checker, before hooking it all up to the circuit board and testing with a real tube. 

1401 restoration work and continued curve tracer construction

I spent part of the day with the plumber as he finished up the tankless water heater installation and some other work, then spent the rest of the day with the 1401 restoration team. This evening, I attended a lecture by Paul Wesley at Stanford on the history of Silicon Valley. 


I slowly did the tedious wiring of the sockets - loops between each pin number, around all the sockets being used, through ferrite beads and connected to the commutator of the six rotary switches I had on hand. I also prepared the sites for the next three rotary switches to be installed, now that the stock arrived, for controlling pins 7, 8 and 9. 

Before I can mount the next three rotary switches into the holes where I removed tube sockets, I need to get to a hardware store for some regular and lock washers, since a tube socket is larger diameter than a rotary switch shaft. 

After they are mounted, I can wire up those three loops. Actually, one loop goes to all five sockets, a second loop goes to just four sockets, and the last loop goes to only two sockets, the 9 pin minis. 

Another issue is the mounting for the circuit board, power supply brick and the serial port DB9 connector. Besides working that out and doing the install, I have to wire the board produced voltages to the corresponding positions on all nine rotary switches. 

The voltages on the rotary switches are: 
  1. anode
  2. screen
  3. cathode
  4. grid
  5. filament A
  6. filament B
  7. anode reservoir
  8. screen reservoir. 
The regular anode and screen connections are only connected for very brief intervals during measurements, small fractions of a second, otherwise sit at zero. The reservoirs provide the same voltages continuously. 


SMS cards in the 1401 power supply circuitry drive a set of relays which sequence power on and off at startup or shutdown of the system. All the cards we have are scorched black underneath a pair of resistors that are extremely hot to the touch at all times. We investigated to see if this is a result of failed components or 'normal'.

The card schematics for this card matches exactly what is on the card. It is clear that the pair of 2W resistors are asked to handle more than 3.5 W of power, yet are mounted flat to the card with no space for airflow around them. Thus, the scorching and overheated resistors are by design.

More interesting to me is that the resistors in question are simply providing a voltage divider to bias a transistor, switching it on only if the two power supplies that fed the divider were working. They designed this to draw about 65 ma across the 42 V relative voltage, all to create a minute bias current in the transistor.

We then looked at the ALD schematic page, instead of the SMS card schematic, and found that the design had different and much more appropriate resistor values installed. 3,470 instead of 650 ohms, which dropped the power consumption down to a half watt. The schematic pages had the exact same drawing and part number, but the cards as they exist are the scorchers not the design in the ALDs.

We decided to take one of our spare cards and modify it to match the ALD schematic. I found almost every part needed on hand in the workroom, except that I had to parallel up two resistors to create a 43 ohm part. By the end of the day, I was partway through rebuilding the card. The tools on hand for solder removal were inadequate, so I will bring in my own gear next time.

Tuesday, April 18, 2017

Building curve tracer into case


With the circuit board itself working flawlessly, it is time to build out an enclosure with tube sockets and rotary selector switches, mount the board inside, and wire everything up. I hadn't selected an enclosure yet. I do want to move forward on this.

I initially thought to gut a Century tube checker I own, but the panel has dozens each of octal, 7 pin mini and 9 pin mini sockets, whereas I only need a few slots. Further, it has a large meter and other parts installed which are unnecessary, and lacks the rotary switch openings. Still, I decided to hack it up, as the extra socket openings could eventually hold compactron, novar, nuvistor, acorn and other socket types.

I have five rotary switches with 11 settings, not enough to route each connection type (anode, screen, grid, cathode, and one side of the filament) to any of 12 possible pins (most sockets have 7, 8 or 9 pins but there is a compactron type that has all 12). Thus, I will have to connect in the opposite way, using 12 rotary switches to select among six voltages - anode, screen, grid, cathode, filament A and filament B.

The existing sockets are pop riveted in the panel, thus I need to drill out any that I remove. I can then use screw and nut, or new pop rivets if I can find my gun and supplies. First step was to gut the transformer, unused controls and wiring, Next was to trim back the rats nest of intertube wiring.

I have ordered another batch of rotary switches, enough for 10 pin sockets which will cover everything except the compactron (12 pin type). These are almost exclusively used in tube based color televisions, which is not an area where I expect to receive tubes for testing. Thus, I will ignore the compactron type entirely.

There are a wide range of tube socket types, of which I will support as many as I can easily and inexpensively obtain sockets for. The three workhorse sockets are the octal, 7 pin mini and 9 pin mini. I have plenty of these already on the Century unit.

Loctal sockets are similar to octal but have a center pin that snaps into place in the housing. These were intended for use in automobiles and other high vibration environments. I happen to have two loctal sockets on the unit, otherwise I wouldn't have bothered. Again, mobile radio tubes are not what I expect to be testing. Hifi, computers and test equipment will be the primary source of tubes for testing.

There is a 10 pin socket that is like the 9 pin mini but has an extra connection in the center hole. I happen to have one of these sockets, so it will go in. There is a novar type, which is nine pins but thinner and similar to the compactron style. I think I have one of these as well.

Older radios used 4, 5, 6, 7 and 8 pin sockets, UX4, UX5 etc, that I might stick in if I had them cheap and ready to go, but these are mostly from 30s and older era radios and clearly not going to be needed often.

I have the first six rotary switches (one from the original tester and the five I bought for the project) installed in the unit. Next up is to choose locations for the next three switches, which will arrive in two days. That will give me switches for the nine pins of the sockets already in place (7 pin mini, 9 pin mini, octal and loctal).

I began wiring up the first six switches and the five sockets I am using. It is tedious work, building a loop for each pin across all five sockets, including a ferrite bead to soak up any RF oscillation that might try to build, and hooking each loop to a different switch. I can only build the loops for pins 1 to 6 until the new switches arrive and are mounted.

Monday, April 17, 2017

Tube curve tracer board working and calibrating


I resolved the screen voltage problem - turned out to be two hard to spot solder joint issues. The solder welled up on the component lead in a beautiful shiny cone, but had not flowed onto the pad. Looked great until I went to extreme magnification with the stereo microscope, where I could see only 1 or 2 joints at a time. 

Repaired and the hangup of the main logic is gone, as I expected. It goes through a measurement interval, applying anode and screen voltage to the tube under test (but I had no tube connected) while maintaining the voltage reservoirs at their target level.

In addition to the screen circuit problems, now fixed, the grid bias circuit is not working. It should develop a bias from 0 to -50V during the measurement phase of the curve tracer. The microcontroller produces pulse width modulation on a pin which drives a low noise operational amplifier acting as an low pass filter (or integrator). This yields a smoothed voltage between 0 and 5V, which is fed to a second op amp, LM741, wired as a 10X inverter, to produce the intended 0 to -50V.

I zoomed in to this section of the board and looked quite carefully. There was one solder joint that looked as if it would benefit from reflowing the solder to improve pad bonding, but it is for the unconnected pin on the LM741 op amp package thus it doesn't matter. Time to debug the circuit, measuring and observing, until I figure out what is wrong.

The observation steps to make are:

  1. scope on the microcontroller signal that drives this, which is a 19.5KHz signal whose on time is varied (pulse width modulation) to swing the first op amp output between 0 and 5 volts.
  2. if the pulses are good, look at the first op amp to verify it is filtering/integrating and generating the 0 to 5 volt range expected
  3. if the first op amp is working properly, observe the behavior of the second op amp which should be generating 0 to -50 based on the 0 to 5 of the first device.
  4. if the second op amp is working properly, observe the current mirror transistors that produce the actual grid voltage when driven by the second op amp.
  5. If the mirror transistors work, debug the continuity problem from here to the grid connection.
The microcontroller pulses were behaving exactly as they should, varying the pulse width as the target value changed from 0 to 5. We passed test one above. The second test involved watching the output of the NE5535 low noise op amp to see if it did produce the 0 to 5 level. 

The second test failed! The op amp circuit is not integrating nor acting as a low pass filter to produce the target value. I saw a constant output on pin 6, the output pin. There are only a few components in this portion of the circuit, two capacitors and a couple of resistors. If they are good and the connections and solder joints are correct, it points the finger at the chip.

The sequence of tests to perform for this are:

  1. verify that V+ and V- are making it to the chip
  2. verify the proper resistance for the two resistors and two capacitors on the input side
  3. verify that the input pulses are making it to the non-inverting input
  4. monitor the waveforms on the inverting inputs
  5. check for shorts of the output pin
Test 1 failed - no V+ to the IC, nor am I getting +15V to the other three ICs it feeds. Digging further, I found that my 7815 voltage regulator was bad. I had a replacement in stock, put it into the board, and now everything is working properly! Filament, anode, screen, grid and all the measurement logic doing fine.

Now I have a bit of calibration and then have to build it up with tube sockets, switches and all to make a full tester. Calibration is done easily, with a GUI screen to adjust values to match measured results with the DMM. I worked through this tonight as I collect tube sockets and order any remaining ones I will need to install in my project box/chassis. Every is calibrated and ready to install in a box and begin using.