In Data Acquisition , Digital to analog conversion plays a crucial role. Vast number of devices and equipments are there which can be controlled by voltage variation from 0V to 10V. Aptinex DA1C010BI is the perfect solution for this. This single channel module is using I2C as its communication protocol and therefore major micro controllers or other hardware platforms can use this without much of hustle bustle.
General Features
- Channels : 1
- PCB Dimension : 2.5cm x 4.0cm
- PCB Color : Blue
- DAC : MCP4725
- Resolution : 12-bit
- Speed ; up toĀ 3.4Mbps
- Rail to Rail Operational Amplifier

DA1C010BI uses MCP4725 I2C DAC IC with on-board power boost and rail-to-rail signal amplifier, which takes 0-5V output of the DAC and covert the same to 0-10V DAC signal. This 0-10V output is programable with 12-bit resolution which will be having 4096 levels of voltage as output and with an accuracy of ±1%.
In addition it is possible to share two DACs of this type share the same bus and the I2C address can be changed by plugging or removing the I2C address jumper. If any design is needed more than two of these DAC modules, it is advised to use a I2C multiplexer controller and it will allow you to connect multiple of these DAC modules with one I2C master device.
Three modes of operation are supported.
- standard 100kbps
- fast 400kbps
- high speed 3.4Mbps
It is possible to interface this DAC module with following platforms .
- Raspberry Pi
- Arduino
- Onion Omega
- Beaglebone
- Windows,
- Particle Photon
Sample Codes
Download Sample | Download Library
#include <Wire.h> | |
#include āAptinex_MCP4725.hā | |
Aptinex_MCP4725 dac; | |
void setup(void) { | |
Serial.begin(115200); | |
Serial.println(ā***APTINEX MCP4725A DAC MODULE TEST CODE***ā); | |
// For Aptinex MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC) | |
// For MCP4725A0 the address is 0x60 or 0x61 | |
// For MCP4725A2 the address is 0x64 or 0x65 | |
dac.begin(0x62); | |
Serial.println(āFirst, Enter H and adjust pot for the maximum value (10v) ā); // measure DAC output voltage with multimeter | |
Serial.println(āEnter H for maximum valueā); // DAC output will be set to the maximum value | |
Serial.println(āEnter M for medium valueā); // DAC output will be set to the medium value | |
Serial.println(āEnter L for lowest valueā); // DAC output will be set to the lowest value | |
} | |
void loop(void) { | |
uint32_t counter; | |
char incomingByte; | |
if (Serial.available() > 0) { | |
// read the oldest byte in the serial buffer: | |
incomingByte = Serial.read(); | |
if (incomingByte == āHā) { | |
counter = 0xFFF; | |
dac.setVoltage(counter, false); | |
Serial.println(counter); | |
delay(100); | |
} | |
else if (incomingByte == āMā) { | |
counter = 0x800; | |
dac.setVoltage(counter, false); | |
Serial.println(counter); | |
delay(100); | |
} | |
else if (incomingByte == āLā) { | |
counter = 0x000; | |
dac.setVoltage(counter, false); | |
Serial.println(counter); | |
delay(100); | |
} | |
} | |
} |
from fcntl import ioctl | |
class AptinexDAC(object): | |
def __init__(self, address=0x62, bus=1): | |
self._addr = address | |
self._file = open(ā/dev/i2c-{0}ā.format(bus), ār+bā, buffering=0) | |
def disconnect(self): | |
self._file.close() | |
def set_voltage(self, value, persist=False): | |
if value > 4095: | |
value = 4095 | |
if value < 0: | |
value = 0 | |
if persist: | |
data[0] = 0x60 #EEPROM | |
else: | |
data[0] = 0x40 | |
data[1] = (value >> 4) & 0xFF | |
data[2] = (value << 4) & 0xFF | |
ioctl(self._file.fileno(), 0x0703, self._addr & 0x7F) | |
self._file.write(data) | |
dac = AptinexDAC() | |
dac.set_voltage(2096) |