当前位置: 首页 > news >正文

新网站多久被百度收录电子烟网站建设

新网站多久被百度收录,电子烟网站建设,深圳龙华区邮政编码,网页设计实验报告代码1#xff0c;简介 单总线#xff08;one-wire#xff09;是美国 DALLAS 公司推出的外围串行扩展总线技术#xff0c;与 SPI、I2C 等串行数据通信方式不同#xff0c;它采用单根信号线#xff0c;既传输时钟又传输数据#xff0c;而且数据传输是双向的。它具有节省 I/O口…1简介 单总线one-wire是美国 DALLAS 公司推出的外围串行扩展总线技术与 SPI、I2C 等串行数据通信方式不同它采用单根信号线既传输时钟又传输数据而且数据传输是双向的。它具有节省 I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。 单总线英文名 1-Wire传输速率一般是 15.3Kbit/s最大可达 142Kbit/s通常采用 100Kbit/s 以下的速率传输数据。 2硬件结构 单总线one-wire只有一根数据线系统中的数据交换、控制都由这根线完成。设备主机或从机通过一个漏极开路或三态端口连至该数据线以允许设备在不发送数据时能够释放总线而让其它设备使用总线其内部等效电路如图所示。 单总线通常要求外接一个约为4.7kΩ的上拉电阻这样当总线闲置时其状态为高电平。主机和从机之间的通信可通过3个步骤完成分别为初始化1-wire器件、识别1-wire器件和交换数据。由于它们是主从结构只有主机呼叫从机时从机才能应答因此主机访问1-wire器件都必须严格遵循单总线命令序列即初始化、ROM、命令功能命令。如果出现序列混乱1-wire器件将不响应主机。 3通信时序分析 由于DS18B20温度传感器在使用中与主机通讯是单总线one-wire通信所以在这使用FPGA驱动DS18B20温度传感器测量温度来学习单总线one-wire。 3.1 FPGA 如何驱动 gxs18b20 并测量温度 首先 FPGA 向温度传感器写入一些数据数据按照一个字节一个字节发送温度传感器接收到这些字节数据会自动采集外界温度数据并保存在内部寄存器里面。然后 FPGA 向传感器写入读温 度数据指令便可读取传感器里面的温度数据。 3.2 FPGA 与传感器通信过程 通过单总线访问 GX18B20 的执行序列如下 步骤 1初始化。 步骤 2ROM 操作指令 步骤 3GX18B20 功能指令。 每一次 GX18B20 的操作都必须满足以上步骤若是缺少步骤或是顺序混乱器件将不会有返回值。 3.2.1 初始化 通过单总线的所有执行操作都从一个初始化程序序列开始。初始化序列包含一个由总线控制器 发出的复位脉冲和其后由从机发出的存在脉冲。存在脉冲让总线控制器知道 Gx18B20 在总线上且 已经准备好操作。 所有和 Gx18B20 间的通信都以初始化序列开始初始化序列如图所示。一个复位脉冲跟着一个存在脉冲表明Gx18B20 已经准备好发送和接收数据。 在初始化序列期间总线控制器拉低总线并保持 480us 以发出TX一个复位脉冲信号然后释放总线进入接收状态RX。当总线被释放后5kΩ的上拉电阻将总线拉到高电平。当 GX18B20 检测到 IO 引脚上的上升沿后等待 15-60us然后发出一个由 60-240us 低电平信号构成的存在脉冲。 Bus master puling low : 主机拉低总线主机向从机写 0 Gx18b20 pulling low : Gxs18b20 拉低总线从机向主机发 0 Resistor pullup:从机的电阻上拉期间从机可以接收主机写入的数据。 one_wire 端口是一个双向的端口也即该端口可以发送数据也可以接收数据。 主机有一个双向端口与从机连接从机对应的端口的也是双向端口。 双向端口虽然可以发送和接收数据但是发送数据时候不能接收数据也就是发送和接收数据必须分开进行。 各种手册里面经常出现“主机释放总线”“从机释放总线”这两个概念不是一个意思。同理“主机拉低总线”和“从机拉低总线”也不是一个意思。 主机释放总线主机释放总线期间主机可以接收来自从机的数据。注意 如果主机要接收从机传来的数据。主机必须释放总线。 主机拉低总线主机向从机写入逻辑 0 从机释放总线从机释放总线、从机电阻上拉差不多是一个意思代表着此时从机可以接收数据。 3.2.2 ROM 操作指令 在这里我们选择跳过ROM操作指令 SKIP ROM [CCh] 这条命令允许总线控制器不用提供 64 位 ROM 编码就使用功能指令。例如总线控制器可以先发出一条忽略 ROM 指令然后发出温度转换指令[44h]从而完成温度转换操作。 3.2.3 GXS18B20 功能指令 GXS18B20 功能指令允许总线控制器读写 GX18B20 的寄存器发起温度转换和识别电源模式。 下表是GXS18B20的功能指令表 其中我们只使用温度转换指令CONVERT T [44h]和读取温度指令READ SCRATCHPAD [BEh] CONVERT T [44h] 这条命令时用于启动一次温度转换。温度转换指令被执行后产生的温度转换结果数据以 2 个字节的形式被存储在温度寄存器中而后 GX18B20 保持低功耗的等待状态。如果在寄生供电模 式下发出该指令在温度转换期间tCONV必须在 10us最多内给单总线一个强上拉见 GX18B20 供电节。如果 GX18B20 以外部电源供电总线控制器在发出该命令后跟着发出读时序 GX18B20 如处于转换中则总线返回 0若温度转换完成则返回 1。在寄生供电模式下总线 被强上拉拉高前这样的通信方式不会被使用。 READ SCRATCHPAD [BEh] 这条命令时主机读取寄存器命令。读取将从字节 0 的最低有效位开始一直进行下去直到 第 9 字节字节 8CRC读完如果不想读完所有字节控制器可以在任何时候发出复位命令 来中止读取。 3.3 读写时序 读/写时序 GX18B20 的数据读写是通过时序处理来进行信息交换的每个时序传输 1 位数据。 写时序 GX18B20 有两种写时序写 1 时序和写 0 时序。总线控制器通过写 1 时序来写逻辑 1通过 写 0 时序来写逻辑 0。写时序必须最少持续 60us包括两个写周期之间至少 1us 的恢复时间。当 总线控制器把数据线从逻辑高电平拉低到低电平的时候写时序开始。 总线控制器要写产生一个写时序必须把数据线拉到低电平然后释放且需在 15us 内释放总 线。当总线被释放后上拉电阻将总线拉高。总线控制器要生成写 0 时序必须把数据线拉到低 电平且继续保持至少 60us。 总线控制器初始化写时序后GX18B20 在一个 15us 到 60us 的窗口内对信号线进行采用。如果线上是高电平就是写 1。反之如果线上是低电平就是写 0。 读时序 总线控制器发起读时序时GX18B20 仅被用来传输数据给控制器。因此总线控制器在发出 读寄存器指令[BEh]或读电源模式指令[B4h]后必须立刻开始读时序以便 GX18B20 提供请求的数 据。 所有读时序必须最少 60us包括两个读周期间至少 1us 的恢复时间。当总线控制把数据线从 高电平拉低到低电平时读时序开始数据线必须至少保持 1us然后总线被释放。 在总线控制器发出读时序后GX18B20 通过拉高或拉低总线上来传输 1 或 0。当传输 0 结束后 总线将被释放通过上拉电阻回到高电平空闲状态。从 GX18B20 输出的数据在读时序的下降沿出 现后 15us 内有效。因此总线控制器在读时序开始 15us 内释放总线然后采样总线状态以读取数据线的状态。 图 1 标识 TINIT, TRC, 和 TSAMPLE 之和必须小于 15us。 图 2 指出系统时间可以通过以下方法达到最大TINIT 和 TRC 保持时间尽可能短并且把控制器采样时间放到 15us 周期的最后。 4FPGA驱动gxs18b20 4.1 编写代码思路 1根据FPGA 与温度传感器的通信过程分析 ①   FPGA对传感器进行初始化操作     ------ 分配一个字节时间 byte 0②   向传感器写入  0xcc                       ------ 分配一个字节时间 byte 1③   向传感器写入  0x44                       ------ 分配一个字节时间 byte 2④   等待一段时间                                 ------ 分配一个字节时间 byte 3⑤   初始化操作                                     ------ 分配一个字节时间 byte 4⑥   向传感器写入  0xcc                        ------ 分配一个字节时间 byte 5⑦   向传感器写入  0xbe                        ------ 分配一个字节时间 byte 6⑧   读取传感器温度读取两个字节     ------ 分配两个字节时间 byte 7/8 2代码编写思路 ①定义一个us的计数器计数器计数时间为100us;         cnt 100_000/20 5000 -- 0-4999          90us时就是计数到4499         10us时就是计数到499 ②定义一个位计数器bit_cnt 在cnt4999时加1在bit_cnt 7 cnt4999时清0③字节计数器 byte_cnt 在位计数器bit_cnt 7 cnt 4999时加1在bit_cnt 7 cnt 4999 byte8时清0 ④在如何设计连续写1或者写0 定义一个[7:0]wr_data 其中 bit_cnt是从0计数到7  wr_data在cnt计数到最大值时候向右移位通过判断wr_data[0]最低位判断写0还是写1 4.2 代码编写 根据以上思路分析编写代码如下 timescale 1ns / 1psmodule ds18b20_driver(input clk ,input reset ,input dq ,output reg temp_sign ,output reg [7:0] temp_data);localparam CNT_MAX 4999 ;localparam SKIP 8hCC ;localparam CONVERT 8h44 ;localparam READ 8hBE ;wire dqout ;reg dqout_en ;reg [12:0] cnt ;reg [2 :0] bit_cnt ;reg [3 :0] byte_cnt ;reg [7 :0] wr_data ;reg [16:0] rd_data ;reg init_err ;//三态门assign dq dqout_en 1 ? dqout: 1bz;assign dqout 0;//计数器always (posedge clk ) beginif (reset) begincnt 0;endelse if (cnt CNT_MAX) begincnt 0; endelse begincnt cnt 1;endendalways (posedge clk ) beginif (reset) beginbit_cnt 0;endelse if (cnt CNT_MAX bit_cnt 7) beginbit_cnt 0; endelse if (cnt CNT_MAX)beginbit_cnt bit_cnt 1;endendalways (posedge clk ) beginif (reset) beginbyte_cnt 0;endelse if (cnt CNT_MAX bit_cnt 7 byte_cnt 8) beginbyte_cnt 0; endelse if (cnt CNT_MAX bit_cnt 7)beginbyte_cnt byte_cnt 1;endendalways (posedge clk ) beginif ((byte_cnt 0 || byte_cnt 4) bit_cnt 7 cnt CNT_MAX) beginwr_data SKIP;endelse if(bit_cnt 7 byte_cnt 1 cnt CNT_MAX) beginwr_data CONVERT;endelse if(bit_cnt 7 byte_cnt 5 cnt CNT_MAX) beginwr_data READ;endelse if (cnt CNT_MAX) beginwr_data wr_data 1;endendalways (posedge clk) beginif (reset) begindqout_en 0;endelse if(byte_cnt 0 || byte_cnt 4)begin //初始化dqout_en bit_cnt 4 ? 1b1 : 1b0; end else if(byte_cnt 3) //等待dqout_en 0; else if (byte_cnt 1 || byte_cnt 2 || byte_cnt 5 || byte_cnt 6) //向传感器写入字节begin dqout_en cnt 0 ? 1b1 : (((cnt 499 wr_data[0]) || (cnt 4599 ~wr_data[0])) ? 1b0 : dqout_en);endelse if(byte_cnt 7 || byte_cnt 8)dqout_en cnt 99 ? 1b1 : 1b0; //拉高2US 读取采样end //主机采样always (posedge clk ) begin if(reset) beginrd_data 0;end else if((byte_cnt 7 || byte_cnt 8) cnt 649 ) //13us采样beginrd_data {dq,rd_data[15:1]};endelserd_data rd_data;endalways (posedge clk ) begin if(byte_cnt 8 bit_cnt 7 cnt 659 ~rd_data[15]) begintemp_data rd_data[10:4];temp_sign rd_data[15] ;endelse if(byte_cnt 8 bit_cnt 7 cnt 659 rd_data[15]) begintemp_data ~rd_data[10:4] 1 ;temp_sign rd_data[15] ;endend always (posedge clk ) beginif((byte_cnt 0 || byte_cnt 4) bit_cnt 6 cnt CNT_MAX) //初始化采?beginif (dq 0)init_err 0;elseinit_err 1;end endendmodule在这里编写了一个顶层模块其中定义了一个时钟管理单元 PLL实现来管理时钟和复位信号 顶层模块如下 timescale 1ns / 1ps module top(input wire clkin_50m,inout dq );wire reset;wire clk;wire temp_sign;wire [7:0] temp_data;clock_and_reset clock_and_reset (.clkin_50m (clkin_50m), .clkout_50M(clk), .reset (reset));ds18b20_driver ds18b20_driver(.clk (clk),.reset (reset),.dq (dq),.temp_sign (temp_sign),.temp_data (temp_data));endmodule4.3 测试仿真 由于18b20温度传感器属于从机所以仿真时较难采用半仿真。我们定义一个仿真文件slave.v 其中让dq作为输出使其输出0然后将此模块例化到测试模块中 timescale 1ns / 1ps module slave(output dq);assign dq 0;endmodule 测试代码如下 timescale 1ns / 1psmodule tb_top();reg clkin_50m ;wire dq ;pullup(dq); // pullup原语 模拟上拉电阻 可以让dq空闲状态处于高电平top top (.clkin_50m(clkin_50m), .dq(dq));slave slave (.dq(dq));initial beginclkin_50m 0;forever #(10) clkin_50m ~clkin_50m;endendmodule4.4 仿真波形 仿真波形如下
http://www.pierceye.com/news/142676/

