Friday, May 25, 2018

Found minor problems with Documation interface; started restoration of Teletype 19


One of the problems I need to correct is the mechanical interference between the header connector with the card reader signal wires and the mini USB cable. I didn't allow for enough room, thus the cable from the USB connector wants to run right through the side of the header connector.

USB cable interferes with header for card reader connections
My plan to correct this is to desolder the back row of the header that connects my USB board to the interface PCB, then tilt the board upward by pushing down the newly loosened header row and soldering. If it tilts enough, the USB cable can clear the top of my signal connector.

A minor flaw I discovered is in the wiring of the LED that indicates the End of File (EOF) circuit. I wired it between the output of my board and ground, but in fact it should be reversed polarity and wired between the output and +5V. That one was easily corrected.

I know my board is mainly working because when I power it up outside of the card reader, I can talk to it with the PC software over USB and see the EOF status changing as I toggle the pushbutton. It doesn't respond when installed, but I believe that may be because of the USB cable interference issue I covered up above. When the cable clearance is solved I will try again.


Today we helped Marc strip down his military version of the model 19 teletype in order to have all the painted surfaces sand blasted and powder coated to look like new. Much of it could be removed by unscrewing or unbolting, but there were more challenging areas. Some parts were riveted in place or have welded hinges.

The transmitter unit required quite a bit of unsoldering to remove all the parts before the baseplate and covers are repainted. We carefully marked all the wires before desoldering, in conjunction with pictures of the original connections.

The teletype came with a huge power supply (REC 30) which generates the power for the teletype signal line which is a 60ma current loop. The supply has enormous transformers and fuses appropriate for a supply of several hundred watts, yet a teletype current loop should need less than 10W. Later we realized that one supply would be used to power a room full of teletypes, such as in a newsroom.

The desk which is a base for the teletype as a very complex wiring on the back, with 13 power outlets of almost as many types of receptacles connected by a sea of wires. The teletype itself has two power plugs attached, the REC 30 power supply has input, output and motor power plugs, then there are a few switches under the tabletop.

Some of the power outlets and fuses on the back of the teletype desk

It will take us our next session to trace out and understand all the wiring to these outlets, since we need to remove all outlets and wires in order to send the desk out with the other external parts for repainting. I did find a wiring diagram on the web which appears to match the desk. 

Thursday, May 24, 2018

Nearly finished with conversion of Documation 1000 card reader, now debugging


A sharp eyed reader spotted an error in one diagram of my last post, which used colored green lines to show the wiring of the modification. I mixed up the two chips, 7404 and 7417, thus the wires ran the wrong way. I updated the diagram, quickly and a bit messily; the correct one has two green and one yellow line representing the wires.

My replacement power receptacle arrived and is installed into the reader. I am still rewiring the machine to connect to my interface board, but could turn on power anyway. Everything worked fine this time, with the machine reading the cards I supplied. I wasn't able to see if it properly read the data but the logic was happy, not detecting any checks during the operation.

I cut up a breadboard PCB and installed a dual row female header, to serve as a good soldering anchor for the 17 signal wires and ground that come from the Documation reader. This will plug into the 2x10 header on my interface board. The next morning, I soldered in the wires to the PCB and work on the rest of the installation.

After all wiring was attached, I checked the connectivity to the proper sockets that originated the signal, to be sure I wired the proper signals to each pin of my connector for the interface board. That took a bit of time to work through but everything was correctly routed.

The interface logic will also need connections to +5V, a SPST pushbutton, and an LED. The button and LED are used to indicate end of file when reading in card decks. I drilled and mounted the pushbutton on the front panel of the Documation, with a plan to drill and install an LED holder above it once my holder hardware arrives.

The wiring was installed from power, ground, the pushbutton and placed near where the LED will go in a few days. Those wires are screwed into the interface board on a terminal strip. The last step in the installation is to arrange a secure mounting for the interface board, above the control PCB inside the card cage.

I chose to use some cardboard spaces above and below my board, thus insulating the two adjacent PCBs from my wires or circuit board. The board is held nicely in place between the cardboard spacers above and below.

Board installed in card cage

