TheMaxus

Modifying the AY-AT (GM328) component tester

About a month ago I bought a GM328 component tester from China. While waiting for it to arrive I started looking into ways to modify it. A few years ago I saw a video about modifying the Fish8840 component tester firmware and started wondering if I could do the same thing to my GM328. Soon enough I found an EEVBlog thread about this and a GitHub page on software and hardware modifications. Based on these two sources and my own experience I've decided to write about my own journey on assembling and modifying it.

Assembly and troubleshooting

The first step was assembly. The assembly of this particular kit is quite easy as all the parts are clearly labeled on the PCB. As a precaution I would take special care not to overheat the semiconductor components (BJT-transistors, voltage regulator and a voltage reference). Also be careful not to mess up the polarity of an LED and the battery connector. Also if you're planning on replacing the crystal, I would suggest not to insert the crystal fully, this way it will be easier to desolder in future. (When you put the upgraded crystal in place you should insert it fully through the PCB.)

After the assembly was done, I started playing with it and measuring different components that I have. Then I tried powering it form an old modem power brick that outputs 12V. As soon as I powered the device on it started acting weird. It started showing that the battery is low even though it was being powered from a wall adapter. I disconnected the adapter and powered it on again from a 9V battery. It was still acting weird so I started measuring voltages on the board. Soon I found out the reason it was acting that way was that the microcontroller was receiving +7.8V when it should receive only +5V. Also I noticed that the part of the board with power regulator was quite warm to touch. So it was clear the culprit was the voltage regulator. After some research I found out that failing voltage regulator wasn't so uncommon on this board.

Hardware modifications

At first I wasn't going to modify the hardware, but after my power regulator has failed, I've decided to modify the hardware as well.
The parts I ordered:

The modification itself is quite simple. The hardest part is desoldering and reinserting the voltage regulator as it has three legs. You should replace the old HT7550 regulator with a new MCP1702. Replace the oscillator and replace the resistors. When replacing the resistors double check that you're putting them in the right place. Also take extra care not to overheat the new voltage regulator when soldering.

After installing the new voltage regulator, it's recommended to remove the TL431A voltage reference, because voltage reference should only be used if it's at least 10x more precise than the voltage regulator. After removing the voltage reference you should also remove the 2K2 resistor (If you're planning on using the k-firmware, you should replace it with a 47k resistor) which is located under the ZIF socket between the other resistor and a big SMD part.
The hardware modification is now complete.

Firmware modification

Preparation

First of all we are going to need the basic AVR development tools:

Also we're going to need some program to upload the firmware to the microcontroller. Use avrdude for almost any programmer that connects to the ISP header and use minipro if you use the MiniPro programmer.

(These are packages for Arch Linux, you will need to google the package names for your Linux distribution)

Now we need to download the source code of the firmware:

git clone https://github.com/Mikrocontroller-net/transistortester.git

After cloning the repo navigate to Software/Markus and unpack the archive with the latest version.

The command for that is:

tar -xvzf <archive_name>.tgz

Now we need to configure the firmware.

Configuration

First of all you'll need to make the firmware compatible with your device. Information on that is in the "Clones" file in the folder with the firmware

Then you can configure the firmware to suit your needs.

You also need to make the following changes if you've modified the hardware according to this guide:

config.h

Makefile

If you are using the usbtinyisp programmer you should change these lines:

PROGRAMMER = usbtiny  
PORT = usb  
OPTIONS = -B 5.0  

config_328.h

In this file you should look for a line #define LCD_ST7735 on the line above it is going to be a line #if 0 you should change it to 1 to make this code block active.

Compilation and programming

Now that we're configured everything it's time to compile the source. If you have all the dependencies installed, the process is fairly easy. Just run the command:
make
To speed up the compilation you can type:
make -j<core_count> (Works only with the m-firmware)

After the compilation make sure that your firmware fits into memory. You can see how much memory your firmware takes after the compilation. Here's for example my output:

AVR Memory Usage
----------------
Device: atmega328

Program:   32678 bytes (99.7% Full)
(.text + .data + .bootloader)

Data:        245 bytes (12.0% Full)
(.data + .bss + .noinit)

EEPROM:      741 bytes (72.4% Full)
(.eeprom)

You can also produce the same output using the following command

avr-size -C ComponentTester --mcu=atmega328p

After compiling the source you will need to program it into the microcontroller. I used my Arduino Uno's ISP header to program it. Simply remove the microcontroller from the socket with a small flathead screwdriver and insert the microcontroller to be programmed. (Be careful not to bend any pins and make sure that the notch on the IC is in the same place as the notch on the socket or PCB.) Then connect your programmer to the ISP header on the Arduino.

Then you can just type:
sudo make upload and sudo make fuses

And if everything is done correctly you should now have a microcontroller with updated firmware in it. Insert it back into the transistor tester and test the device. You should also calibrate it by shorting all three connectors in the ZIF-socket.