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

文章目录

  • 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.mzph.cn/news/615645.shtml

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

相关文章

Spring Bean 是线程安全的吗?

如果你现在需要准备面试&#xff0c;可以关注我的公众号&#xff1a;”Tom聊架构“&#xff0c;回复暗号&#xff1a;”578“&#xff0c;领取一份我整理的50W字面试宝典&#xff0c;可以帮助你提高80%的面试通过率&#xff0c;价值很高&#xff01;&#xff01; Spring 框架中…

Linux文件和目录管理命令----unlink命令

unlink命令是Linux系统中一个用于删除文件的命令。与常见的rm命令不同,unlink命令不会将文件放入回收站,而是直接删除文件,并且不会提示用户确认操作,因此需要谨慎使用。 unlink命令的基本用法 unlink命令的基本语法如下: unlink 文件名其中,文件名 是要删除的文件的名…

使用Python爬取小红书笔记与评论(js注入方式获取x-s)

文章目录 1. 写在前面2. 分析加密入口3. 使用JS注入4. 爬虫工程化 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感…

Java使用Mybatis获取数据库Geometry

Java使用Mybatis获取数据库Geometry 方案A 使用ST_AsText(l.coordinates) 查询速度会慢因转换字符串数据大小会大 将几何对象转换为文本 mapper层 select ST_AsText(coordinates) as coordinates from table1domain 层 public class Entry implements Serializable {priva…

Cesium 实战 - 模型亮度调整,自定义着色器(CustomShader)完美解决模型太暗的问题

Cesium 实战 - 自定义视频标签展示视频 模型变暗问题以往通过光线解决问题模型变暗原理解决问题完整代码在线示例在 Cesium 项目中,添加模型是比较基础的功能,Cesium 支持 glTF(GBL) 格式。 在实际应用中,经常会遇到模型特别暗的情况,对比而言,其他三维环境添加是正常的…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov Stability in the sense of Lyapunov Assympototic Stability

怎么做微信秒活动_掀起购物狂潮,引爆品牌影响力

微信秒杀活动&#xff1a;掀起购物狂潮&#xff0c;引爆品牌影响力 在数字化时代&#xff0c;微信已经成为人们日常生活中不可或缺的一部分。作为中国最大的社交媒体平台&#xff0c;微信不仅为人们提供了便捷的通讯方式&#xff0c;还为商家提供了一个广阔的营销舞台。其中&a…

借助小redbook.item_get_video API:电商如何增强客户体验

随着电商市场的竞争日益激烈&#xff0c;客户体验成为了电商企业能否在市场中立足的关键因素之一。如何提高客户体验&#xff0c;增加用户黏性&#xff0c;成为电商企业亟待解决的问题。小redbook.item_get_video API作为一种强大的电商个性化营销工具&#xff0c;可以帮助电商…

基于SpringBoot的医护人员排班系统(代码+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目 希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一、研究背景 1.1 研究背景 随…

使用OTB数据集需要注意的一个问题

一般网上下载的otb100数据集只要98给序列&#xff0c;这样就会导致在跑数据集的时候出现错误。 需要进行修改&#xff0c;下面链接里面的是我在网上收集到的一个修改后的数据集&#xff0c;有100个视频序列。 otb100提取码&#xff1a;z4tp 除了上面这一步&#xff0c;有的还需…

JC/T 2080-2011 木铝复合门窗检测

木铝复合门窗是指由铝合金型材和实木型材镶装构成的木铝复合型材制作的门窗。 JC/T 2080-2011 木铝复合门窗检测项目 测试项目 测试标准 表面质量 JC/T 2080 装配质量 JC/T 2080 木材含水率 GB/T 1931 甲醛释放量 GB 18580 启闭力 GB/T 9158 反复启闭性能 JG/T 1…

Visual Studio 2017 “无法查找或打开PDB文件“ 解决方法

运行的时候提示无法查找或打开PDB文件 解决办法&#xff08;注意&#xff1a;必须使用管理员身份运行VS&#xff09; 第一步 打开调试窗口的选项 第二步 调试——>常规——>勾选启用源服务器支持 它会弹出警告窗口&#xff0c;点“是”即可 第三步 调试——>符号——…

记录误删除docker中极狐gitlab容器恢复过程

如题一次误操作导致删除了docker中极狐gitlab容器恢复过程 情况说明 创建容器时&#xff0c;我是用的是极狐官网推荐安装的步骤&#xff0c;具体按照官网步骤走就行 sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish …

华为OD机试 - 反射计数(Java JS Python C)

题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体经过 0 还是 1,都不影响其速度。 请计算并给出经过 t 时间单位后,物体经过 1 点的次数。 矩阵以左…

web网页首页布局

效果展示&#xff1a; html代码&#xff1a; <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <meta name"viewport" content&qu…

【C语言题解】 | 144. 二叉树的前序遍历

144. 二叉树的前序遍历 144. 二叉树的前序遍历代码 144. 二叉树的前序遍历 提示&#xff1a; 树中节点数目在范围 [0, 100] 内 函数原型&#xff1a; int* preorderTraversal(struct TreeNode* root, int* returnSize) {首先先观察一下这个函数原型&#xff0c;TreeNode* roo…

亿胜盈科HT4822 160mW免输出电容立体声耳机放大器

HT4822是一款无需输出隔直电容的立体声耳机放大器。支持差分和单端的模拟信号输入。 在3.6V供电下&#xff0c;THDN 1%&#xff0c;32ohm负载时能提供80mW的输出。其具有低至0.007%的THDN。 HT4822能在2.5V-6.0V电源条件下工作&#xff0c;具有过热保护和欠压保护等功能。 …

C语言与lua通过json对象交互

C语言调用Lua&#xff0c;传递一个JSON字符串&#xff0c;并将其解析为table&#xff0c;并返回一个JSON串给C语言。 在使用C语言调用Lua的过程中&#xff0c;有时需要向Lua传递一些数据&#xff0c;并从Lua接收返回结果。为了实现这个功能&#xff0c;我们可以借助第三方库&a…

记录一次数据中包含转义字符\引发的bug

后端返回给前端的数据是: { "bizObj": { "current": 1, "orders": [ ], "pages": 2, "records": [ { "from": "1d85b8a4bd33aaf99adc2e71ef02960e", …

deepin安装protobuf(3.22前版本可以使用此方法安装)

deepin安装protobuf 下载protobuf编译安装 下载protobuf protobuf版本&#xff1a;https://github.com/protocolbuffers/protobuf/releases 选择你要下载的版本我这里使用的是这个URL&#xff1a;https://github.com/protocolbuffers/protobuf/releases/v21.12 点击下载的版…