(十)IIC总线-PCF8591-ADC/DAC

news2024/11/16 0:29:03

文章目录

  • IIC总线篇
    • 起始,终止信号
    • 应答信号
    • 发送,读取数据
    • IIC通讯规则
  • PCF8591-ADC-DAC篇
    • 特性
    • 一般说明
    • 地址
    • Control byte(控制字)
    • 简单了解一下DAC电阻分隔链
    • 应用为王
      • DAC的应用
      • ADC的应用
        • ADC采集特点
        • ADC读模式
      • ADC现象演示
      • DAC现象演示


IIC总线篇

IIC底层驱动资源包

起始,终止信号

在这里插入图片描述
在这里插入图片描述

说人话:在SCL保持高电平的时候。SDA从电平跳变到电平就是起始信号,从电平跳变到电平

void IIC_Start()
{
	sda = 1;
	scl = 1;
	_nop_();
	sda = 0;
	_nop_();
}
void IIC_Stop()
{
	sda = 0;
	scl = 1;
	_nop_();
	sda = 1;
	_nop_();
}

应答信号

在这里插入图片描述

发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

char IIC_ACK()
{
	char flag;
	sda = 1;//在时钟脉冲9期间 释放数据线
	_nop_();
	scl = 1;
	_nop_();
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	
	return flag;
}

发送,读取数据

在这里插入图片描述
说人话:在SCL为高电平期间数据不可以变化,在SCL为低电平期间数据才可以变化

发送时序:在这里插入图片描述

void IIC_Send_Byte(char dataSend)
{
	int i;
	
	for(i = 0;i<8;i++){
		scl = 0;//scl拉低,让sda做好数据准备
		sda = dataSend & 0x80;//1000 0000获得dataSend的最高位,给sda
		_nop_();//发送数据建立时间
		scl = 1;//scl拉高开始发送
		_nop_();//数据发送时间
		scl = 0;//发送完毕拉低
		_nop_();//
		dataSend = dataSend << 1;
	}
}

读取数据

unsigned char IIC_Read_Byte(char dataRead)
{
	unsigned char dataRead;
	unsigned char i;
	for(i=0;i<8;i++){   
		scl = 1;//scl拉高,准备去读数据
		_nop_();//读取时间
		dataRead <<= 1;//读取进来数据
		if(dataRead) //判断读的是1吗?	
			dataRead |= 0x01;
		scl = 0;	//读取完毕 拉低
		_nop_();
	}
	return dataRead;    
}

IIC通讯规则

在这里插入图片描述

在写模式下,通过发送,下一个数据传输的停止条件或开始条件来终止数据传输。
我的理解是:在写完地址,和控制字以后,不必IIC_Stop,可以直接IIC_Start,写其他的指令

PCF8591-ADC-DAC篇

以下内容全部来自芯片数据手册节选 以及 个人理解总结

特性

重点黄色
在这里插入图片描述
说人话:
1.通过I2C总线串行输入/输出
2.地址由3个硬件地址引脚组成
3.采样速率取决于I2C 总线速度
4.4 个模拟输入可编程为单端或差分输入
5.自动增量通道选择
6.模拟电压范围:VSS~VDD

一般说明

在这里插入图片描述
说人话:
1.地址引脚A0、A1和A2
2.允许使用最多8个连接到i2c总线的设备,
3.通过两行双向I2c总线串行传输。
4.该设备的功能包括模拟输入多路复用、片上跟踪和保持功能、8位模数转换和8位数模转换。

地址

在这里插入图片描述
结合CT107D原理图:
在这里插入图片描述
地址 写指令:0x90,读指令:0x91;

地址部分说明:
在这里插入图片描述
说人话:
1.IIC主设备,通过IIC总线必须发送一个有效的地址来激活设备;
2.有效的地址由固定和可编程部分组成;
3.可编程部分必须根据地址引脚A0,A1,A2进行设置;
4.地址指令,必须是启动条件后的第一个字节进行发送
5。地址指令的最后一位也就是(R/W)设置数据传输的方向是读还是写;

Control byte(控制字)

在这里插入图片描述
说人话:
第6位:是否使能DAC,1-开启DAC输出功能 0-不开启
第5,4位:选择ADC输入采取什么样的方式,默认四个单端输入(00)
第3位:ADC通道是否要开启自动增加 1-自动增加 0-不自动增加
第2,1位:选择采集的ADC通道

简单了解一下DAC电阻分隔链

在这里插入图片描述

说人话:通过控制寄存器D7-D0位 进而 控制256个选择开关,达到控制电阻分压,进而输出对应的电压
比如: D7-D1全赋值 1,则就输出5v电压;全赋0,就是输出0v
对应关系就是:0v-5v 对应 0x00-0xff

应用为王

DAC的应用

本身就是一路写到底模式,不必要注意IIC通讯规则

在这里插入图片描述

void DacOut(u8 val)
{
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(0x40);
	I2CWaitAck();	
	I2CSendByte(val);
	I2CWaitAck();	
	I2CStop();
}

ADC的应用

ADC采集特点

在这里插入图片描述
说人话:就是开启一次读指令,A/D就一直开始周期性转换了

ADC读模式

要结合博文开头的IIC通讯规则
因为要先写地址,再写控制字,再写地址(涵盖读指令)

(顺序就是 ADDRESS(写)->contrl word->ADDRESS(读))

个人理解:前面介绍到iic_start后面必须写ADDRESS指令,而我发完control word 必须要再次启动iic_start,才能去写ADDRESS(读),又因为本身就在写模式,再写完control word 不需要iic_stop,直接iic_start即可

注意这里写通道的时候写0x4~(为了和DAC功能同时作用)

步骤:启动->地址(写指令的)->WaitACK->控制字(包含选哪个通道)->WaitAck->再次启动->地址(读指令的)->WaitAck->读数值->发送应答->停止总线

这里测的是电位器通道是0x43,光敏是0x01

u8 ReadAdc(u8 ch)
{
	u8 tmp ;
	
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(ch);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0x91);	
	I2CWaitAck();
	tmp = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	
	return tmp;
}

ADC现象演示

(十)IIC总线-PCF8591-ADC/DAC

DAC现象演示

自行用电压表测量



----- 如有错误欢迎大家批评指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1376922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、Stm32学习-USART-中断与接收数据包

1.通信接口 全双工就是数据的收和发可以同时进行&#xff1b;半双工就是数据的收和发不能同时进行。 异步时钟是设备双方需要约定对应的波特率&#xff1b;同步时钟是设备双方有一根时钟线&#xff0c;发送或接收数据是根据这根时钟线来的。 单端电平是需要共GND&#xff1b;…

uniapp 打包成 apk(原生APP-云打包)免费

修改APP配置 根据需求&#xff0c;修改 manifest.json 配置&#xff0c;常见的修改有&#xff1a; 应用名称&#xff0c;应用版本名称&#xff0c;应用版本号 升级版本时&#xff0c;应用版本名称和应用版本号必须高于上一版的值 应用图标 点浏览选择png格式的图片后&#x…

【VPN技术】简述几种常见VPN技术并比较其异同点

VPN技术是一种可以在公共网络上建立加密通道的技术&#xff0c;通过这种技术可以使远程用户访问公司内部网络资源时&#xff0c;实现安全的连接和数据传输。 下面以四种常见的VPN技术&#xff0c;分别介绍各自的特点和适用场景&#xff0c;然后进行异同点的比较。 PPTP&#x…

微信私域,如何实现高效回复客户消息?

随着微信用户数量的增加&#xff0c;人们的需求也越来越多。其中有一项就是全天候及时回复消息&#xff0c;不让好友等待。当企业拥有多个微信号进行私域流量管理时&#xff0c;如何做到及时回复客户消息呢&#xff1f; 下面给大家分享高效回复客户消息的秘诀&#xff0c;帮助提…

highlight.js 实现搜索关键词高亮效果 ,显示匹配数量及切换显示功能

先看效果&#xff1a; 更新&#xff1a;增加切换显示 折腾了老半天&#xff0c;记录一下 注意事项都写注释了 代码&#xff1a; <template><div class"absolute-lt wh-full overflow-hidden p-10"><div style"width: 200px"><el-…

研究了Web版Photoshop,提升自己=提升价值

Adobe 发布了Web版 Photoshop&#x1f517;&#xff0c;它是使用 WebAssembly、web components、P3 颜色等 Web 技术构建的。本文就来研究一下网页版 Photoshop 上有趣又有用的 CSS 知识&#xff01; Photoshop 旧 Logo 首先&#xff0c;在浏览器控制台中使用了 Photoshop 的 …

【数字人】9、DiffTalk | 使用扩散模型基于 audio-driven+对应人物视频 合成说话头(CVPR2023)

论文&#xff1a;DiffTalk: Crafting Diffusion Models for Generalized Audio-Driven Portraits Animation 代码&#xff1a;https://sstzal.github.io/DiffTalk/ 出处&#xff1a;CVPR2023 特点&#xff1a;需要音频对应人物的视频来合成新的说话头视频&#xff0c;嘴部抖…

基于python的Hurst计算预测未来发展趋势(长时序栅格影像)

1.Hurst指数反映了时间序列长期记忆性的程度&#xff0c;即过去的信息对未来的影响程度。Hurst指数的取值范围为0到1之间&#xff0c;当Hurst指数等于0.5时&#xff0c;时间序列被认为是一种随机漫步&#xff0c;即具有随机性&#xff1b;当Hurst指数大于0.5时&#xff0c;时间…

