目录前言1.PCF8591为ADC转换功能及其源代码DAC输出功能及其源代码2 .具体示例
前言
PCF8591通过IIC进行通信
本章内容与IIC通信相关的知识相关,所以在阅读之前,请阅读这篇文章IIC通信及AT24C02的使用
1.PCF8591是PCF8591为8位A/D和D/A转换器,通过I2C总线串行输入输出,还通过三个硬件地址引脚地址,对四个模拟输入通道、一个输出通道、一个三个地址引脚A0、A1和A2用于硬件编程地址。 蓝布里奇杯的模拟如下。
A0、A1、A2是地址引脚,通常有8种组合方式,最多可以连接8个PCF8591。
发送第一个字节:芯片的地址
在蓝桥杯中,由于A0、A1、A2接地,所以只有一个PCF8591,最后一个用于读写控制。
ADC转换功能及其源代码发送的第二个字节:芯片的基础设置
第7位)默认值为0; 6位) 1则为DA模式,0则为AD模式;
第5位、第4位:输出模式,默认为00; 第2位(默认为0 )自动增量位,一般可以不用想);
1位、零位:频道选择位;
选择哪个A/D通道端口,00对应通道0,01对应通道1,10对应通道2,11对应通道3。
首先进行写操作首先执行芯片寻址、0x90-写入操作,然后选择哪个A/D通道,0x01为AIN1。
voidwrite_ad(void ) {int i; IIC_Start (; IIC_sendbyte(0x90; IIC_WaitAck (; IIC_sendbyte(0x03; IIC_WaitAck (; IIC_Stop (; for(I=0; i1000; I; } 然后是读操作:
unsignedcharread_ad(void ) {unsigned char temp; IIC_Start (; IIC_sendbyte(0x91; IIC_WaitAck (; temp=IIC_RecByte (; IIC_ack(0; IIC_Stop (; 返回时间; IIC_Start (只有一个; 但是,发送的第一个字节先寻址芯片地址、0x91-读取操作,读取的结果temp换算为——temp*5/256=测定的模拟值。
DAC输出功能及其源代码发送第一个字节:保持芯片地址不变
的第二个字节:0x 40 -允许d/a转换(模拟输出)
第三个字节:发送要转换的数字量
void out _ DAC (unsignedchardigital ) {IIC_Start ); IIC_sendbyte(0x90; IIC_WaitAck (; IIC_sendbyte(0x40; IIC_WaitAck (; IIC_sendbyte(digital; IIC_WaitAck (; IIC_Stop (; }在输入的数字中255=5V,依此类推
注:读取AD值时,需要先初始化ADC,因为希望存在延迟,并且写入数字后不能立即读取AD
2 .模拟具体的例行蓝桥杯滑动变阻器的ADC转换,点击下载,取出代码: klqg