Denon PMA-770 (and others) Arduino Control
# History
```
28-Dec-2019: Initial Version. Just reads five switches and triggers an output.
29-Dec-2019: Version 0.1 - Added a display. Cleaned up code. Made a repository.
29-Dec-2019: Version 0.1.1 - Added preliminary IR remote support
30-Dec-2019: Version 0.1.2 - Controls ShiftReset and OutputEnable on 595 to prevent random start-up state.
30-Dec-2019: Version 0.1.3 - Removed ShiftReset function. Replaced with reset circuit onboard.
01-Jan-2020: Added license, media, and proper README.
````
# About
The Denon PMA-770 is a high-end integrated amplfier from the early 80's capable of the usual 100 watts into
8 ohms; and somewhere in the neighborhood of 120 to 140 in to a 4 ohm load. It's a DC coupled amplifier of
"Direct-A" topology. It's got 3 pairs of output transistors, no capacitors in the audio path, and it sounds
outstanding.
But it's also got this seriously stupid way of working the input switching that has not only caused failure
of most of the inputs; but is silly enough I don't want to bother trying to replace the switches to keep the
original method in tact. In order for the audio to make it in to the amplifier, it relies on connecting through
the "normally closed" contact on the switch "in front" of it. Well the "normally closed" contact has decided it
no longer wants to close and the entirely sealed design has prevented cleaning agents to make it in.
To add to the stupidity; this unit features a simple segemented LCD display to display the name of the input.
This was a probably a pretty big ordeal in an era where even a single LED lighting up over the name was an
entirely new idea. This display is non-standard and relies on even more contacts in each input switch to throw
pins to AC. Disabling the input switches would disable this display; but the 128x32 OLED looks like it will fit
in the phsical space the existing one does.
Taking that in to account, I decided to build a relay board driven by an Arduino that would also drive the
display. It also lets me do crazy things like add input selection by remote control...something you weren't
getting back in 1981. Additional modifications like motorized pots for volume could further extend the
remote control function.
# Hardware
The basic idea is parallel the actuator contacts of 5 DPDT (or DPST) relays and flip them on one at a time (two
for phono).
[![Schematic of hardware](/images/schematicsmall.png "Schematic")*Click for full resolution.*][/images/schematic.png]
Data is shifted in to a 74HC595 and it's parallel outputs are used to control a ULN2803(or 2003) darlington array to
in turn drive a relay. The output of the 74HC595 is controlled by the microcontroller and an RC circuit on the reset
line prevent suprious relays from firing. Every effort has been taken to ensure only one relay will be fired at a time
to prevent damage to other audio components. The 2803/2003 arrays include built in snubber diodes for inductive kick-
back protection. If you should deviate from this schematic and use discreet diodes, you must add these diodes to your
circuit or you will damage the transistors, shift register, and/or Adruino.
The switch matrix consists of a simple resistor based analog method that merely throws different amounts of voltage thru
resistors. While this allows us to read all of our switches using just one line, it can cause problems should you want to
trigger two buttons. On the PMA-770 this is fine as the original bank of switches are mechanically linked to allow only
one to be active at a time. It is possible to read dual inputs as long as the parallel resistance doesn't cause a value
close to any indvidual switch. I have included a small utility in the /utilities folder that will display the current
ADC integer value to the LCD display. It can be used for just figuring out which resistors to use, or to check behavior
of paralelled resistors (two button press scenario). Using one line for the switch matrix is not set in stone and may
change depending on needs and availability of pins going forward.
The Phono-1 and Phono-2 inputs are the only time the unit will ever fire two relays. This is because on the original
unit itself; both of these inputs route the phono-stage preamp to the main amplifier while routing the cartridge input to
the phono-stage.
An 1838 IR sensor is used for remote control function. An additional utility may be written to help with this going forward
but it's possible I may wind up writing a routine for "self-programming".
Currently I am using an I2C 1602 display just for development purposes. This will be replaced with a 128x32 I2C OLED display
in the future. This display is just a little larger than the display in the Denon; so it shouldn't be any issue to mount it
and format everything to appear in the actual visible space. It is not shown on the schematic; however it is just connected
to 5V, GND, SDA, and SCL lines.
In the future I will be adding some kind of NVRam storage. This will facilitate actually storing configuration options, remote
programming codes, and to store the last-used input. I may also use this to store graphic data for the OLED display to
emulate the original segmented font display of the Denon.
# Media
[![Picture of prototype rig](/images/prototype.jpg "Prototype")*Prototype & Development Build*
This is a previous revision of the hardware before the power-on reset circuit was added to the 74HC595. The parallel data is
represented by the standard arrangement of LEDs with current-limiting resistors. This is literally all that's required during
development since I'm already very familiar with the 2803 as a driver.
I'm horrible at making videos in general...but I still made an attempt to show things off.
# License
Copyright 2020 Jay Moore
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.