Saturday, September 6, 2025

Side project - restoration work on Millivac MV-864A meter, part 2

METER DOES NOT MECHANICALLY RESTORE ALL THE WAY TO ZERO POINT

The meter on the face has a screw that changes a coil spring tension to make the pointer align exactly with the left side (zero) position of the scale. Moving the screw will move the pointer further away or closer but it never gets all the way to the zero line. Not sure what I will be able to do about this.

DECIDED TO CHECK POWER SUPPLY VOLTAGES AND OTHER CHECKS OF THE CIRCUITS

I opened the meter, with the expensive manual I purchased, looking for the test points listed for the +8.5, -6 and other voltages. The first thing I noticed is that the board shown in the manual does not look like my board. The one in my meter is larger and includes the resistor networks for the range switch. 

More importantly, it has no test points labeled TP1, TP2 and TP3. It does have points such as TP63, TP61 and TP62, but they are tied together or otherwise don't make sense as the place to check the supply voltages. 

The schematic shows five transistors, five diodes and a bunch of passive components for the power supply, but mine had only two transistor looking objects. The schematic has silicon transistor numbers on it, but my board has an obsolete germanium MHT3030 power transistor made by GPD Optoelectronics and a GE RA1 three lead component. 

I was able to track down an old GE manual and found the RA1 as a reference controller for power supplies, consisting of a germanium transistor and a zener diode encapsulated in a single TO-5 style can. The GE manual showed me an example circuit which matches decently with the connections I can see on my meter's board. 

I am reverse engineering the power supply part of the PCB in my meter - components that start with a 6 such as R601 or C602. The power transformer and the primary side circuit match well, but it diverges on the output side. The transformer has a long winding with three taps between the two ends. The center tap and the two outer connections are fed through a pair of diodes (half wave rectifier) in both the schematic and in my board. If you number the secondary wires as 7, 5, 8, 6, 9 then the center tap is 8 and the ends are 7 and 9. 

On the schematic, 5 and 6 are unconnected. The pilot light is powered from a resistor off the output of the two diodes. Yet, on my meter, windings 5 and 6 are connected to the pilot light, driving it with AC. 

I am carefully reverse engineering the power supply as it exists on my meter, drawing it out and noting parts values. I will then check whether it is working as intended and make adjustments if necessary. That will happen in a later workshop session. 

I paid a relatively high price for the manual from the manufacturer, who used my serial number but didn't have a version of the manual old enough. The sent me the oldest version in their files, which as I mentioned was in the silicon semiconductor era while mine is an old design using germanium devices. I suspect I will find many differences in the rest of the manual and schematic as I work on this project. 

More Bench Testing of the 1130 MRAM memory board

FLAKY BEHAVIOR OF DIRECT PORT MAPPING OBSERVED

I ran the program to load the memory and happened to put a scope probe on the Storage Write signal which I should be toggling on for each of the memory locations, but saw the signal stuck steadily at high. In some other cases I saw results that didn't match what I expected from the program to read memory.

I switched back to digitalWrite from the direct port access just in case there was something going on that I didn't understand with port access on the Due, which has an ARM chip rather than the usual Arduino processor type. 

 However, in retrospect this is due to the weirdness that occurs when the laptop is plugged into the wall using its power brick. Running just on batteries should eliminate these gremlins. 

NEW PROGRAMS LOADED INTO ARDUINO AND TESTING RESUMED

I ran the loader program that wrote the values 1, 2, 4, 8, 16 . . . 8192 into locations 0, 1, 2, 4, 8, 16 . . . 4096. These locations and values were chosen to have a unique wire I could monitor for each choice. This simplified triggering and monitoring on the oscilloscope.

I saw the B register inputs set low for the desired address and the board was generating the inverted write control signal that causes the MRAM chip to write the data into the selected memory location. The control signal is applied for a bit under 100 nanoseconds and the B register data is gated through to the memory chip at the same time. 

However, when I then ran the reading program (below), all outputs were 0. I could clearly see the address and the B register inputs were correct and all the control logic signals on my board worked properly for the writes. The address and all control logic signals were correct on my board for the read, yet the data was not the 1 value I expected. 

