PCF8591简单介绍
芯片的作用是ADDA转换,有16脚,其中AIN0~AIN3为模拟信号输入,A0~A3为芯片地址,SDA、SCL为I2C引脚,AOUT为DA输出端。
PCF8951的器件地址为1010A3A2A1A0(二进制),我买的芯片A0~A3都接GND,所以地址为0x90。
PCF8951使用方法
通过I2C通信读取数据和写入数据。
读取AD数据:发送第一个字节为器件地址,第二个字节为寄存器地址。然后再发送期间地址,此时读取数据即可读取出AD值。
写入DA数据:发送器件地址,发送寄存器地址,发送8位DA值。
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
D7:0
D6:模拟输出启动标志位(为1有效)。
D5&D4:模拟输入方式:00四路单端输入,01三鹿差分输入,10单端差分缓和输入,11两个差分输入。
D3:0
D2:自动增量标志位(为1有效)(开启时通道在AD转换完成自动递增)。
D1&D0:AD通道选择:00通道0,01通道1,10通道2,11通道3。
软件I2C代码部分
这里我使用STM32F103C8T6驱动该芯片,分别使用软件I2C和硬件I2C驱动该芯片,顺便了解两者区别。
MyI2C.h(软件I2C的代码)
void MyI2C_W_SCL(uint8_t BitValue)//封装函数,方便操作
{
GPIO_WriteBit(GPIOA, I2C_SCL, (BitAction)BitValue);//进行位操作
}
void MyI2C_W_SDA(uint8_t BitValue)//封装函数,方便操作
{
GPIO_WriteBit(GPIOA, I2C_SDA, (BitAction)BitValue);
}
uint8_t MyI2C_R_SDA(void)//封装函数,方便操作
{
uint8_t BitValue;
BitValue = GPIO_ReadInputDataBit(GPIOA, I2C_SDA);//位读取
return BitValue;
}
void MyI2C_In