Customizable 20W Amplifier

4 Input, 3 Way Tone Control and Customizable LCD Display

Similar projects worth following
This is the product of a long held desire to build my own amplifier and a failed attempt at some self-powered speakers. The amplifier uses the Adafruit MAX9744 amplifier board for amplification and volume control and is connected to a custom board using the TDA7439 to control inputs and tonal controls. All is powered by an Arduino Nano which interfaces with the buttons and LCD display. All this is housed in a custom 3D printed enclosure.

Input names are user changeable (something I hate about 'real' amplifiers are specific, unchangeable, input names) and all settings are stored in the Arudino's EEPROM and recalled when turned on.

The idea of this project is to make an amplifier that can be customised. Something that annoys me with most amplifiers is that the input names are limited what the designer thought they should be. My home theatre amp has a BluRay input, a DVD/BluRay input, a Game input and so on. While I have one BluRay player, I don't have another and certainly don't have a DVD any more. So the "DVD/BluRay" is actually connected to my media player, but I can't change the name. It is a little thing but something that has always bugged me.

This is a 2 channel amplifier that I designed and made for my slowly expanding "physical media" equipment (so far a tape cassette, DAT, minidisc, vinyl and a RaspberryPi based network media player). As my equipment list grew I needed more than the little powered speakers I was using. I had a MAX9744 based 20W amplifier board by Adafruit that was for a failed project to make a set of powered speakers so that became the basis of the amplifier. the MAX has a few nice features. Firstly it is a digital amp, making it very energy efficient. Secondly it can control the the volume internally, either by using an external potentiometer or via I2C.

Initially I had it running in analogue mode but with the increasing devices I needed a way to switch between them. A little research and I came across the TDA7439DS. This little chip not only has 4 switchable inputs, it also has a 3 way tone control, balance, volume and is controllable via I2C. This opened up the option to use a microcontroller to govern all the parts. Given I have the most experience with the Arduino I went with a Nano as it was something I had on hand and was reasonably small.

So I designed a circuit for the TDA chip that would allow it to connect to the Adafruit amplifier board, the 4 inputs and the Arduino Nano. The Nano then had another board that connected to 5 buttons for dealing with power and the tone and balance controls. It also had a satellite PCB that connects to the input selector buttons and finally a 16x2 LCD character display with an I2C backpack.

