This PCB houses 8 buttons, 1 IR remote receiver, 1 LED, 1 VFD, and 1 30-pin FFC (flexible flat cable) connector along with several resistors and capacitors. Up on closer inspection (with the help of a multimeter) I was able to draw the schematic for this board:
Since I do not know the exact spec of the VFD (which has whopping 45 pins total but only 26 of them are actually connected), I've only indicated which VFD pins and FFC connector pins are connected.
The LED and IR receiver circuits are pretty straight forward.
The buttons, however, looked somewhat puzzling at first. But, further inspecting the main PCB (i.e., the other end of the FFC) revealed that both K0 and K1 are connected to an Onkyo proprietary front-panel control IC with pulled-up 2.7 kOhm resistors. In other words, there is a variable voltage divider which results in unique voltage at K0 or K1 for each button. The Onkyo chip has either a pair of A/D converter or of arrays of analog comparators.
What to do with Front Panel PCB
The initial idea was to design a replacement PCB with Noritake VFD and a socket for the Arduino Nano. However, I concluded that there would not be enough space for Arduino Nano and more importantly it is not very cost effective to order large sparsely filled board.
Instead, I've decided to design a smaller PCB to mount the Arduino Nano and connect it to the (modded) original front panel PCB.
- Both IR receiver and LED circuits can be used as is.
- Remove the original VFD, and attach the Noritake VFD PCB right on the vacated space. Interestingly, the height of the original VFD unit is pretty much the same as the height of the Noritake VFD module (VFD + PCB). The front panel PCB needs to be cut so that the 6-pin VFD connector is accessible.
- Buttons. There are several alternatives here...
Button Circuit
I came up with 3 different approaches
- Use the existing voltage divider circuit with Arduino's ADCs
- Use 8-to-3 encoder (74148)
- Use Microchip 8-ch I/O Expander (MCP23S08)
Option 1. Use the existing voltage divider circuit with Arduino's ADCs
Pro:
- Least amount of modification of the front panel PCB
- More complicated Arduino firmware design
- Arduino must monitor the buttons all the time and cannot be powered down.
Option 2. Use 8-to-3 encoder (74148)
Pro:
- Interrupt-driven all-digital system
- Front-panel button circuits must be scrapped and rewired using jumper wires
- Needs pull-up resistors
Option 3. Use Microchip 8-ch I/O Expander (MCP23S08)
Pros:
- Clean interrupt-driven system
- No extra hardware components (MCP23S08 has built-in pull-up circuits)
- Each button press individually monitored
- Front-panel button-related resistors must be removed and rewired using jumper wires
Verdict: Option 3 for simplicity, versatility, and "greenness".
Option 1 is appealing at first but ultimately got rejected due to its inability to power down the Arduino. Of the two digital, interrupt-driven approaches, Option 2 was the first one I considered (and tested) but went with Option 3 largely due to the pull-up resistor free design. Also, only Option 3 can detect of each button state change, which enables simultaneous multiple-button presses.