【第十四届蓝桥杯单片机组】学习笔记(5):PCF8591( AD/DA芯片)

概述

在这里插入图片描述

  • 芯片通信方式: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总线))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值