TDM input/output interference (?) CS42448

lucian_dusk

Active member
Hello,
I'm having a bizarre issue with a custom audio board running a CS42448 codec.
After assembling the board, I got external audio on the TDM inputs running to USB audio just fine, then waveforms in the audio designer running to the TDM outputs as well.

I'm trying to combine them now and running into a weird issue: having all TDM input and output objects connected as in the sketch below causes a loud resonant feedback sound --- both through USB audio and TDM output. The sound stops as soon as I comment out the TDM input object (and associated patch cords).

A short audio sample recorded directly from USB audio

Strangely enough, I've narrowed down the issue to the first couple outlets of the TDM input. As soon as one of the inputs from the first even inputs of tdm1 is connected to mixer1, the feedback sound begins at a low amplitude. Connecting all four results in the full-blast sound as above.

Screen Shot 2021-12-09 at 17.27.18.jpg
This passes clean noise to the outputs.

Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioInputTDM            tdm1;           //xy=202,434
AudioSynthNoisePink      pink1;          //xy=312,214
AudioMixer4              mixer2;         //xy=349,478
AudioMixer4              mixer1;         //xy=350,371
AudioMixer4              mixer3;         //xy=496,426
AudioOutputUSB           usb1;           //xy=674,634
AudioOutputTDM           tdm2;           //xy=686,426

AudioConnection          patchCord1(tdm1, 0, mixer1, 0);
AudioConnection          patchCord2(tdm1, 2, mixer1, 1);
AudioConnection          patchCord3(tdm1, 4, mixer1, 2);
AudioConnection          patchCord4(tdm1, 6, mixer1, 3);
AudioConnection          patchCord5(tdm1, 8, mixer2, 0);
AudioConnection          patchCord6(tdm1, 10, mixer2, 1);
AudioConnection          patchCord7(tdm1, 12, mixer2, 2);
AudioConnection          patchCord8(tdm1, 14, mixer2, 3);

AudioConnection          patchCord9(pink1, 0, mixer3, 2);
AudioConnection          patchCord10(mixer2, 0, mixer3, 1);
AudioConnection          patchCord11(mixer1, 0, mixer3, 0);

AudioConnection          patchCord12(mixer3, 0, tdm2, 0);
AudioConnection          patchCord13(mixer3, 0, tdm2, 2);
AudioConnection          patchCord14(mixer3, 0, tdm2, 4);
AudioConnection          patchCord15(mixer3, 0, tdm2, 6);
AudioConnection          patchCord16(mixer3, 0, tdm2, 8);
AudioConnection          patchCord17(mixer3, 0, tdm2, 10);
AudioConnection          patchCord18(mixer3, 0, tdm2, 12);
AudioConnection          patchCord19(mixer3, 0, tdm2, 14);

AudioConnection          patchCord20(mixer3, 0, usb1, 0);
AudioConnection          patchCord21(mixer3, 0, usb1, 1);
AudioControlCS42448      cs42448_1;      //xy=369,681
// GUItool: end automatically generated code

void setup() {

  cs42448_1.enable();

  pink1.amplitude(1);
  
  cs42448_1.inputLevel(1.0);
  cs42448_1.volume(.25);

  AudioMemory(50);
}

void loop() {
}

Here is the relevant part of the schematic.
Screen Shot 2021-12-09 at 17.34.56.jpg

I now can't get any TDM inputs to pass thru to USB audio.
Has anyone run into this before? Any tips?
 
Never mind --- after confirming it was a hardware issue, I replaced the CS42448 chip and it all works like a charm.
 
Thanks, Paul. I'm sure this has been accomplished by now, but this fix means I have a functional Teensy 4.1-based breakout board for eurorack modular synth levels --- multichannel audio I/O and CV input. If it's of interest to anyone, I will gladly upload the PCB and schematic to github. I owe a lot to this forum!
 
Excellent. Any chance for photos or a quick video of it in action? I'm sure a lot of other modular synth folks would be interested. We can show it on the website, but at least 1 good photo or video is needed.
 
Lucian_dusk-I am curious how you handled the CV inputs. Did you have them go into the CS42448 or did you read them separately with the Teensy? If you input them to the CS42448, did you use a DC coupled Op Amp buffer?
 
Hi Neal,
I read the CV separately on a different analog input PCB that sums a panel potentiometer and the incoming CV signal.
5 channels are read and multiplexed on this PCB, the output of which is being read by one of the Teensy's analog read pins.
I've found this works well (this is an early prototype to test the concept and clearly has room for improvement).

Screen Shot 2021-12-12 at 10.13.19.jpg
Screen Shot 2021-12-12 at 10.14.54.jpg

In this style, I'm able to add extra functions to my testing system by adding additional modules.
20211212_101741.jpg
20211212_101820.jpg

Even with many of these boards active, the CV inputs can still be modulated at audio rate. I haven't benchmarked the maximum speed with all of them running simultaneously, but so far I've been impressed.
There is an annoying bug right now where jitter or noise will suddenly set one of the values at a high value at random every few minutes, but I think it can be ironed out by better power/grounding and software fixes.
 
Quick followup to ask if any more updates on this synth project? Even these early photos look pretty awesome. Should we show it on the main website blog?
 
Back
Top