ADC转换需要写入PCF8591三个字节:
(1)0x90,器件地址及写控制位;
(2)0x01光敏电阻(0x03电位器),选择输入控制位;
(3)0x91,器件地址及读控制位;
固定地址部分为 ‘1001’,
可编程地址部分为A2、A1、A0为‘000’;
地址+读= 1001 0001 即‘0x91’;
地址+写= 1001 0000 即‘0x90’;
光敏电阻接AIN1 0x01
Rb2电位器接AIN3 0x03
主要分两步
第一步:adc初始化 adc_init()
void adc_init(uint8 ch) //ch为0x01时光敏电阻,ch为0x03时Rb2电位器
{
IIC_Start();
IIC_SendByte(0x90); // 地址+写
IIC_WaitAck();
IIC_SendByte(ch); //写入选择输入控制位;
IIC_WaitAck();
IIC_Stop();
}
第二步:读取ADC转换值 uint8 get_adc()
uint8 get_adc()
{
uint8 dat;
IIC_Start();
IIC_SendByte(0x91); // 地址+读
IIC_WaitAck();
dat=IIC_RecByte(); //读取转换值
IIC_Ack(0);
IIC_Stop();
return dat;
}
最后可以加一个DAC转换 void adc_set(uint8 dat)
DAC转换需要写入PCF8591三个字节:
(1)0x90,器件地址及写控制位;
(2)0x40,DAC输出模式;
(3)dat,输入要转换的数据(0~255);
模拟输出量Vout= VREF/255*dat; (VREF为参考电压mv)
void adc_set(uint8 dat)
{
IIC_Start();
IIC_SendByte(0x90); // 地址+写
IIC_WaitAck();
IIC_SendByte(0x40);// DAC输出模式
IIC_WaitAck();
IIC_SendByte(dat); ;//DAC写入数据
IIC_WaitAck();
IIC_Stop();
}
工程模板:https://download.youkuaiyun.com/download/qq_41676952/11126460