Another thing I wanted was to have an output for a VU Visualiser (I refrain from calling it a 'meter' as it isn't calibrated. It is mostly for the flashy lights!) and another output so the currently selected input could be recorded on to a tape cassette. The TDA chip has two outputs, one just after the input selector and the second output after tone controls. The tape output comes from the output just after the multiplexer so it is an exact recreation of the input. The 'VU meter' is taken from the second output that is fed into the amplifier so it shows the actual signal being amplified.

One issue would have been if the TDA chip was controlling the volume, as lowering the volume would make the VU meter also drop down in its response. Fortunately the MAX chip, as we said above, has it's own volume control, that means the output to the VU meter isn't affected by lowering the volume as it happens inside the MAX chip.

The LCD display is used to show the current input selected and the current volume level (or if it is muted). The inputs can all be named up to 14 characters which are stored in the Arduino's EEPROM (along with the current volume, tone and balance settings and the last selected input). Meaning even if powered down it will retain it's settings. All of this is controlled by the buttons and a rotary encoder.

1.3.2 Hackaday

Additional Feature/Bugfix: Audio was being distorted from 'hot' inputs because the TDA chip was preset to a too higher volume. This setting was brought out to the setup menu and can now be user set as a global 'pre-amp' to set the volume of the TDA chip to stop any distortion. Manual was update to reflect new setting

x-zip-compressed - 879.04 kB - 02/08/2020 at 12:41


1.3 Hackaday

V1.3.1 Firmware and updated Manual Additional Features: Autodetection of amplifier - can now identify if the MAX9744 is attached or not. The Settings Menu will show which type of amplifier (if any) has been detected Bug Fixes: Removed occasional square bracket from the backlight time menu

x-zip-compressed - 861.69 kB - 01/14/2020 at 21:43



Version 1.2.2 of the Amp Firmware Additional features: Auto detection of RGB backlight LCD controller Backlight timeout RGB Backlight controls Settings menu

x-zip-compressed - 9.86 kB - 09/24/2019 at 18:10


User manual and front/rear panel stickers

x-zip-compressed - 1.33 MB - 08/20/2019 at 16:18


KiCad CAD drawings. Contains the main input/tone control board (DA2004.1), CPU board (DA2004.2) and the input key board (DA2004.3)

x-zip-compressed - 361.72 kB - 08/19/2019 at 15:55


View all 7 files

  • Firmware Update 1.3.2

    smartroad02/09/2020 at 18:54 0 comments

    Yesterday I uploaded a new firmware version to add a feature that corrects a bug. The bug was clipping audio from certain devices. Initially I thought is was to do with the 4 to 1 audio expander I have been making (see my other project) as the only devices affected were the ones that were plugged into it. It took a while but after some investigation it wasn't the expander at all! Turns out it is the way I have the volume controls organised.

    I run both my amps using the Adafruit Digital amp board. This board is able to control it's own volume via the I2C bus and that is how the volume is controlled when it is detected on boot. The input and tone selector chip on my board also has a volume control, but this isn't used in this case and is set to -5dB because originally I set that level to reduce the clipping that was happening.

    Problem came about because that was done before I had the additional kit that was causing the clipping. After I finally figured it all out, I updated the setup menu to be able to adjust that volume by the user, allowing easy adjustment to prevent clipping.

    This is a bit of a bodge at the moment because it doesn't care about the type of amp connected currently, something I ran out of time to implement before I had to leave for work.

    Hopefully I can get that sorted so it will prevent that option being available if the Adafruit board is not connected!

  • V1.3.1 Released

    smartroad01/14/2020 at 22:00 0 comments

    This version update can now detect the type of amplifier attached to it, currently the MAX9744 or none. Which amplifier it has found is shown in the settings menu and will show "MAX9744" or "Custom". The detection is done on hard power up, i.e. when power is applied/attached.

    With the custom option (no MAX9744 board attached) then any amplifier can be attached to the VU output RCA connectors or internally using the RIN, LIN and AGND pins on the MAX9744 connector. With the MAX9744 connected the volume control is controlled by the MAX chip. When it isn't detected then the TDA7439 chip will control the volume.

    The advantage of having the MAX chip control the volume is so that the VU output remains at a high output level regardless of the amplifier volume setting. Making it ideal to connect a visualiser to as it will always show the signal that is being fed into the amp.

    Eventually I plan to make a daughter board that will connect to the MAX connector and allow it to maintain the VU output functionality while still providing a custom amplifier option. Mostly the thinking is that this allows connection of a more powerful amplifier if you need it.

    Bug Fix

    In 1.2 the settings menu would sometime keep the last square bracket from the saturation setting when using the RGB display.

  • Firmware Update V1.2.2

    smartroad09/25/2019 at 08:26 0 comments

    Now that I have the RGB backpack for the RGB backlight LCD I have updated the firmware to take advantage of it.

    This new firmware will auto detect if the RGB backpack is connected and if it is detected it will allow additional options in the new Setup menu. This menu (reached by holding the power button down for two seconds) opens to show the current firmware version installed. The multi-control is then used to navigate the other options. If the RGB backpack is detected it will allow you to change the colour of the backlight (16 options, all with amazing names...), the brightness and the saturation level. Technically this allows for about 400 different colours and shades, although in practise there are many that will look very similar! I am considering using a gamma correction for the brightness and saturation as it is linear now which doesn't always look best on our eyes.

    The backlight can be set  to dim/turn off after a period of not being used, options from 1 minute to 30 minutes. If the RGB LCD is used then it will dim the display to 50% of the current brightness settings. Should the LCD be a standard single colour, the backlight will be turned off.

    In the next update I am looking to add the ability to not need the Adafruit amplifier so you can use it or any other amplifier you want should you want more power. To maintain the full feature set I am currently designing a board that will sit between the controller and amp (where the Adafruit amp is connected) to provide the volume control before the amplifier. However the system will be able to run without it, by using the volume control of the TDA7439DS chip, but the VU Meter output would scale with volume rendering it useless. Hopefully I will be able to implement an automatic detection system, like I have for the RGB backlight, so that it doesn't matter which option you want, it should just work out the best way to operate.

  • Updated files

    smartroad08/19/2019 at 16:01 0 comments

    I have split out the files into separate zip's, saves downloading one file just to get the Arduino code (for example). I haven't included gerber files, mostly because they can easily be generated, however would they be useful?

    The electronics zip file now has the 3 circuits to be able to build the amplifier. My next thing is to write a BOM for easier ordering as the circuit diagrams don't show the additional parts needed (RCA connectors, rotary switch etc).

  • Initial Upload - Changing to KiCad

    smartroad08/18/2019 at 15:59 0 comments

    This is the initial upload of all the files for making the amplifier. I recently made the transition from Eagle (which I made the prototypes on) to KiCad so currently the only circuit and PCB available is the main IO and tone board. Over the next week or so I will add in the circuits and PCBs for the Arduino controller and the input buttons. Please be aware: at the current time I have not had these KiCad version made so while they should work there may well be error's creeping in.

    I think I have included everything in the zip file. There are the 3D files for printing. I have included the STL files and some UNTESTED 3MF files for my new Prusa MK3S. The photos you see in the main listing are from my old printer. This is a long print but I think it looks great. Also included are 2 SVG files for the front and rear panels. I had these printed on vinyl (the green lcd picture) and I think they look great, although the blue lcd shows it printed on sticky paper which works just as well. For the feet I used 12x5mm rubber feet.

    The Arduino program in included as well, there are several support libraries needed to go along with the main program. I wrote a small manual on using the amp, assuming that you use the same case as I have of course! At the back it lists the libraries that are needed (I think they are all installable from the Arduino library manager).

    I hope to maybe sell these as a kit, would that be of interest to anyone? The main chip is the only SMT part, it is easy to solder with some extra flux but I would offer to solder it first for the kit.

    Please have a look, I welcome any constructive feedback!

View all 5 project logs

Enjoy this project?



desoto100 wrote 01/03/2020 at 13:19 point

Hi, I have a question, can you share your arduino libraries ?

  Are you sure? yes | no

smartroad wrote 01/13/2020 at 08:26 point

Over the next few days I plan to release v1.3.x of the firmware. I'll include the LiquidCrystal library as well as I lightly modified the original to allow custom characters to be stored in program space.

I have also updated the operation manual to show how to get into the new settings menu and the options in it.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates