Adding DAC Output to an ESP32-S3 #ESP32 @MrBananas
The ESP32-S3 microcontroller does not have a digital to analog converter onboard. atomic14.com uses a Pulse Density Modulated audio signal using Sigma Delta Modulation and recovers the audio signal using an RC low pass filter.
The example code from Espressif suggests using a timer to output each sample using the sigmadelta_set_duty (you could also just use plain old PWM as well). This does work for audio data, and I’ve got some simple sample code that will do it, but it’s not very efficient – we’re constantly interrupted by a timer to send out the next sample. There’s also quite a lot of code required if you want to stream samples out from some other source.
A much better way is to use the I2S peripheral which can also output PDM data.
This all works surprisingly well, you can drive headphones directly from the PDM signal and most analog amplifiers will take the combined stereo PDM signal and will have a low enough bandwidth that they’ll just work.
You can even just drive a speaker with a really simple half or full bridge and get reasonable audio out (though it may be quite noisy).
See the full method with circuit diagrams in the post here.
Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7:30pm ET! To join, head over to YouTube and check out the show’s live chat and our Discord!
Python for Microcontrollers – Adafruit Daily — Python on Microcontrollers Newsletter: A New Arduino MicroPython Package Manager, How-Tos and Much More! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi
EYE on NPI – Adafruit Daily — EYE on NPI Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey