<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
PCF8591 是具有 I2C 总线接口的8位 A/D 及 D/A 转换器。有4路 AD 转换输入,1 路 D/A 模拟输出。这就是说,它既可以作 A/D 转换也可以作 D/A 转换。A/D 转换为逐次比较型。引脚图如图1所示。结构图如图2所示。电源电压典型值为5V。
AIN0~AIN3:模拟信号输入端。
A0~A3:引脚地址端。
VDD、VSS:电源端。(2.5~6V)
SDA、SCL:I2C 总线的数据线、时钟线。
OSC:外部时钟输入端,内部时钟输出端。
EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。
AGND:模拟信号地。
AOUT:D/A 转换输出端。
VREF:基准电源端。

下图为我所用的开发板原理图,可以看出AIN1接了一个光敏电阻,AIN3接了一个滑动变阻器,A0、A1、A2都接地,表示硬件地址为000

地址
I2C总线系统中的每一片PCF8591通过发送有效地址到该器件来激活。该地包括固定部分和可编程部分。固定部分为1001,不可以修改。可编程部分必须根据地址引脚 A0、A1和 A2 来设置。在 I2C总线协议中地址必须是起始条件后作为第一个字节发送。地址字节的最后一位是用于设置以后数据传输方向的读/写位,如果是0就是write,1就是read。

控制字节
控制字节用于实现器件的各种功能,如模拟信号由哪几个通道输入等。控制字节存放在控制寄存器中。总线操作时为主控器发送的第二字节。其格式如下所示:


其中:D1、D0 两位是 A/D 通道编号:00 通道 0,01 通道 1,10 通道 2,11 通道3
D2 自动增益选择(有效位为1)
D5、D4 模拟量输入选择:00为四路单数入、01 为三路差分输入、10 为单端与差分配合输入、11为模拟输出允许有效
D6 当系统为 A/D 转换时,模拟输出允许为 1,不允许为 0。
模拟量输入选择位取值由输入方式决定:四路单端输入时取 00,三路差分输入时取 01,单端与差分输入时取 10,二路差分输入时取 11。最低两位时通道编号位,当对 0通道的模拟信号进行 AD 转换时取 00,当对1通道的模拟信号进行 AD 转换时取 01,当对 2通道的模拟信号进行 AD 转换时取 10,当对3通道的模拟信号进行 AD 转换时取 11。
在进行数据操作时,首先是主控器发出起始信号,然后发出读寻址字节,被控器做出应答后,主控器从被控器读出第一个数据字节,主控器发出应答,主控器从被控器读出第二个数据字节,主控器发出应答…一直到主控器从被控器中读出第n个数据字节,主控器发出非应答信号,最后主控器发出停止信号。

A/D转换就是把模拟量转换为8位数字量,比如说0-5v的电压会平分位255份,AIN读取模拟量信号发送到比较器,DAC从255开始输出到比较器,255对应模拟量是5v,如果AIN采集到的是4v,比较器就会将结果错误发送到DAC,DAC就减1,即254,再次发送到比较器比较,这样不断循环,直到DAC输出值转换成模拟量无限接近4v,把数字量输出到IIC发送。
D/A转换就是从IIC读取一个数据,通过DAC数据积存器到DAC里面,把数字量转换成模拟量,再输出到AOUT引脚上。
A/D转换周期总是在发送一个有效的读模式地址到PCF8591后开始,就是说,在开始读后,读的是上一次转换的结果
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/142257.html