In-circuit PROM tester
Dealing with old technology can raise interesting challenges. Whereas modern programmable devices can easily be tested in circuit via JTAG or SPI interfaces, older devices do not have this convenience.
I work on a large wireline digital telephone switching system. Originally designed in the early 1980s, but still seeing service today throughout the United States, there is a constant need for maintenance and repair. A card that frequently comes in for repair is the tone generation card. This card is responsible for generating all of the tones used in telephony, e.g., ringtone, busy tone, and DTMF and MF signaling tones.
The tones are generated by assembling digitized tone fragments into a complete complex tone. There are six obsolete 1k×8 PROMs in 24-pin DIPs which contain the tone fragments. The most common failure mode of this card is where one of the PROMs has a bad cell location, but due to the circuit configuration, it is impossible to tell which of the PROMs is bad without removal and reading each of them on a programmer. Fortunately the PROMs are socketed, but sometimes they really don’t want to come out of the sockets, having been in there for a good few years. The risk of damage to good PROMs is high, and the removal, test, and replacement tedious and time consuming.
This Design Idea is for an in-circuit tester which can be clipped onto each of the PROMs without removing them from the board. There is a test point on the PCB which disables the address drivers to the PROMs so access is fully controlled by the test circuit.
With the test point grounded, the tester is slipped onto each PROM in turn. A PIC 16F887 microcontroller verifies the PROM by calculating the longitudinal checksum. It compares the checksum with the six known checksum values. If it finds a match, it lights one of six green LEDs, indicating a good PROM has been found and also its identity (useful if (when!) I’ve put the wrong PROM in a socket).
If there is no checksum match, the red LED will light, indicating it is attached to a bad/unrecognizable PROM.
The circuit was designed using Diptrace, and the code developed using Microchip’s MPLAB X.
The built PCB is attached to a 24-pin DIP clip. One row of the clip’s pins is inserted through the board; the other side is wired to the board so it can be squeezed open. The circuit pulls power from the board under test, but it can also be connected to 5V via the six-pin header and used to test loose PROMs on the bench.
The circuit is very straightforward. The 10-bit PROM address bus is connected to eight bits of PORT A and two bits of PORT E on the PIC. The PROM data outputs are connected to PORT D. The LEDs are connected to PORT C. A six-pin header is used to connect the PIC to the PICkit programming module for downloading the program.
After power-on reset, the program sets up the ports and initializes variables, then enters an infinite loop. It clears the LEDs, then steps through all 1k addresses, adding the read data to a running total at each address increment. At the end of the address range, the total is equal to the longitudinal checksum of the PROM under test.
This value is compared with the six known-good checksum values. If a match is found, the appropriate green LED is turned on. If no valid checksum has been found, the red LED is turned on. A delay loop inserts a pause, then the program returns to the beginning of the loop, turning the LED off. This causes a satisfying blinking of the appropriate LED – confirmation that the circuit is actually doing something.
Download the design files.
- Use the MCLR pin as an output with PIC microcontrollers
- PIC debugging routine reads out binary numbers (see pg. 6)
- Bringing up PIC: The agony
—Barry Davies has worked for a major telecommunications company for 34 years, designing, fixing, and modifying hardware and firmware.