Mcp4725是I2C接口的12位DAC芯片。
因为采用I2C接口,所以管脚很少。
其中A0是用来设置地址的。我买到的是模块,
原理图:
对于DAC转换用集成电路,以前只用过DAC0832,DAC0832使用的是并口,8位的,因此管脚比较多。而MCP4725使用的是I2C,因此不需要那么多管脚了。实际上像这种使用I2C接口,我觉得制造转换位数更高的也应该更容易吧,通过协议解决位数,不用担心管脚增多的问题。以下是使用MCP4725模块在Arduino下开发的生成三角波的程序。程序逻辑很简单,按照指定频率将三角波采样点的数据转换位模拟值,这样就在模拟输出口输出了三角波。
/**************************************************************************/ /*! ESP8266 -------- MCP4725 =========================== D1(SCL) SCL D2(SDA) SDA */ /**************************************************************************/ #include <Wire.h> #include <Adafruit_MCP4725.h> Adafruit_MCP4725 dac; void setup(void) { Serial.begin(9600); Serial.println("Hello!"); // For Adafruit 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(0x60); Serial.println("Generating a triangle wave"); } void loop(void) { uint32_t counter; // Run through the full 12-bit scale for a triangle wave for (counter = 0; counter < 4095; counter++) { dac.setVoltage(counter, false, 500000); } for (counter = 4095; counter > 0; counter--) { dac.setVoltage(counter, false, 500000); } }
这里需要说明的是MCP4725的I2C访问地址问题。I2C地址与芯片的型号有关系,如果无法确定具体地址,可以使用I2C的扫描程序确认。我就是用I2CScan程序确定的。在原例程中使用的是0x62,而我买到的使用0x60。另外还需要安装Adafruit的MCP4725支持库。
利用示波器采集到的输出波形: