Skip to main content

Simple I2S stereo decoder with amplifier

In this project, we build a simple I2S stereo decoder with an amplifier. To decode I2S data we use Princeton Technologies PT8211 16bit DAC. KA2206 audio power amplifier is used as the driver stage of this system.

The prototype version of I2S stereo decoder

Structure of this I2S amplifier is self-explanatory from the schematic. We select PT8211 and KA2206 combination due to lower cost and availability. Unfortunately, PT8211 DIP package is not available in the local market and we use SO package in our prototype. We design PCB for the DIP packages, and therefore we solder PT8211 SO package to PCB using "SO8 to DIP8" converter.

We design this system to work with 9V DC power source but at the prototyping stages, we noticed that it works well with lower DC voltage such as 5V. For the output use any 8Ω or 4Ω (5W or higher rated) full range speaker pair. We test this with 8Ω 8W oval speakers which are commonly found on televisions.


PT8211 test setup with Raspberry Pi 3

Technically this project should work with any 3.3V I2S bus. We test this with Raspberry Pi 3 I2S bus and it gives us excellent results. Due to different timing format of the PT8211 DAC, we use custom device tree overlay for this audio interface. The complete configuration details for Raspbian Stretch is described below:
  1. Connect I2S decoder with Raspberry Pi using the following mapping: 
J1 pin-out Description Raspberry Pi header pin
1 GND 6
2 DIN 40
3 WS 35
4 BCK 12
  1. To install soft-volume control and to perform other system configurations use Adafruit MAX98357 installation script:  
curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/i2samp.sh | bash
  1. Copy "generic-lj.dtbo" file to "/boot/overlays" directory.
  2. Open "/boot/config.txt" file and comment the "dtoverlay=i2s-mmap" line and add "dtoverlay=generic-lj" to a new line. After the above modifications dtoverlay section of the file looks like this:
dtoverlay=hifiberry-dac

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
#dtoverlay=i2s-mmap
dtoverlay=generic-lj

  1. Restart the Raspberry Pi, and now Raspbian is ready to use this new I2S decoder.
  2. First, test the system with simple audio formats like wave files using aplay command. For example:
 sudo aplay /usr/share/scratch/Media/Sounds/Vocals/Singer2.wav
  1.  To play MP3 files use mpg123.
To adjust the volume use alsamixer or volume control available at the graphical desktop.

If KA2206 is not available, or hard to find, use TEA2025 or TA7769 ICs, those chips are direct substitutes for KA2206 AF power amplifier.

The audio quality of this decoder is impressive but do not compare its audio quality with a high-end audio system or with high-resolution DAC based sound cards. As a summery, this DAC gives superb results for its price and simplicity.

Schematic and PCB design of this project are available to download at google drive.

Comments

Popular posts from this blog

Enable WebRTC on QtWebEngine for Raspberry Pi 3

WebRTC is a web technology to enable peer to peer communication in real-time. It mainly uses to create video conferencing and chat applications using web browsers. In this post, we describe how to enable this technology in QtWebEngine on Raspberry Pi 3 platform.

QtWebEngine is an embedded browser component which comes with the Qt framework. This component is based on Google Chromium browser and it supports most of the Chromium features including WebRTC. In PC, WebRTC applications run smoothly on QtWebEngine component. But in Raspberry Pi platform situation is different and none of the WebRTC application is work with the QtWebEngine. The only thing which we can see is a black box in an HTML5 video tag area. At the time of writing this problem exists in Qt version 5.6, 5.7 and 5.8.

BMP180 based USB atmospheric pressure monitor

We initially developed this USB atmospheric pressure monitor to study some operating characteristics of Bosch BMP180 sensor. BMP180 is a low-cost sensor for measuring barometric pressure and temperature. According to the datasheet this sensor can use to measure pressure ranging between 300hPa to 1100hPa. This sensor is introduced a couple of years back but still, it is popular due to lower cost and simplicity of its interface.


We did this unit to test the BMP180 sensor more accurately and to study its behaviors. This unit is based on PIC18F2550 microcontroller and the main reason to select this MCU is because of its built-in USB 2.0 interface.


To display sensor calibration data and it’s readings we did small windows application. This application display and plot temperature and pressure readings captured from the BMP180 sensor.

This unit is programmed to work as a USB HID device and no special device driver is required to use this device. We test this unit in Windows 10 environment.

Programmable light controller

The main objective of this project is to design a maintenance free and low-cost light which automatically turns on and off at the predetermined time of the day.

To meet the above requirement I designed this controller using ATmega8 MCU and DS1307 RTC. The driver stage of this light controller is intended to work with commonly available 7W LED modules.


The core component of this programmable light is ATmega8 low power CMOS microcontroller. The main reason to select this microcontroller is it’s lower cost and higher availability. Except for the above two reasons this microcontroller also bundled with a rich set of peripherals which including 23 GPIOs, 3 independent timers, Two-wire serial interface, EEPROM, etc.

Apart from ATmega8 microcontroller, this system uses DS1307 real time clock to maintain system time. Like ATmega8, DS1307 is also a very popular RTC in the market.

This controller is designed to work with a 24V DC power supply. The main reason to select 24V is that most of the…