pcf8951
原理图
在一个完整的单片机系统中, A/D 转换芯片往往是必不可少的。在与 CPU 的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 PCF8591 是具有 I2C 总线接口的 8 位 A/D 及 D/A 转
换器,有 4 路 A/D 转换输入, 1 路 D/A 模拟输出。
PCF8591 采用典型的 I2C 总线接口器件寻址方法,即总线地址由器件地址、引脚地址和方向
位组成。飞利浦公司规定 A/D 器件地址为 1001。引脚地址为 A2、 A1、 A0,其值由用户选择,因
此 I2C 系统中最多可接 8 个具有 I2C 总线接口的 A/D 器件。地址的最后一位为方向位 R/W,当主
控器对 A/D 器件进行读操作时为 1,进行写操作时为 0。总线操作时,由器件地址、引脚地址和
方向位组成的从地址为主控器发送的第一字节。
控制字节用于实现器件的各种功能,如模拟信号由哪几个通道输入等。控制字节存放在控制
寄存器中,总线操作时为主控器发送的第二字节。
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
0 | x | x | x | 0 | x | x | x |
D1和D0为AD通道编号
D1 | D0 | 对应通道 |
---|---|---|
0 | 0 | 通道0 |
0 | 1 | 通道1 |
1 | 0 | 通道2 |
1 | 1 | 通道3 |
D2 是自动增益选择(1 有效);
D5 和 D4 是模拟量输入选择: 00—四路单端输入、 01—三路差分输入、 10—两两单端与一路差分、 11—两路差分;
D6 是模拟输出允许(1 有效)。
代码
/*************************************************
函数功能:AD输入
*************************************************/
uchar Pca_Adin(uchar pca)
{
uchar vlot;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x40|pca);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
vlot = IIC_RecByte();
IIC_SendAck(1);
IIC_Stop();
return vlot;
}
/*************************************************
函数功能:DA输出
*************************************************/
void Out_DAC(unsigned char Digital)
{
IIC_Start(); //打开iic
IIC_SendByte(0x90);器件寻址,方向上是写(写命令)
IIC_WaitAck(); //等待应答
IIC_SendByte(0x40); //打开输出通道
IIC_WaitAck(); //等待应答
IIC_SendByte(Digital);//输出值255 = 5v;
IIC_WaitAck();
IIC_Stop();
}