Multiple ADCs

Hey everyone,

I've got some questions about the Arduino platform with regard to a project I'm working on. I'm designing a digital guitar interface, and in order to facilitate it I need to get each individual string's input into some software I'm writing. Each string has its own isolated pickup, so I'll have six analog lines I need to handle. Can the Arduino simultaneously implement 6 ADCs and pipe the data into a computer via USB? Could you steer me toward any resources to get me started?



first, for a project like that the Arduino might be a bit to tiny. A high performance MCU like XMOS would be better here. But for reading ADC: Just use 0...5 for the analog pin to use.


A couple of things to consider:

  1. While the Arduino does offer 6 Analog Channels, the ATmega328 only has a single A/D converter with an analog Mux in front of it. This is going to limit your effective sample rate.

  2. The limited memory of the ATmega328 makes it difficult to do real-time data acquisition. Multiple that by 6 and things don't get easier. For audio you might be looking to do 44khz or so. That's tough since the ATmegas only have 1-4k of RAM...

  3. The Arduino is a noisy environment.

It might make more sense to you an external A/D converter (or multiple converters) and just use the Arduino as your interface between the PC and the A/Ds. Or not put the Arduino into the equation...

As I sad, the Arduino would perhaps be to low power for that. You could of course get around almost all the things mentioned, like by using a sanguino instead of a normal Arduino, using an external ADC etc. but the best would perhaps be to use another MCU.


As I sad, the Arduino would perhaps be to low power for that

The “power” generalization is over- and mis-used in computing terms. When saying a platform isn’t “powerful enough” I prefer to say why. In the case of microcontroller there are generally specific constraints. For example, a 16MHz microcontroller is perfectly viable in this application. However, one with such limited RAM and ADC speed isn’t. How do those items factor into “power”? What about the number of I/O pins?

Maybe it is just me. I prefer to be specific to why the platform isn’t ideal instead of a gross oversimplification.

Can the Arduino simultaneously implement 6 ADCs and pipe the data into a computer via USB?

The simple answer is no. If you are talking about sampling the voltage from the pickup an an audio signal, you will struggle to do this with one pickup let alone 6. If you sample the signal at say 20kHz to give a top harmonic of 10KHz then assuming 8 bit samples you have 20,000 bytes to transfer to the PC every second. Each byte takes 8 bits + 1 start + 1 stop = 10 bits so your serial baud rate needs to be 200K baud. The fasted baud rate (on the monitor) is 115K baud. You would also struggle to be able to receive that much data on the PC without occasional hickups. Assume you wanted to have a better sample size than 8 bits, then the next up would be 16 bits. I know the built in converter is only 12 bits but sending two bits per sample is perhaps easier than sending two samples in three bytes. This doubles the data rate you need to send.

Now multiply that by six and you will see it is a non starter. Sorry