JAVA基础学习笔记-day17-反射

JAVA基础学习笔记-day17-反射 1. 反射(Reflection)的概念1.1 反射的出现背景1.2 反射概述1.3 Java反射机制研究及应用1.4 反射相关的主要API1.5 反射的优缺点 2. 理解Class类并获取Class实例2.1 理解Class2.1.1 理论上2.1.2 内存结构上 2.2 获取Class类的实例(四种方法)2.3 哪些…

【MySQL】本地创建MySQL数据库详解

文章目录 下载MySQL安装重置密码本地连接 下载MySQL 下载网址&#xff1a;https://dev.mysql.com/downloads/mysql/ 安装 将下载好的压缩包解压到D盘。 在解压好的文件夹中创建my.ini文件。 将以下代码复制粘贴到创建好的my.ini文件中。注意修改文件路径。 [mysqld] #设置…

重生奇迹MU装备升级材料的获取

在重生奇迹MU中&#xff0c;装备升级需要使用各种材料&#xff0c;包括经验章、神秘石、宝石、元素石等。以下是各种材料的获取方法。 经验章&#xff1a;经验章是装备升级的基础材料&#xff0c;可以通过打怪掉落、任务奖励、商城购买等方式获得。建议玩家们多参加游戏中的活…

Python——python练习题

1.小明身高1.75&#xff0c;体重80.5kg。请根据BMI公式&#xff08;体重除以身高的平方&#xff09;帮小明计算他的BMI指数&#xff0c;并根据BMI指数&#xff1a; 低于18.5&#xff1a;过轻 18.5-25&#xff1a;正常 25-28&#xff1a;过重 28-32&#xff1a;肥胖 高于32&…

(Arcgis)matlab编程批量处理hdf4格式转换为tif格式

国家青藏高原科学数据中心 中国区域1km无缝地表温度数据集&#xff08;2002-2020&#xff09; 此代码仅用于该数据集处理 版本&#xff1a;arcgis10.2 matlab2020 参考&#xff1a;MATLAB hdf(h5)文件转成tif图片格式&#xff08;批量处理&#xff09; 此代码仅用于该数据集处…

SecLists:安全测试人员的必备手册 | 开源日报 No.144

danielmiessler/SecLists Stars: 50.9k License: MIT SecLists 是安全测试人员的伴侣&#xff0c;它是一个收集了多种类型列表的项目&#xff0c;用于安全评估。这些列表包括用户名、密码、URL、敏感数据模式、模糊负载、Web shell 等。其目标是使安全测试人员能够将该存储库拉…

SV-9001 壁挂式网络采播终端

SV-9001 壁挂式网络采播终端 一、描述 SV-9001是深圳锐科达电子有限公司的一款壁挂式网络采播终端&#xff0c;具有10/100M以太网接口&#xff0c;配置一路线路输入和一组麦克风输入&#xff0c;可以直接连接音源输出设备或麦克风&#xff0c;将采集音源编码后发送至网络播放终…

腾讯云COS桶文件上传下载工具类

1&#xff0c;申请key和密钥 2&#xff0c;引入依赖 <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.24</version></dependency>3&#xff0c;工具类 package com.example.activi…

跨境商城系统如何开发代购商城、国际物流、一件代发等功能?

跨境商城系统的开发涉及到多个方面&#xff0c;其中代购商城、国际物流和一件代发等功能是其中的重要组成部分。本文将详细介绍如何开发这些功能&#xff0c;以帮助跨境商城系统更好地满足市场需求。 一、代购商城的开发 代购商城是跨境商城系统中的重要功能之一&#xff0c;它…

怎么将文件批量重命名为不同名称?

怎么将文件批量重命名为不同名称&#xff1f;有许多情况下可以考虑对文件进行批量重命名为不同名称&#xff0c;文件分类和整理&#xff1a;当您需要对一组文件进行分类、整理或重新组织时&#xff0c;可以考虑将它们批量重命名为不同的名称。这有助于更好地组织文件并使其更易…

【JaveWeb教程】(22) MySQL数据库开发之多表查询:内连接、外连接、子查询 详细代码示例讲解(最全面)

目录 数据库开发-MySQL1. 多表查询1.1 概述1.1.1 数据准备1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 1.5 案例 数据库开发-MySQL 1. 多表查询 1.1 概述 1.1.1 数据准备 SQL脚本&#xff…

品牌出海新篇章:DTC营销与红人矩阵的完美结合

随着全球市场的竞争日益激烈&#xff0c;品牌在出海过程中面临着前所未有的挑战。传统的销售渠道逐渐显得滞后&#xff0c;DTC模式正成为品牌开拓国际市场的新趋势。在这一趋势中&#xff0c;结合红人矩阵的DTC营销策略备受关注&#xff0c;为品牌打开了一扇通向全球市场的大门…