这种情况一开始以为是软件问题,但本身软件部分非常的简单
功能很单一,就是初始化并且产生锯齿波
#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电阻去除,测量发现电压恢复到正常水平了。