My XOR logic is producing a 1 for each of the two check bits and those pulses are emitted correctly during the reads. Earlier I had seen outputs that were 1 but my guess is that the strange power injection when my laptop is on AC power, through the Arduino, has damaged one or more chips on my board. 

Possible bad chips are the MRAM memory itself, the buffer chips feeding it the B register data, or some of the open collector NAND gates that pass along the pulse for any 1 bit read. Once I pin down the failure further I can replace parts and resume testing. 

NEXT SESSION PLAN

I will tack wires on the data bit 15 pin of the MRAM chip and on the input to the buffer that feeds the B register values to the chip. Using the scope, I will be able to verify that the B register value reaches the buffer and is passed through at the proper time to the MRAM pin. I can then look at the MRAM chip pin when doing a read to see if the 1 bit is making it back out. I will also be able to see if there is a 1 coming out of MRAM on a read but no pulse out of the NAND gates. 


Friday, September 5, 2025

Bench testing strange power supply behavior testing MRAM board - followup

FROM TIME TO TIME, BENCH SUPPLY SHOWED ZERO POWER DRAW

I was puzzled why this occurred yet 3.3V appeared on the output line going to my PCB. I originally ascribed this to buffer capacitors not needing energy pumped into them for a period, but this didn't really satisfy me. 

DISCOVERED THIS IS A CONSEQUENCE OF LAPTOP POWER BRICK CONNECTION

The test setup for the 1130 MRAM core memory replacement board used an Arduino Due to drive signals onto my PCB, a bench supply to deliver the +12V that will eventually come from the 1130 computer, a prototyping tool that provides the 3.3V pullup for the open collector sense output lines of my board, and an oscilloscope to capture the behavior of the board under test. 

The Arduino gets its power from the USB cable connected to my laptop. The ground of the Arduino, bench power supply, prototyping tool, oscilloscope and my board are all tied together. The odd behavior occurs when I have my laptop plugged into its charging brick - somehow this is causing difficulties but if I just run the laptop on batteries all is well. The brick must be driving energy into the test system somehow. The laptop is a Lenovo L340. 

Thursday, September 4, 2025

Continued testing of the 1130 MRAM Core Memory Replacement board

SWAPPED IN THE HC CHIP VERSION FOR 3.3V SUPPLY

I had installed 7400 series chips (and other types) on the board that were able to work on a 3.3V power supply, but a recent switch from an AND to a NAND gate, open collector, I put in 74LS03 which require a minimum of 4.75 VCC. The 74HC03 parts arrived last night and were installed on the board. 

TESTING ON THE BENCH

I am working to rigorously test the PCB while on the bench before I install it on the IBM 1130 system. I wanted to write to different memory addresses using unique data values, then test by reading the locations and comparing the returned values. 

I whipped up some code on an Arduino Due (because it uses 3.3V logic levels), expanding on my previous code that generated the correct timing of Storage Read and Storage Write signals that would come from the IBM 1130. These alternated for 1.8 microseconds duration. I stored fourteen addresses and corresponding data values in the program then stepped through the list cyclically. At the start of a Storage Read it sets the memory address (and data value for the upcoming write). The Sense pulses are generated during the Storage Read and then the location is updated during the Storage Write. 

I used direct port mapping to write the pins since the DigitalWrite function is relatively slow. The Due requires that a 1 be written in one control register to turn on a pin, but it doesn't turn off it 0 is written there. Instead, a 1 has to be written in a different control register that clears pins. 

After the first pass, the memory would have had all locations set up with the prepared values from the program. I would then set the scope to trigger on Storage Read rising edge or an address bit rising edge and monitor three output lines from the board at a time. Due to limited pins on the Arduino, I couldn't simultaneously produce the 16 B register data values, the 13 SAR address values and capture the 16 Sense pulses to verify. 

With just 3 pins that I can monitor at a time on the scope, I had to be clever to test the correct data returned from each location. These are open collector inverted outputs, thus a 1 bit pulls its pin to ground else it is pulled up to 3.3V using a resistor.

