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:
- Spare Atmega 328p (In case I brick the original microcontroller)
- 16 or 20 MHz crystal oscillator (This should improve the capacitance test accuracy)
- MCP1702 voltage regulator (Has much higher precision and higher power rating)
- Ideally you should also order high precision 680 and 470k resistors but I was too lazy to do that
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:
- git
- gcc
- avr-gcc
- avr-libc
- make
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
- Comment out the
#define HW_REF25
if you removed the voltage reference or just don’t want to use it
Makefile
- Change
FREQ
to 16 or 20 depending on what crystal you’ve installed
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.