您的位置 首页 开关

怎么规划根据CPLD的温度计(原理和代码)?

1. 概述本设计基于CPLD设计一款数字温度计,温度传感器使用DS18B20,CPLD采用EPM240T100C5。DS18B20 具有体积小,硬件开销低(只需要一根信号线),抗干

1. 概述

本规划根据CPLD规划一款数字温度计,温度传感器运用DS18B20,CPLD选用EPM240T100C5。DS18B20 具有体积小,硬件开支低(只需求一根信号线),抗干扰能力强等长处。EPM240T00C5具有延时低、功耗小、稳定性高级长处。

2. 硬件简介

硬件渠道选用BigTree的CPLD开发板,有如下硬件资源:

CPLD EPM240T100C5;

USB 转串口(省去 USB 转串口线);

LED;

有源蜂鸣器;

DS18B20 温度传感器;

四位共阳极数码管;

按键;

GPIO 拓宽接口(18 个通用 IO)。

有需求的朋友能够在 shop397545458.taobao.com购买。

3. 体系框图


温度收集模块:担任初始化、读写DS18B20温度传感器;

十六进制转十进制模块:将DS18B20的温度输出数据转化成十进制数据;

数码管显现模块:将转化好的十进制数据动态显现在数码管上。

4. DS18B20 作业原理

DS18B20 引脚功用

GND: 地信号

DQ: 数据信号线

VDD: 电源

存储资源

ROM: 只读存储器,用于寄存 DS18B20 编码,总共 64 位,第一个 8 位是 1-wire 宗族号(28h),第二个 48 位是仅有的序列号。最终一个 8 位是前 56 位的 CRC 校验码。

RAM: 数据暂存器,共 9 个字节,第 1、 2 字节是温度转后的数据值。

EEPROM: 用于寄存长时刻需求坚持的数据,如上下限温度报警值等。

设备操作

1.初始化

-> 数据线拉高 1;

-> 短延时;

-> 数据线拉底 0;

-> 延时 750ms;

-> 数据线拉高 1;

-> 延时等候(假如初始化成功则在 15~60 毫秒内发生一个由 DS18B20 回来的低电平);

->若读到数据线上的低电平,再做延时(第五步算起,最少 480ms);

-> 数据线拉高,完毕。

2.发送 ROM 指令

ROM 指令共 5 条,每一个作业周期只能发一条,分别为:读 ROM、匹配 ROM、跳动ROM、查找 ROM 和报警查找。一般只要单个 18B20 芯片,可运用越过 ROM 指令[CCH]。

3.发送存储器操作指令

在 ROM 指令后,紧接着发送存储器操作指令,分别为:

? 温度转化 44H:

发动 DS18B20 进行温度转化,将温度值放入 RAM 的第 1、 2 个地址。

? 读暂存器 BEH

从 RAM 中读数据,读地址从 0 开端到 9,可只读前两个字节。

? 写暂存器 4EH

将数据写入暂存器的 TH、 TL 字节。

? 仿制暂存器 48H

把暂存器的 TH、 TL 字节写到 E2RAM 中。

? 从头调 E2RAM B8H

把 E2RAM 中的 TH、 TL 字节写到暂存器 TH、 TL 字节 。

? 读电源供电方法 B4H

发动 DS18B20 发送电源供电方法的信号给主控。

4.读当时温度数据

需求履行两次作业周期,第一个周期为复位,越过 ROM 指令,履行温度转化存储器指令等候 500us 温度转化时刻。紧接着履行第二个周期为复位,越过 ROM 指令,履行读 RAM 的存

储器,读数据。

5.写操作


写时隙分为写“0”和写“1”, 时序如图,在写数据时刻空隙的前 15us 总线需求是被主控拉低,然后则将是芯片对总线数据的采样时刻,采样时刻在 15-60us,采样时刻内,假如主控将 总线拉高则表明写 1,假如主控将总线拉低则表明写 0。每一位的发送都应该有一个至少15us 的低电平开端位随后的数据 0 或 1 应该在 45us 内完结。整个位的发送时刻应该坚持 在60-120us,不然不能确保通讯的正常。

6.读操作


读时隙时也是有必要先由主控发生至少 1us 的低电平,表明读时刻的开端。随后在总线被开释后的 15us 中 DS18B20 会发送内部数据位。留意有必要要在读空隙开端的 15us 内读数据为才 能够坚持通讯的正确。通讯时,字节的读或写是从高位开端的,即 A7 到 A0。控制器开释总线,也相当于将总线置 1。

更多关于DS18B20的材料能够检查其使用手册。

5. 进制转化(Hex2Dec)

因为 DS18B20 输出的是十六进制数据, 所以需求做进制转化为 10 进制输出。这儿因为CPLD 资源问题,故只规划温度显现规模为: 0~47 度,最小分辨率为 1 度。

“`

wire [7:0] data_in;

assign data_in = {1‘b0,temperature_buf[10:4]};

reg [7:0] buf0;

reg [7:0] buf1;

reg [7:0] buf2;

reg [7:0] data_out;

always @(*)

case(data_in[7:4])

0:

begin

buf0[3:0] = (data_in[3:0]> =10)?(data_in[3:0]-10):data_in[3:0];

buf0[7:4] = (data_in[3:0]> =10)?(data_in[7:4]+1):data_in[7:4];

data_out = buf0;

end

1:

begin

buf0[3:0] = (data_in[3:0]> =10)?(data_in[3:0]-10 + 6):(data_in[3:0]+6);

buf0[7:4] = (data_in[3:0]> =10)?(data_in[7:4]+1):data_in[7:4];

buf1[3:0] = (buf0[3:0]> =10)?(buf0[3:0]-10):buf0[3:0];

buf1[7:4] = (buf0[3:0]> =10)?(buf0[7:4]+1):buf0[7:4];

data_out = buf1;

end

2:

begin

buf0[3:0] = (data_in[3:0]> =10)?(data_in[3:0]-10 + 6):(data_in[3:0]+6);

buf0[7:4] = (data_in[3:0]> =10)?(data_in[7:4]+1):data_in[7:4];

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/154819.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部