The addresses I chose were 0, 1, 2, 4, 8, 16, 32, 64. 128. 256, 512, 1024, 2048 and 4096. I can uniquely trigger on those addresses except for address 0. The values written were 1 through 14 decimal in sequence. 

I had previously validated that all 16 sense pulses are generated when the corresponding bit was written in memory, also that all 16 of the data value (B reg) bits were stored in the memory words. This is just a test to be certain that we are addressing memory correctly. Any result of 0 detects an addressing or write failure. 

When I tried to observe the outputs from the Arduino I found that it just could not keep up with the 1.8 microsecond durations of the memory cycle. To get reliable results, I had to slow it down to 1.8 milliseconds for read and 1.8 milliseconds for write. That won't stop my memory board from working, since my logic triggers on the edge of the read or write signal and its not sensitive to its duration. 

The connections using jumper wires are a bit fragile, thus I had to deal with some erratic results. More frustratingly, I would sometimes turn on the +12V bench supply and see zero current being drawn. The wire connection on my PCB showed 3.3V which is the correct output of the regulator, so I didn't understand why this was happening. 

UNDERSTANDING THE WEIRD RESULTS

The power confusion is due to the ability of the voltage regulator to buffer quite a bit of energy, when combined with the very low draw of my board, so that it can sit drawing zero power from the bench supply for long periods. 

I then realized that the slow speed I set up for alternating Storage Read and Storage Write cycles didn't completely solve the glacial relative speed of the Arduino compared to my board. I saw that the delay from when I set Storage Read high until the main loop of the software set the Storage Address Register and B Register outputs to the board was approximately 6 microseconds. I was already using direct port mapping for speed but the problem is that the read is accomplished rapidly and the output is provided from my board in about 800 nanoseconds (0.8 microseconds) thus the data being read does not have the proper address yet. 

The residual address from the prior pass of the Arduino code is what the MRAM is reading, not the one I intended. I checked a few cases and felt comfortable that this is why I see the wrong bit being output for a given address.

WILL REWRITE THE ARDUINO DRIVING PROGRAM

I cannot use the timer based 1.8 microsecond or even the drastically slowed 1.8 millisecond control signals because the Arduino can't set up all my outputs in time for the very fast board circuitry. Instead, I will use the Arduino at its native speed to set up the SAR and B values, then toggle the Storage Read and Storage Write signals from the code. 

Specifically, I will split the program into one that only does Storage Reads in order to observe with the oscilloscope as above. The other version of the program will execute one pass writing the intended values into memory. 


Wednesday, September 3, 2025

Restoration of top cover glass for IBM 1132 printer

GLASS BROKE ON TOP COVER

The cover of the 1132 printer has a glass window to allow the operator to watch what is being printed while lowering the noise due to the cover being closed. Sometime in the past this printer had its glass cover broken - bits of glass were inside the machine although most had been cleaned up before I received the machine for renovation. 

The glass had rubber channels around all four edges. These fit under metal channels that hold the rubber and glass up against the underside of the printer cover. 

All the parts to hold the sheet of glass in place were present - minus the nuts - so all I needed to do was buy a replacement glass or acrylic sheet to the correct size.

BUYING REPLACEMENT ACRYLIC

Ace Hardware in my area has a service to cut acrylic sheets to size, which is perfect for a replacement. They can also cut glass if I decide to go with a glass sheet instead. I carefully measured the size I needed and then went to the hardware store to get the new window cut. 

The rubber channels from IBM are so degraded that they don't work well. I believe I will need to buy some weatherstrips and press them into service. 

Too, one of the edges is rusted out (see below). I fit the acrylic I had cut onto the printer, but have left the peel off plastic cover to minimize scratches until the printer arrives back at its home in New Jersey.

DEALING WITH SEVERE RUSTING ON RECESS IN THE COVER

