You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.2 KiB

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 Click for full resolution.

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 rigPrototype & 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. Youtube embedding is apparently broken and I don't feel like putting a gig worth of video in the repository, so you'll just have to use links.

First Video: General Overview

Now I've Got A Remote Control

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.