FPGA模块——IIC协议(读写PCF8591)

FPGA模块——IIC协议(读取PCF8591)

  • PCF8591/AT8591芯片
  • 对iic协议的使用

PCF8591/AT8591芯片

低功耗8位CMOS数据采集设备,4路模拟输入,1路模拟输出,分时多路复用,读取数据用串型iic总线接口,最大100khz。
在这里插入图片描述

控制字节(iic中写寄存器地址位8b)
这个芯片中是有自己要求的,但是也符合iic协议的时序。
在这里插入图片描述
stop之前最后一步:
写的8位数据就是DAC转换得到的电压值,
读的数据就是ADC转换得到的8位数据

对iic协议的使用

iic协议就看这个之前写的:链接: IIC协议模块

module pcf8591(//clock and resetinput                 clk        ,    // 时钟信号input                 rst_n      ,    // 复位信号//i2c interfaceoutput   reg          i2c_rh_wl  ,    // I2C读写控制信号output   reg          i2c_exec   ,    // I2C触发执行信号output   reg  [15:0]  i2c_addr   ,    // I2C器件内地址output   reg  [ 7:0]  i2c_data_w ,    // I2C要写的数据input         [ 7:0]  i2c_data_r ,    // I2C读出的数据input                 i2c_done   ,    // I2C一次操作完成//user interfaceoutput   reg  [19:0]  num             // 数码管要显示的数据
);//parameter
parameter    CONTORL_BYTE = 8'b0100_0001; // PCF8591的控制字
parameter    V_REF        = 12'd3300    ; // 3.3V放大1000倍,避免用小数//reg define
reg    [7:0]    da_data   ;               // DA数据
reg    [7:0]    ad_data   ;               // AD数据
reg    [3:0]    flow_cnt  ;               // 状态流控制
reg    [18:0]   wait_cnt  ;               // 计数等待//wire define
wire   [19:0]   num_t     ;               // 临时寄存的数据//*****************************************************
//**                    main code
//*****************************************************assign num_t = V_REF * ad_data ;//DA输出数据
always @(posedge clk or negedge rst_n) beginif(rst_n == 1'b0) beginda_data  <= 8'd0;endelse if(i2c_rh_wl == 1'b0 & i2c_done == 1'b1)beginif(da_data == 8'd255)da_data<= 8'd0;elseda_data<= da_data + 1'b1;end
end//AD输入数据处理
always @(posedge clk or negedge rst_n) beginif(rst_n == 1'b0) beginnum <= 20'd0;endelsenum <= num_t >> 4'd8;
end//AD、DA控制及采样
always @(posedge clk or negedge rst_n) beginif(rst_n == 1'b0) begini2c_exec <= 1'b0;i2c_rh_wl<= 1'b0;i2c_addr <= 8'd0;i2c_data_w <=  8'd0;flow_cnt   <=  4'd0;wait_cnt   <= 17'd0;endelse begini2c_exec <= 1'b0;case(flow_cnt)'d0: beginif(wait_cnt == 17'd100) beginwait_cnt<= 17'd0;flow_cnt<= flow_cnt + 1'b1;endelsewait_cnt<= wait_cnt + 1'b1;end//DA转换输出'd1: begini2c_exec  <= 1'b1;i2c_addr  <= CONTORL_BYTE;i2c_rh_wl <= 1'b0;i2c_data_w<= da_data;flow_cnt  <= flow_cnt + 1'b1;end'd2: beginif(i2c_done == 1'b1) beginflow_cnt<= flow_cnt + 1'b1;endend'd3: begin//每1秒变化0.1V,需33秒变化完,共256【0~255】次变化,故每次变化计数为://(33/256)*10^6 = 128906if(wait_cnt == 17'd128906) beginwait_cnt<= 17'd0;flow_cnt<= flow_cnt + 1'b1;endelsewait_cnt<= wait_cnt + 1'b1;end//AD转换输入'd4: begini2c_exec  <= 1'b1;i2c_addr  <= CONTORL_BYTE;i2c_rh_wl <= 1'b1;flow_cnt  <= flow_cnt + 1'b1;end'd5: beginif(i2c_done == 1'b1) beginad_data <= i2c_data_r;flow_cnt<= 4'd0;endenddefault: flow_cnt <= 4'd0;endcaseend
endendmodule

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

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

相关文章

2.5计划任务远程管理

2.5计划任务/远程管理 一、计划任务 1、计划任务概念解析 在Linux操作系统中&#xff0c;除了用户即时执行的命令操作以外&#xff0c;还可以配置在指定的时间、指定的日期 执行预先计划好的系统管理任务&#xff08;如定期备份、定期采集监测数据&#xff09;。RHEL6系统中…

Redis:Java客户端

前言 "在当今大数据和高并发的应用场景下&#xff0c;对于数据缓存和高效访问的需求日益增长。而Redis作为一款高性能的内存数据库&#xff0c;以其快速的读写能力和丰富的数据结构成为众多应用的首选。与此同时&#xff0c;Java作为广泛应用于企业级开发的编程语言&…

新安装win11,搜索框无法输入的问题

正确的做法是如下: 1首先进入win11系统&#xff0c;在搜索框中输入“ 控制面板 ”将其打开2在控制面板中找到“时间和语言“ 标题 再选择“ 语言和区域”, 标题 在显示的语言上面&#xff0c;点击省略号&#xff0c;进入语言选项 标题 在键盘处&#xff0c;删除不需要的输入法…

想面试前端工程师,必须掌握哪些知识和技能?【云驻共创】

在当今的数字化时代&#xff0c;前端工程师扮演着至关重要的角色。他们负责设计和开发用户界面&#xff0c;使得用户能够与应用程序或网站进行互动。为了找到最出色的前端工程师&#xff0c;你需要了解哪些技能和知识是必备的&#xff0c;同时也要掌握一些面试技巧和常见的面试…

Java 开源重试类 guava-retrying 使用案例

使用背景 需要重复尝试执行某些动作&#xff0c;guava-retrying 提供了成型的重试框架 依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>${retrying.version}</version>…

Python基础学习019--跳过

# 未完成的代码或不想让他执行的代码:使用装饰器跳过,书写在TestCase文件中 # 直接标记跳过:unittest.skip(跳过原因)# 根据条件判断跳过:unittest.skipIf(判断条件,跳过的原因),跳进成立则跳过 import unittestversion 31class TestDemo(unittest.TestCase):unittest.skip(没…

contos7 设置mongodb需账号密码访问

要设置密码访问MongoDB&#xff0c;您可以按照以下步骤进行操作&#xff1a; 连接到MongoDB实例&#xff1a;使用MongoDB的命令行工具&#xff08;mongo shell&#xff09;连接到MongoDB实例。在终端中输入以下命令&#xff1a; mongo切换到admin数据库&#xff1a;登录到Mongo…

90天,广告商单43张,小红书AI庭院风视频制作详解教程

今天给大家分享一个目前在小红书很火的AI绘画商单号案例。 首先给大家看看案例视频形态 这类视频内容非常简单&#xff0c;主要展示农家庭院的别致景色。通过AI绘画工具生成图片&#xff0c;再利用剪辑工具将画面增加动态元素&#xff0c;让整个视频逼真鲜活&#xff0c;加上…

PHP中isset() empty() is_null()的区别

在PHP中&#xff0c;isset()、empty()和is_null()是用于检查变量状态的三个不同的函数。它们分别用于检查变量是否已设置、是否为空以及是否为null。在本文中&#xff0c;我们将详细解释这三个函数的用法、区别和适当的使用场景。 isset(): isset()函数用于检查一个变量是否已…

《洛谷深入浅出基础篇》 P5250 木材仓库————集合应用实例

上链接&#xff1a; P5250 【深基17.例5】木材仓库 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5250上题干&#xff1a; 题目描述 博艾市有一个木材仓库&#xff0c;里面可以存储各种长度的木材&#xff0c;但是保证没有两个木材的长度是…

【心得】SQL注入知识清单

sql注入的类型 类型一&#xff1a;数字型注入和union 注入 http://127.0.0.1/page_detail.php?id1 union select 1,(select password from user where usernameadmin),3 limit 1,2 类型二&#xff1a;字符型注入 前面闭合 后面注释 来逃逸出单引号或者双引号 http://127…

蓝桥杯物联网_STM32L071_1_CubMxkeil5基础配置

CubMx配置&#xff1a; project工程中添加.h和.c文件&#xff1a; keil5配置: 运行&#xff1a; 代码提示与解决中文乱码&#xff1a;

在使用tomcat运行项目时,遇到端口80被占用的情况问题解决

问题描述&#xff1a;Failed to initialize end point associated with ProtocolHandler ["http-bio-80"] java.net.BindException: Address already in use: NET_Bind <null>:80 在学习springmvc的时候&#xff0c;跟着黑马视频进行学习&#xff0c;结果&…

三十分钟学会SCALA

SCALA Scala 是一种运行在 JVM上的函数式的面向对象语言。 Scala 是兼容的&#xff1a;兼容 Java&#xff0c;可以访问庞大的 Java 类库&#xff1b;Scala 是精简的&#xff1a;Scala 表达能力强&#xff0c;一行代码抵得上多行 Java 代码&#xff0c;开发速度快。可以让程序…

Android 获取系统编解码器

媒体编解码器 官网说明。 通过 MediaCodecInfo 拿到解码器信息&#xff1a; getName() &#xff1a;获取编解码器名字。isEncoder() &#xff1a;如果是编码器返回 true 。如果是编码器&#xff0c;返回 false 。isHardwareAccelerated() &#xff1a;如果是硬解码返回 true …

nginx 代理接口报404 问题排查

今天遇到一个nginx代理后端接口请求报404的问题&#xff0c;问题是这样的&#xff0c;后端由于服务器没有环境&#xff0c;但是需要和前端联调&#xff0c;于是采用cpolar内网穿透的方式&#xff0c;穿出来了。但是前端请求跨域&#xff0c;于是前端用nginx代理了一下后端接口&…

深度学习:到底怎么理解embedding

深度学习&#xff1a;到底怎么理解embedding 注意到embedding这个词&#xff0c;很大可能是在进行时间序列上的处理过程中遇到的&#xff0c;遇到的时间序列模型中&#xff0c;很大部分需要用到embedding过程&#xff0c;同时在看相关的程序代码的时候看到模型的结构设计中设计…

Linux下Centos7 gcc/g++、动态库/静态库(动态/静态链接)

1.gcc/g gcc是对c语言代码进行编译链接&#xff0c;而g是对c代码进行编译链接&#xff0c;接下来我们只对gcc进行讲解&#xff0c;g的使用方法跟gcc是一样的。 编译链接的四个步骤: 1:预处理 2:编译 3:汇编 4:链接 注&#xff1a;这些在后面都会着重讲解 1.1gcc -o 我们先在D…

C++之谓词

C之谓词 一元谓词 #include<iostream> using namespace std; #include<vector> #include<algorithm> //仿函数 返回值类型是boo1数据类型&#xff0c;称为谓词 //一元谓词class GreaterFive { public:bool operator()(int val){return val > 5;} };void …

傅里叶分析(2)

在《傅里叶分析&#xff08;1&#xff09;》中&#xff0c;讲述了连续信号的傅里叶分析方法&#xff0c;本文讲述离散信号的傅里叶分析方法。 虽然电、声、光、机械振动等信号在物理上是连续函数&#xff0c;但在实际工程中&#xff0c;其通常为离散信号&#xff0c;即若干离散…