I'm trying to use the MCP4725 DAC from Adafruit (https://www.adafruit.com/product/935) to output some waveforms over a frequency range up to about 50kHz. At the moment, I'm simply sending values to the DAC via the Wire library and through the DAC's onboard library. It appears that the values are only being sent at 7kHz. Is this due to the added weight of the libraries I'm using? Is there some way I can increase the transmission speed?

  • Consider using a Teensy 3 or a Due, with 2 built-in 12-bit DACs each Commented Mar 12, 2017 at 19:37

1 Answer 1


You cannot get 50kYz from a DAC running on I2C on an Arduino.

The maximum rate for I2C (if you select fast mode) is 400kbps. Setting the DAC takes three bytes plus start/stop/ack bits (total 29 bits).

At 400kbps that equates to (400000/29) 13793 settings per second.

Add to that the time taken to actually create and process the data, running the instructions to do everything, you can expect about half that - which is the 7kHz you're getting.

To get 50kHz from a DAC you really need a CODEC and run something like I2S, which you are never going to do on an Arduino.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.