这种情况一开始以为是软件问题,但本身软件部分非常的简单
功能很单一,就是初始化并且产生锯齿波
#define PCFADDRESS 0x48#include "Wire.h"void InitPCF(){ Wire.begin();}void PCFOnce(){ for (int i=0; i<256; i+=15) { Wire.beginTransmission(PCFADDRESS); // wake up PCF8591 Wire.write(0x40); // control byte - turn on DAC (binary 1000000) Wire.write(i); // value to send to DAC Wire.endTransmission(); // end tranmission delay(10); } for (int i=255; i>=0; i-=1) { Wire.beginTransmission(PCFADDRESS); // wake up PCF8591 Wire.write(0x40); // control byte - turn on DAC (binary 1000000) Wire.write(i); // value to send to DAC Wire.endTransmission(); // end tranmission }}
但我测量出电压就仅仅只有3.87V,很奇怪,虽然输入电压不足5V但是也不应该那么低
后来别人提醒下,可能和负载有关系,因为本身并不是功率芯片,电流非常小(比如C51那种IO),所以随便加一个负载,就会有压降
因此,检查了下线路,14脚是Vref输入,没问题,但是Analog Out就是低压。最后发现是板载的LED灯,是直接驱动的。1K电阻,4.6V/1000Om ,差不多4.6ma的电流对这个芯片来说可能还是太大了。
解决方法就是:将与AO口并联的LED灯部分线路切断,我的方法是把背面最上面的1K电阻去除,测量发现电压恢复到正常水平了。