The code needed to be loaded into the SX28AC controller chip, using my programmer device. I downloaded the Parallax SK-Key editor and tool, which let me assemble the code from Brian Knittel and then load it into the chip on my interface board. I completed both boards, which are now ready to install and use.

I bought a short adapter cord that will hook to the mini-USB on my interface board and presents a full size USB socket for the connection to an external PC. This completes the conversion of the Documation reader. It connects via USB to the CardRead program on a PC, which will control the reader and capture card images onto PC files. The EOF pushbutton and confirmation LED allow the operator of the card reader to confirm the state of the interface.

EOF button mounted, LED awaiting lamp holder assembly
With everything installed, other than the LED holder, it was time to fire up the reader and test out the functionality. The Surface Pro does see the USB board and assigns it a COM port. Unfortunately, the software on the PC complains that it can't communicate with my interface board, so something is wrong. Further, the EOF button doesn't toggle the LED on and off. I will debug it with the second board, outside of a reader. 

Tuesday, May 22, 2018

Working on Documation readers and interface installation


I scoured the board where I was going to add the daughter card and modification, hoping to find a spare gate I could use on an existing chip. I realized I didn't need a NOR gate, just an inverter, because the two inverters I am modifying are open collector. Therefore, if I pull the link between them down to ground, it will block recognition of holes in row 12.

Taking the signal Col81 which goes high when we are at the time just past the last column of data, putting it through an inverter and wiring that to pin 13 would give me the same effect as my prior modification. There are hex inverter chips with unused inverters, but all of them are ordinary, not open collector. The open collector 7405 chips are fully used.

I widened my search to look for any other open collector chips on the board which have unused gates, as I might be able to make that function as an inverter. Aha! There is a open collector buffer chip at 3B, a 7417, which has unused gates. If I route Col81 through an unused ordinary 7404 inverter on 4B and then through the driver at 3B, I will have an open collector signal to tie to pin 13 of chip 8D which already has a pullup resistor.

My modification highlighted by yellow above
This will require a wire from Col81 to pin 1 of 4B, a wire from pin 2 of 4B to pin 1 of 3B and a wire from pin 2 of 3B to pin 2 or 13 of 8D. A clean rework without the need for a daughtercard. I can pick off Col81 (actual signal name 81CR) from the backplane pin 13, since the signal normally is not used on this Control card.
Wiring of the modification to allow right hand notched cards

The tripping breaker may be a leaky starter capacitor for one of the two motors, probably the vacuum/blower one since it only trips when that starts up. Hard to get to it but I will remove it and do some testing. Shouldn't be hard to find a replacement if that is the problem.


I want to mount my new board inside the card cage atop the Documation reader, since that shields the other logic from power supply and motor noise There is plenty of room to place it and easy access to the signals that currently run to the connector on the rear of the machine. I can add a USB connector on the backplate easily.

Cardcage - bottom slot for modified control board - space under 3 for my interface board
Backplate to be modified to put USB connector left of remote switch
The signals that run down to the connector on the back of the machine emanate from the control card in the bottom slot and the clock card in the top slot, wired to the sockets at the rear of the card cage on the left as looking in from the front.
connector on control card (right) has data and pick signals
Status signals on Clock card connector on right 
While the signals above are show with two wires (e.g. Mock and Mock RTN) they are not differential signals, simply twisted wires with one signal and a ground wound around it. All the grounds are tied together to DC RTN, thus I can ignore the RTN lines where they hook to my board as long as I have one ground connection.

I am starting with the 1000 CPM machine first, to figure this out before I put the working 600CPM machine out of service.  I have begun to remove the wires from the connector on the back panel and pull them up into the card cage area. It was a slower process as I had to cut away and remove the outer plastic sheath binding together the various data wires.

Once through I can trim them and solder them onto a connector to push onto my interface board. I will start on this Thursday, as daylight is fading, I am working outside and I will be at CHM tomorrow working on the 1401 systems.

Monday, May 21, 2018

Beginning to install USB interface into Documation card readers


Having built both boards, it was time to install them into the two card readers I own and test them out. The faster of the two reads at 1000 cards per minute, although I have not yet used it. I decided to work on this one first.

First step was to hook up power and verify basic functionality - at least the ability to develop vacuum, blower pressure and to recognize the proper states of the machine. That was the plan, but the power cord was incompatible in an odd way.

