一、引脚解读
AOUT 芯片DA输出接口
AIN0 芯片模拟输入接口0
AIN1 芯片模拟输入接口1
AIN2 芯片模拟输入接口2
AIN3 芯片模拟输入接口3
SCL IIC串行时钟线
SDA IIC串行数据线
VDD 正电源电压
VSS 负电源电压
VREF 电压参考输入
AGND 模拟地
A0、A1、A2 可编程位器件地址
二、器件地址
4位固定位,3位可编程位,1位读写位。
三、控制字节
3.1 X1、X0
表示选择AD采集的通道
3.2 X2
是否自动变更采集通道
3.3 X4、X5
模拟输入的模式:
4通道单独输入;
通道0、1、2跟通道3比较后输入;
通道0、1单独输入,通道2跟通道3比较后输入;
通道0跟通道1比较后输入,通道2跟通道3比较后输入;
四、DAC模式
4.1 数据发送时序
如图所示,先发送控制字节,再发送数据字节;
4.2 DAC结果计算公式
uint8_t value = v * 255 / (VREF-VAGND);
4.3 stm32为例,输出dac模拟电压
int PCF8591SendByte(unsigned char value)
{
IIC_Start();
IIC_Send_Byte(ADDR_PCF8591<<1);
if(IIC_Wait_Ack() != 0){
//printf("wait ack error\r\n");
return -1;
}
IIC_Send_Byte(0x40);
if(IIC_Wait_Ack() != 0){
//printf("wait ack error\r\n");
return -1;
}
IIC_Send_Byte(value);
if(IIC_Wait_Ack() != 0){
//printf("wait ack error\r\n");
return -1;
}
IIC_Stop();
return 1;
}
void dacOut(float v)
{
uint8_t value = v * 255 / VBASE;
PCF8591SendByte(value);
}
五、ADC模式
5.1 数据发送时序
5.2 ADC结果计算公式
float v= value / 255.0 * (VREF-VAGND);
5.3 重要说明
1、ADC读取结果前必须已经发送控制字节,选择对应的ADC采集模式和采集通道。
2、IIC读取的第一个数据为上次测量的结果
5.4 stm32为例,读一次测量结果
int PCF8591ReadByte(unsigned char addr)
{
int value;
IIC_Start();
IIC_Send_Byte(ADDR_PCF8591<<1);
if(IIC_Wait_Ack() != 0){
//printf("wait ack error\r\n");
return -1;
}
IIC_Send_Byte(addr);
if(IIC_Wait_Ack() != 0){
//printf("wait ack error\r\n");
return -1;
}
IIC_Stop();
IIC_Start();
IIC_Send_Byte(0x91);
if(IIC_Wait_Ack() != 0){
//printf("wait ack error\r\n");
return -1;
}
Delay_ms(10);
value = IIC_Read_Byte(1); //上次测量的结果
value = IIC_Read_Byte(0);
IIC_Stop();
return value;
}
float adcReadV(char addr)
{
float v = -1;
int value;
value = PCF8591ReadByte(addr);
if(value != -1){
v= value / 255.0 * 5;
}
return v;
}