在以正弦函数方式使MCP4725生成正弦波的时候,要注意一点,就是转换值。对于12位的DAC,器最大处理值为2^12=4096,对正弦函数,其值得范围对应0~360度为0 →1→0→-1→0,而DAC转换不存在负数问题。因此需要把正弦波的值抬高到0以上,这样对正弦函数的输出值0 →1→0→-1→0,转换为1 →2→1→0→1。那么就不能使用4096这个值作为幅度处理,而只能使用2048。
程序代码如下:
/**************************************************************************/ /*! ESP8266 -------- MCP4725 =========================== D1(SCL) SCL D2(SDA) SDA */ /**************************************************************************/ #include <Wire.h> #include <Adafruit_MCP4725.h> Adafruit_MCP4725 dac; void setup(void) { Serial.begin(115200); Serial.println("Hello!"); dac.begin(0x60); Serial.println("Generating a sine wave"); } void loop(void) { int16_t i; for (i = 0; i < 360; i++) { //Serial.println(sin(2*3.1415926/360*i)); dac.setVoltage((int16_t)(2048 * (sin(2*3.1415926/360*i)+1)), false); } }
输出波形:
效果也很好。在上记代码中,采样点是以1度执行的,可根据自己的需要调整,非常方便,不比预先准备采样点数据。可见使用正弦函数,极大地简化了代码。