相关文章:

  • 广东装饰网站建设建设银行官网网站人事
  • 做网站设计赚钱吗保定模板建站平台
  • 找个免费网站这么难吗做球形全景的网站
  • c语言做网站后端深圳商业网站建设哪家好
  • wordpress小说网站模板下载地址网站建设中企动力推荐
  • 自己做网站网页剧中中国科技
  • 石家庄网站制作福州怎么提升网站打开速度
  • 网站分布郴州建设网站公司
  • 最有效的网站推广费用seo推广是什么意怿
  • 网站推广的基本方法是网站建设公司的介绍
  • 网站开发企业部门网站按抓取手机软件贵阳
  • 龙岗做网站公司icxun临夏州建设网站
  • 网站跳转到另外一个网站怎么做品牌推广部的职责
  • 视频网站开发用什么服务器wordpress数据库邮箱
  • 网站建设公司前十名电子商务网站建设论文开题报告
  • 泉州公司建设网站秦皇岛市网站建设
  • 网站建设说课获奖视频小程序制作用华网天下优惠
  • 杭州网站建设公司代理加盟广东建设企业网站怎么样
  • 网站建制作公司企业营销
  • 建设网站基本流程佛山制作网页公司
  • 眼睛网站开发wordpress影院插件
  • 成都专业做网站的公司有哪些建设工程管理专业
  • 北京seo关键词优化外包网站seo诊断分析报告
  • 怎么做淘宝客网站注册域名后如何建立网站
  • 网络营销资讯网站茶山镇仿做网站
  • 东莞产品网站建设网络设计方案包括哪些
  • 精品课程网站建设论文一个网站如何做推广
  • elementui 做的网站个人网站做推广
  • 外贸 静态网站 怎么做网页制作的目的和意义
  • 做酒店的网站免费进销存软件哪个简单好用