Created by Created August 19, 2018 Last modified August 22, 2018 Tags

Summary

A safe way to read true EuroRack signals (5V swing through 0) using a 3.3V ADC, such as the A0 pin on ESP8266 hardware.

Description

The aim of this circuit is to provide CV-IN functionality to ESP8266 boards with the minimum amount and diversity of components (3 resistor values, 1 diode value).

The left part is a voltage divider and the main component. If you just need the output without any protection, you can ditch the diodes.

Let's talk about protection. D7 is pretty straightforward. It prevents any negative voltage going into the ADC. Even at -12V, the error is about 200mV. A Schottky diode is used to prevent excessive voltage drops (a normal diode would give a 500mV to 700mV error!).

D9 is the same diode, biased, used for clipping the upper voltage range. A normal, biased diode or Zener diode would have a huge error, allowing up to 4.2V to flow is the input is overloaded at 12V. Using a biased Schottky diode prevents this. The maximum voltage at 12V is around 3.66V, completely fine.

I'm using a 24V swing for verification because that's what an idiot with access to an ER power supply can accidentally feed into this. Of course, you could replace the resistor with a trimpot in order to allow manual calibration of CV input scaling.

Of course, since it's not really a true offset, you need to map() ADC values. The quick and dirty way is to use CLs plot to CSV and save the result array as a constant mapping. But, in-circuit calibration should be done using a bench PSU :)

For the ESP-12F, set wifi_set_sleep_type(NONE_SLEEP_T); or you have a PRNG instead of an ADC :D