The other Documation has a NEMA ML-2R receptacle - this has two curved blades and a hollow center tube for ground. The plug ML-2P is the female side for the hot and neutral blades plus a male center ground pin. That is the standard configuration of the NEMA ML-2 connectors.

The 1000 CPM machine has a receptacle with male blades AND a male ground pin, which won't mate with the standard plug. I have ordered a standard ML-2R receptacle and will install it when it arrives.

In the meantime, I wired up the plug directly to the machine and turned on the power. The power light lit up, in stop mode, with no vacuum or blower. This is the normal condition it should be in. Once cards were placed in the hopper, I hit the Reset button which should spin up the vacuum and air blower in preparation of Pick commands from the interface.

The vacuum, blower and card movement mechanisms spun up, although I could hear some rubbing or grinding which suggests either lack of lubrication or bearing issues. This was mostly good news, although the circuit breaker tripped after about 30 seconds. I tried it a few times, always with the same result.

Time to pull it all apart and begin checking out the power supplies, filter capacitors and motors to determine what is causing the overcurrent. I am hoping it is bad filter capacitors, but we shall see.

As built, the Documation card readers have a design flaw that will suffer false read check errors if the punched cards being read have a diagonal notch on the right side of the card. While most cards have a left side notch, there is no reason that a right side one can't be used. Unfortunately, the notch allows enough light to leak through that the logic believes the card has cleared the photocells too early.

The checking logic of the Documation tests at certain times to be sure the card is moving through appropriately. When the card edge first reaches the photocells, it blocks one or more row cells and starts the timer for reading columns.

The first check is when we are at column 0, the one before the first real data column. The presence of any light on any row is an error, since the card should not have any holes at this position.

The second check is when the card reaches the column after the end, column 81. Again, there should be no holes punched so the logic tests that against the photocell signals. This is where we have our problem with right notched cards, since the row 12 photocell picks up a little bit of light and triggers the read error.

The final check is at the time of column 84, which should be past the end of the card. Indeed, the test is that all 12 rows should see light, otherwise the card timing is off.

I developed a fix for the readers, implemented in my other reader and in Marc's machine. I block the signal from the row 12 photocell when we are at column 81 time. The only time this fix will miss an error is if the card has only a 12 punch in column 80 and is off by one position. Hopefully, the column 84 check will correct for this, but it is an extremely rare error.

In practice, decks are read twice, verifying that the same data is captured for every card. This would catch a problem if the unlikely situation occurred where my fix blocked a read check that should have occurred, since the slippage won't happen the same way twice.

To make the fix requires me to introduce a NOR gate at one point in the circuit that tests for any lit row. This happens at the open collector inverter chip at 8D, where the output of one inverter (pin 2) is routed to be the input of the next inverter (pin 13). This path is a trace that runs directly underneath the chip, so to cut it I either have to remove the chip temporarily or cut and twist up the leg of the chip.

I pulled the chip and will clean up the board, then wire in a small daughter card with the NOR gate on it. The NOR gate is connected to the Column81 signal as well as the inverter output of 8D pin 2, with the output of the NOR gate connected to 8D pin 13. The card also gets connected to +5V and ground of course.

Chip removed, time to do some cleanup and cut the trace
Looking at the trace, however, shows me that I can't just cut it. The chip, a 7405, is an open collector hex inverter. That means that each of the inverters needs a pull-up resistor to work. I can see that the pull up resistor is connected to pin 13, then through the trace to pin 2. If I cut the trace between 2 and 13, then there is no pullup for the inverter whose output is 2.

I could go to plan B, where I twist pin 13 of the chip up so it doesn't touch the pad. I can then take the signal from the pad over to the NOR and bring that NOR gate output back to the twisted up pin of the chip.

However, there is an easier way, where I do cut the trace. The wire from pin 2 that runs to the daughter card will get its pullup from the small card, and the original pullup on the main board will serve as a pullup for my NOR gate. I chose a 7433 chip, which is an open collector NOR gate, which works perfectly for this purpose. Thus, I only have to run wires from the pin 2 and pin 13 pads over to my daugther card.

The daughter card gets its Column81 signal from the backplane connector, a simple matter of tapping the trace as it comes out of the socket. The +5 and ground rails are easy to access to complete the connection of the new boards.

