TDS540A digital oscilloscope repair

A few months ago I got an old TDS540A oscilloscope in working condition. Unfortunately, after sitting unused for several months, the scope developed an interesting fault. Instead of occupying the whole screen, the captured waveform was chopped up and repeated several times as shown below:
My initial guess was that there was a broken address line, so I opened up the oscilloscope and had a look at the boards. There were no obvious signs of damage (such as a corroded trace from a leaking capacitor), so I decided to take a look at the schematic. I found some schematics on the TekWiki page for the TDS540, but the schematics did not match up with what I was seeing on the board. It turns out that TDS540A is more similar to the TDS544A than to the TDS540. After finding the schematics for the TDS544A, I spent a while looking at the schematics and probing random points on the board. Since I didn't know what any of the signals should look like, this wasn't terribly productive, so I tried to take a closer look at what was being displayed on screen.

Diagnosing the problem

The pattern of traces and gaps on screen did not change when the horizontal scale or offset was changed, which suggested that the issue was with displaying the waveform rather than acquiring it. Each of the sections of visible trace was not a continuous piece of the original waveform, but instead consisted of four sub-sections, each taken from different parts of the original waveform. Each of these sections consisted of 8 pixels. The pattern of trace sections followed by a gap repeats 8 times, so 8 * (4 sections trace + 4 sections gap) * (8 pixels per section) gives a total of 512 pixels. This correlates pretty closely with the specs (500 pixel waveform area).

To get a clearer image of what exactly was being displayed, I connected the input channel to the scope's calibration output and adjusted the horizontal scale such that, if the scope were working, only one rising edge would be visible on the screen. Since the trigger point indicator was still visible on screen, I knew where the rising edge should be located and could compare it to where it was actually visible. In the animation below, the alternating light and dark strips indicate the horizontal sections of 8 pixels each.

Looking at the leftmost group of 4 sections, we can see that when the edge is visible in section n, the trigger point is located in section n*17:

If we write the numbers out in binary, we can see a possible mechanism for this issue (the sections marked in red are out of range and thus appear as gaps in the trace on screen):
Physical #Displayed #
DecimalBinary (LSB first)DecimalBinary (LSB first)
0000000000 000
11000171000 100
20100340100 010
31100511100 110
40010680010 001
51010851010 101
601101020110 011
711101191110 111
8000180001 000
90001251001 100

From the table, it is apparent that the lower 4 bits of the section number are being duplicated on the upper bits. This is due to the way the data is stored and retrieved from the waveform buffer. The waveform buffer consists of a 2k by 16 bit SRAM array, an address multiplexer, and an address counter. The address counter consists of three 74F161 4-bit counters chained together into a 12 bit counter, though only the first 11 bits are used.

When writing data to the buffer, the CPU loads data in using the D2 random access bus. This part of the process works as expected. However, when the data is read from the buffer to be displayed on screen, the address multiplexer switches over to the counters. The lowest stage of the counter rolls over once per section. Note that the lowest stage rolls over every 16 clocks, but each section was only 8 pixels wide. This is because the scope was in peak detect mode, where both the highest and lowest values sampled for a pixel are stored. In other modes, where only one value per pixel is stored, the sections actually doubled in size, with half as many total on the screen.

Each stage has a ripple carry output (RCO) and two enable inputs (ENP and ENT). Both enable inputs must be high for the counter to count. When the output of the first stage is 15 (all bits set), then its ripple carry output is high. This enables next stage, which counts up on the next clock cycle as the first stage rolls over to 0. However, the third stage has one of its enable inputs connected to the ripple carry of the second stage and the other connected to the ripple carry of the first stage. In my scope, the ripple carry output from the second to the third stage was broken, so the counter only received a signal from the first stage. Thus, the second and third stages both incremented whenver the first stage overflowed, which would have the effect of duplicating the output of the second stage on the third stage.

The fix

To fix the broken trace, all I needed to do was scratch off some of the solder mask near the broken connection and add a blob of solder that connected the pin to the trace, bypassing the broken connection on the board. I also took the opportunity to replace the electrolytic capacitors on the processor board and clean out some of the dust that had accumulated inside the oscilloscope.

Comments

Popular posts from this blog

Improving and calibrating the capacitive water sensor

Lightsaber prop - first prototype

Turn a buck converter module into a buck-boost converter with only two components