本文主要是介绍【第十四届蓝桥杯单片机组】学习笔记(5):PCF8591( AD/DA芯片),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 概述
- 功能字
- 芯片寻址
- 控制字
- A/D转换
- 单通道读取
- 多通道读取
概述
- 芯片通信方式:IIC
- AIN0,AIN1,AIN2,AIN3:(Analog signal In) 模拟信号输入
- AOUT:模拟信号输出
功能字
芯片寻址
这是在比赛提供的PCF8591芯片手册里的,描述了这个芯片的IIC地址
- fixed part:固定的部分,即高四位是不变的,说明改芯片的地址是根据其他引脚去确认的
- programmable part:可编程的部分,可以从电路原理图里看到A0,A1,A2是可以接受外部信号的,所以这部分是根据我们电路连接来确定0/1的
- R/W:即为常规的IIC通讯的读写地址,读为1,写为0;三大通信协议(二):IIC通信协议
所以综上我们可以得到,蓝桥杯板子里芯片的地址是:(1001 000X);写地址:0x90;读地址:0x91
控制字
芯片手册上的介绍:
The second byte sent to a PCF8591 device will be stored
in its control register and is required to control the device
function.
就是说,这个控制字是要写在芯片寄存器中的去设置芯片的功能;
- 高四位:用于使能模拟输出,并将模拟输入编程为单端或差分输入。
- 低四位:选择读取高四位所确定的通道,若将自动读取的flag置1,则通道号会自动递增
A/D转换
单通道读取
uint8_t AdcRead()//读取一次ADC的数值
{uint8_t _data;_data = IIC_RecByte();//IIC读一个字节,官方驱动会给出IIC_SendAck(0);//PCF8591读取一次就要给个回应,这样芯片才会采集下一个的值return _data;
}void main(void)
{uint8_t adc=0;UartInit();if(Pcf8591_Adc_Init(0x03)==1){printf("adc init success\r\n");}while (1){adc=AdcRead();printf("%bu\r\n",adc);}
}
多通道读取
在读取模拟信号的时候,我们可以看到第一次读出来的数据是128,那么我们就可以用这个标志去区分自动读取多通道时切换不同通道。
- 初始化的控制字:0000 01xx,即0x04也可
void main(void)
{uint8_t adc=0,channel=0;UartInit();while(Pcf8591_Adc_Init(0x04)!=1){printf("adc init eeror\r\n");Delay100ms();}while (1){adc=AdcRead();if(adc==128) channel=-1;else channel=(channel+1)%4;printf("channel is %bu,data is %bu\r\n",channel,adc);Delay500ms();}
}
PCF8591详解(蓝桥杯单片机模块(IIC总线))
这篇关于【第十四届蓝桥杯单片机组】学习笔记(5):PCF8591( AD/DA芯片)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!