Around 6 or 7 years ago I was at a flea market with a friend of mine: he was looking for an audio amp while I was looking for a tuner.
Guess what? We found a amplifier with tuner combo for a bargain price and thus I went home with the tuner while he went rocking his "new" amp.

The device is a Pioneer TX-950 - nothing special - but worked well so far.
A limitation is that the thing has no automatic tuning scan (i.e. press a button and forget till station is tuned).
Recently, I got the insane idea of "tuning" it (pardon the pun ;-) ) by modifying this aspect.

Initial research

The service manual can be found here:

The circuitry is based on a hybrid MCU which contains also the PLL and other tuner related stuff. Apparently, there are some pins to enable automatic scanning but unfortunately it seems that there is some missing circuitry around that to make it work.

Implementation idea

The user panel has two indicators: one for "Station Tuned" and one for "Station Tuned and Stereo".

So, I got the idea of simply monitoring the "Station Tuned" signal, the "Tune Up button" and "Tune Down button" and simulate keypresses by forcing the user buttons on demand.

In this way a simple logic can be applied to generate the button press, check the tuned signal and continue this process until a station is detected as tuned.


I have implemented the idea by using the ATTiny85 which I had lying around in the junk box.

The service manual has been used to find and detect the actual "Station Tuned" signal on the board; buttons instead were pretty easy to trace.

Each signal is coupled via a 3.3k resistor. This is especially critical for keypresses as the microcontroller could bring the line down while the user keeps the button pressed.

The pictures are showing the attiny placement on the board, the 3 signals connections and Vcc / Gnd connections. The original circuitry works at +5V.

Here, the software code which is kept very simple and stupid (no interrupts and busy waiting):

 * @file
 * @brief Auto-scan of frequencies for Pioneer TX-950
 * This program runs on ATTiny85 whose schematic is:
 * N/C         | PB5 | C  | VCC | 4.8V TC9157P's Vcc
 * Button DW   | PB3 | H  | PB2 | N/C
 * Button UP   | PB3 | I  | PB1 | N/C
 * Ground      | GND | P  | PB0 | Tune Indicator driving circuit (R806)
 * Connections to the signals on the board are done via 8 kOhm resistors,
 * just in case (especially as the buttons can be driven while the user
 * is pressing them).
 * Test mode that performs a basic functional test is also available by
 * turning off the device, pressing UP and DW button at the same time
 * and then turning on the device. Pressing UP will go 10 frequencies
 * UP, vice-versa it goes 10 frequencies by pressing the DW button.
 * The normal mode implements the actual feature.
 * If a UP or DOWN button is pressed for at least 300ms, then the auto-scan
 * begins:
 *  - simulate keypress to advance or decrease frequency
 *  - wait for 100ms checking if any button press is performed
 *    - if button press is performed: abort the auto scan
 *  - read the tuned signal: if present, then the receiver is tuned. auto-scan is done
 *    - if not present: continue scanning
 * There is no timeout or end of spectrum checks. If the receiver is tuned at the limit,
 * it will keep tuning.
 * Design notes
 * The design of the program is very simplistic and therefore redundant.
 * No timers, no interrupts: just a plain simple logic written in a couple of hours.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdbool.h>
#include <stdint.h>

#define BTN_UP_PIN       (PB4)
#define BTN_DW_PIN       (PB3)
#define INPUT_TUNED_PIN  (PB0)

#define IS_TUNED           (bit_is_set(PINB, INPUT_TUNED_PIN) != false)
#define BTN_UP_PRESSED     (bit_is_set(PINB, BTN_UP_PIN) != false)
#define BTN_DW_PRESSED     (bit_is_set(PINB, BTN_DW_PIN) != false)
Read more »