I have the parts for the daughter card on order, which I will finish up as I install the new interface board. Before that happens, I will switch over and work on the 600 CPM model, which I know works because I recently used it to read 7000 cards. 

Thursday, May 17, 2018

Soldering together my Documation card reader interface, plus diabolical soldering challenge kit


My PCBs arrived today from the fab and I soldered on most of the components. I am waiting on a connector to arrive, at which point I will also install the three decoupling capacitors and begin installing this into the Documation 600 cpm reader.

My interface board, providing a USB link for the Documation card readers
My Documation 600cpm card reader

While I was working on the 1401 systems at CHM this Wednesday, we met some visitors who were here to participate in MakerFaire this weekend. They will be exhibiting their high speed cameras, able to take video at up to 40,000 frames per second. During the conversation, one of them handed me a soldering challenge kit they had.

This kit is the most diabolical one I have ever seen. The components on the board range from the relatively large 0603 size () down to a capacitor at 008004 which is only 10 mils long and 5 mils wide.

Challenge circuit board with my pinky for size comparison

It includes LEDs as small as 0201 size plus two ICs, the smaller of which is a ball grid array (BGA) device a mere .055" x .055" with nine balls of solder underneath that must be melted. I have routinely hand soldered parts down to 0402 and the larger of the two ICs, but will be quite challenged by the 01005 resistors, 0201 LEDs, the 008004 capacitor and the BGA chip.

I was going to bang it out today but my existing tweezers are just too large to effectively grasp the smallest parts. Too, my weller soldering iron tip is just too big to work well with these parts. I have ordered the smallest tip and some new tweezers; when the arrive I will take on the challenge. 

Wednesday, May 16, 2018

Core memory Arduino shield progress; 1401 spurious card reader checks at CHM


My first breakthrough came after I began to doubt the truth of the claim in the documentation that this was adjusted to 'work with every Arduino'. In fact, the more I looked at the design, the more sure I was that it was only for the Arduino Uno and similar models, not the Arduino Mega 2560 that I was using.

Flashing the Uno with the provided program and plugging in the shield, I got much improved behavior right away. The serial port communication was erratic, but when I removed both NL and CR from the monitor session configuration, the results were appropriate. With NL and CR appended to my input lines, I got spurious complaints about D and A commands that I was not typing.

Using the W and R commands to read and write the 32 bit core, I discovered that only some of the memory is responding. With 8 bits, always the same positions or addresses, I can reliably write and read contents. However, figuring out from this how it pertains to the schematic is much much harder due to the Arduino code being used.

Specifically, the Arduino code reports using address 0 to 37 to address the 32 bits of core. My working bits are at address 8, 10, 11, 12, 14, 15, 25 and 29, judging by the binary address bits reported, but these don't correspond the 37 decimal. The code asks for hexadecimal values for block reads and writes, but I finally recognized that the address was octal, not decimal. 37 in octal is 31 decimal.

Until I can trace the addresses back to specific wires or components, I can't perform any corrective action. I tried laying out the cores in sequential order, either advancing horizontally fastest or vertically fastest, but neither offered illumination. In one of the orders, however, it did give a clue, or a suspicion that this has to do with one or more of the drive lines that have to coincide to flip a core.

If I number the cores, advancing vertically fastest, so that the left column is, from top to bottom 0, 1, 2, 3, 4, 5, 6 and 7, the next column begins at the top with 8 and proceeds down to 15, I see that the cores which work in the column 8-15 are the mirror of the cores that work in the column 24-31, while no cores work in the other two columns.

Tomorrow I will go over all the solder joints and continuity, after I dig into the VHDL and schematic to figure out which physical columns are the ones that partially work. I can begin watching signals with my oscilloscope as I read or write to specific locations. This is going to take time unless I spot some obvious construction flaw that can explain it all.


Our German 1401 system has been displaying erratic behavior when reading cards, with a variety of spurious errors being reported, mostly read checks. That error claims that the number of holes read by the Read Check brushes didn't match the number of holes read by the subsequent Read brushes. However, we saw this error even with completely blank cards,.

