One expression pedal multiple devices

Status
Not open for further replies.

intergalatico

Well-known member
Hello Folks,

I want to build a single expression pedal that can control at least three different effect pedals. They are all expecting a TRS connection and a 10k pot works on all the three devices. I measured the voltage they are sending through the TRS cable and they are all close, but different:

Eventide H9: 2,12V
Strymon El Capistan: 3,3V
EHX Pitch Fork: 2,96V

Is possible to connect the output of my expression pedal in to the Analog Pin input from Teensy, read the values, translate to all the three expected Voltage and then send through three different Analog Pin outputs to the effect pedals? How about the ground? Can I use the Teensy ground here?

It does make sense, right? Or I will need to use a Digital Pot?

Is the principle of this device: https://missionengineering.com/shop.../multi-use-exp/expressionator/?v=3a52f3c22ed6

I really appreciate any help!

Thank you!

Cheers!
 
You can definitely read the expression pedal into the Teensy using the Analog In and and Analog GND connections. The TRS connection should probably be S - Sleeve = AGND, T - Tip = Signal (send to Analog Input pin), and R - Ring = 3.3V.

As for controlling the external pedals, a digital pot would most likely work, although you may be able to get away with something simpler.

Looking at the datasheet for the H9, it says on pg.25 that it can take voltage inputs from 0-3V. And it looks like your other pedals fall in that range as well. If you think you'll only be using pedals in that range and not 0-5V (which is more common for control voltage applications), then you could use the DAC output on the Teensy (x2 on the 3.5 and 3.6) and do one of the control pins using PWM. You'll have to filter the PWM using and R-C circuit, and this will mess up some of the linearity since you'll be adding a resistor to the output.

The other option is to pick up a small multichannel DAC chip, analog devices has loads of them, controllable over I2C and SPI. These will usually have selectable references (so you can set what your top value is, either 3.3V or 5V) as well as protected outputs in some cases. Also, they will be very low noise at up to 16 bits of resolution. Good luck!
 
Thank you so much!

I am sorry but I got pretty busy on the last weeks so I coldn't do anything. Next week I will have some free time and I will buy a dac mpc3208. Do you think it will suite my needs?

Thank you for any help!

Cheers
 
As a quick sanity check, you might first just try connecting a ground wire between all 3 of these devices. Do they still work properly? Is the sound good? Often connecting grounds of audio devices in ways they were designed to handle results in "ground loop" problems which can cause a hum or buzz or other bad sounds. Sometimes the noises depend on what you've doing, so be sure to listen carefully while actually using the gear.

Also test with the 3 grounds connected to whatever power supply will connect to Teensy's ground....

If that works, I'd go with one of 3 those e-pot chips (or one of the chips with 4 pots within).
 
Thank you all!

I am working hard on this thing and so far that is what I got:

- No Ground issues, I didn't notice any noise when the devices are On or OFF;
- A DAC works for me better then one e-pot. I am using two MCP4922;
- Instead of using a pot on the expression pedal I am using a Hall Sensor (SE022) and a Magnet;

I still have to work to calibrate and maybe do some curve on the the Hall Sensor, but what is really bugging me is that by playing my instrument I am noticing a little latency rocking the expression pedal. I do a lot of research and I am assuming that that is coming from the MCP4922 library that I am using.

Maybe some SPI configuration inside the library? I really hope that someone can have a look inside that library but that is something that I really don't think I can figure it out alone.

I am using Teensy 3.2 at 96MHz optimized.

The MCP4922 library is here: http://www.arduino-projekte.de/download.php?id=12
MCP4922 data sheet: http://ww1.microchip.com/downloads/en/DeviceDoc/22250A.pdf

Here is my code so far:
Code:
#include <AH_MCP4922.h>

//define AnalogOutput (MOSI_pin, SCK_pin, CS_pin, DAC_x, GAIN) 

// Chip 1
AH_MCP4922 AnalogOutput1(11,13,10,LOW,HIGH);     // DAC_A = LOW, DAC_B = High 
AH_MCP4922 AnalogOutput2(11,13,10,HIGH,HIGH);    // Gain 1x = HIGH, Gain 2x = LOW

// Chip 2
AH_MCP4922 AnalogOutput12(7,13,9,LOW,HIGH);
AH_MCP4922 AnalogOutput22(7,13,9,HIGH,HIGH);

#define hallSensorMin 261 // The Hall Sensor is not already definetly fixed. This helps to quick adapt the values when the sensor moves 
#define hallSensorMax 768

int hallSensor = 0;             // Raw hall sensor output
int hallSensorConstrain = 0;    // Constrain Hall Sensor Range
int expressionPedalValueOld = 0;
int expressionPedalValue = 0;
int expressionPedalValueH9 = 0; // For the Eventide H9 the Max Vout should be 3.2V, the other ones 5V

int Vout1 = 0;
int Vout2 = 0;
int Vout3 = 0;



void setup() {
  
  Serial.begin(9600);       //Init serial interface 
  Serial.println("Ready");        

}

void loop() {

hallSensor = analogRead(A6);
hallSensorConstrain = constrain(hallSensor, hallSensorMin, hallSensorMax); // The Hall sensor is reading only in beetwen those ranges
expressionPedalValue = map(hallSensorConstrain, hallSensorMin, hallSensorMax, 4095, 0); // max 5V Vref=5.14 Vcc= 5.15

expressionPedalValueH9 = map(hallSensor, hallSensorMin, hallSensorMax, 2550, 0); //max 3.2V

     if (expressionPedalValue != expressionPedalValueOld){
      AnalogOutput1.setValue(expressionPedalValue);
      AnalogOutput2.setValue(expressionPedalValue);
      AnalogOutput22.setValue(expressionPedalValueH9);
   }
        expressionPedalValueOld = expressionPedalValue;

delay(1);

// Print to the Monitor Serial:

Vout1 = map(expressionPedalValue, 4095, 0, 0, 514);    // Output in Volts (5.14V = 514)
Vout2 = map(expressionPedalValue, 4095, 0, 0, 514);    // Output in Volts (5.14V = 514)
Vout3 = map(expressionPedalValueH9, 2550, 0, 0, 320);  // Output in Volts (3.2V = 320)
  
  Serial.print("    Hall Sensor: "); 
  Serial.print(hallSensor);
  Serial.print("   Hall Sensor Constrain: ");  
  Serial.println(hallSensorConstrain);
  Serial.print("Vout1: "); 
  Serial.print(Vout1);
  Serial.print("   Vout2: "); 
  Serial.print(Vout2);
  Serial.print("   Vout3: "); 
  Serial.print(Vout3);

  
}

I really appreciate any help!

Cheers
 
Status
Not open for further replies.
Back
Top