The glass plate is slanted with the front lower and the back higher so the operator looking through the top gets a good view of the printed page yet the cover clears the tall forms tractor on the back of the carriage. This forms a recess at the front where rainwater collected and sat for long periods of time, judging by the rusting away of the sheet metal rising vertically from the glass to the top of the cover at that recess. The paint is peeling away, creating a mottled appearance of rust and thick peeling paint. 

I plan to remove the paint from the vertical sheet, sand the surface a bit, use rust converter to seal the surface, and then spray paint as close to a color match as I could. The same spray paint will be used to touch up the rotary mode switch on the IBM 1130 which had some rust spots and peeling paint. 


Tuesday, September 2, 2025

Reassembly of the 1132 printer - part 9

REED RELAY REPLACEMENT PCB ASSEMBLED AND ATTACHED

A complex reed relay (RR1) was discovered to have an open coil. This relay has four reed switches - two are normally closed and two are normally open. Three of the four switches are used by the PCB that contained this relay. It had a 48V coil. 

The RR1 relay activates when the printer controller logic in the 1130 has activated the Carriage Magnet to move the paper down one line or to skip until a hole is detected in some channel of the carriage control tape. 

Three relays RR1, RR2 and RR3 are used in order to have the Silicon Controlled Rectifiers energized from the time the Carriage Magnet is activated until the printer carriage reaches the next line position where the Carriage CB switch closes.  

I was not able to find a similar reed relay but worked out a solution using a pair of SPDT reed relays to substitute for the three reed switches that were used in RR1. The relays were not 48V, thus I also had to drop the voltage to the 5-6V range of the parts I bought. A small PCB I designed mounted the two reed relays and the dropping resistor. 

I installed the two replacement reed relays, which were in 8 DIP form, plus a 2W resistor onto my new PCB. I added wires between this small PCB and the main IBM PCB which had contained the failed RR1 relay. 

CARRIAGE CONTROL TAPE PCB REINSTALLED

The IBM PCB mounts on the side of the frame at the right rear of the machine, with three connectors that plug into it from two sides. With that in place, I mounted the small new PCB with my relay substitute just above it. 


FORMS TRACTOR AND PAPER FEED GUIDES INSTALLED

The printer uses continuous forms with pin feed holes on the two edges of the paper. A tractor mechanism holds the paper with pins through the feed holes and advances it when the platen turns. This was inserted on top of the carriage mechanism.

A guide attaches to the top rear of the carriage to guide the new paper up into the forms tractor and to guide the printed pages as they come out of the machine. Often the operator would have a box of blank forms up against the rear of the printer with the paper fed up through the tractor and then an empty box behind the blank paper box to catch the output as it comes down from the paper guide. 



Dealing with the broken clutch fork on the 1132 printer carriage mechanism

IDENTIFIED BROKEN PART IN CARRIAGE

The knob which switches the platen in and out of engagement with the gear box is shown in the diagram below from the parts catalog, with the parts circled in green. The knob rotates and a pin on the inside turns with the shaft. That pin fits in the notch in the metal fork piece on the top of the assembly to the right.


The next diagram is an exploded view where you can see the piece that has one of its fork tines broken off. It is hooked onto the shaft with a tapered pin. 


With one of the tines of the fork broken, the pin on the back of the knob shaft can't move the fork back and forth, twisting the shaft to cause the platen clutch to engage or disengage. I believed I needed to restore the U shaped channel or add back the second tine so that the knob shaft can cause the fork's shaft to turn in both directions.

FINDING THAT SPRING IN CLUTCH OBVIATES NEED FOR THE SECOND TINE

While I was watching the motion of the knob and the fork, considering ways to replace the tine's function, I noticed that the platen clutch would be held out of engagement by the remaining tine when the knob was turned to Out but when the knob is turned to In, the clutch pulls the fork over to engage. 

That is, the tine doesn't need to move the fork since the spring force in the clutch assembly is trying to pull it to the engaged side at all times. It takes positive force to disengage, using the remaining tine, but when that force is removed the clutch snaps into operation. 

NO WORK NECESSARY, THE IN/OUT KNOB WORKS PROPERLY AS IT IS

I can cross this task off the restoration list since the printer works properly without having to address the broken tine of the fork.