In some cases we received validity checks, asserting that the blank we just read was not a valid character. In other cases, the execution of the read command terminated with the CPU logic thinking it had not yet seen all 12 rows from the card.

These problems come and go. We can be scoping away trying to track down the fault when the machine decides to perform flawlessly for a while. Since the errors occur in several types, each triggered by different sets of logic, we can be watching gate A for a certain type of false read check when the machine begins throwing only the other types.

Tuesday, May 15, 2018

Built core memory Arduino shield, which isn't working correctly yet


I bought a fun kit from  which implements 32 bits of core memory on a shield, a board that plugs onto the top of an Arduino. It arrived yesterday and I began assembly today. The totally frustrating part of the kit is wiring up the core array. This took me much of the day to get right.

First problem, but easily managed, is the very tiny core rings. These are hard to see and to pick up and manipulate. Threading 32 gauge magnet wire through these three times, for the X, Y and sense wires, is quite challenging but bright light, tweezers and superhuman eyesight is all it takes.

Core rings next to a standard transistor for size comparison
Second problem and more frustrating, was the instructions telling me that the enamel insulation on the magnet wire would burn right off with heat. 180 seconds of heat applied by a soldering tool did nothing. With the insulation on, the wires barely soldered onto the board and made poor contact.

I wasted an hour attempting the 'burn off' method before I cranked up the soldering temperature from my usual 630F up to 750F at which point it does a better job of burning off the enamel and soldering. Not perfect but better. Will have to drop the temp down when I go back to soldering sensitive components onto the PCB.

Key to a good looking core plane is tension on the wires to create an even grid of X and Y lines at right angles. Eight cores are threaded onto the vertical (X) wires, after one end is soldered to the PCB. Then, each of the horizontal (Y) wires is threaded through a core such that cores alternate vertically either 45 degrees to the left of vertical or 45 degrees to the right. This pattern is essential to make the coincident current method work properly with the sense wire.

Vertical wires installed with 8 cores on each
My four vertical wires were in place with eight cores on each. The next step is to thread the horizontal wires through one core on each vertical, alternating the angle of the cores, and solder down both ends of the horizontal wire. This had to be done eight times, once for each of the horizontal wires. Tedious work, at the limits of eyesight, but eventually all 32 cores were suspended on the grid in their proper orientations.

The second of eight horizontal wires was threaded, but the core ring broke in two while I was manipulating the wire to the solder pad. That forced me to unsolder one of the verticals, add a ring and thread it appropriately. This can get quite tedious if things go wrong in the midst of the wiring.

Broken core ring
By four PM I had half the cores on the XY grid and needed a break to rest my back and eyes.

Half the cores in place - 16 of the 32 bits
After dinner, I completed the entire XY grid through the 32 core rings and began to feed the sense wire through the cores in a single run. The final step in assembling the core plane is to weave the single sense line through all 32 cores. As this is the third wire threaded through each core ring, it is a bit more mechanically complex.

This was quite, quite difficult. I completed the first 9 cores before I had to take a breather to recover eyesight and patience. The wire has to bend and swoop all through the plane with many reversals.. I made use of forceps to hold the end of the wire that I was threading, then to pull it through smoothly from the other side. Much easier said than done. However, eventually I completed it all.

Once the core plane was assembled, I turned to the rest of the shield PCB, installing four rectifiers, sixteen drive transistors, a dual op amp, a CPLD logic device, connectors and the remaining capacitors. After checking for solder bridges and appropriate connections, I prepared the Arduino with the demonstration software and pulled out a power supply to deliver 3.3V at over 1A to power the shield.

The results were poor - the LED on the shield never lit up, the software wasn't getting any data in or out of the core, nor are the other results from the demo software making any sense. Time to debug this more carefully - ensuring that the X and Y drive lines and sense wire have continuity, then checking connections on the board. In particular the four bridge rectifiers are surface mount and may not have good connections which would block any read or write.


My PCBs for the Documation card reader interface were shipped today by OSHPARK. Early next week I will solder up one of them and install it into one of my card readers. Assuming all tests out well, the other reader will get a second and Marc will wire up the third board for his reader.

I am cleaning out items I don't need and came across a Tektronix 466 storage oscilloscope. It is going to a restoration team member who doesn't have a scope yet. Always happy to see these go to a good home.