打印
[verilog]

基于DS18B20的温度值的十进制转换

[复制链接]
2154|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BigTree2017|  楼主 | 2017-8-1 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 BigTree2017 于 2017-10-9 13:48 编辑

1. 概述
本设计基于CPLD设计一款数字温度计,温度传感器使用DS18B20,CPLD采用EPM240T100C5。DS18B20 具有体积小,硬件开销低(只需要一根信号线),抗干扰能力强等优点。EPM240T00C5具有延时低、功耗小、稳定性高等优点。
2. 硬件简介
硬件平台采用额ETree的CPLD开发板,有如下硬件资源:
  • CPLD EPM240T100C5;
  • USB 转串口(省去 USB 转串口线);
  • LED;
  • 有源蜂鸣器;
  • DS18B20 温度传感器;
  • 四位共阳极数码管;
  • 按键;
  • GPIO 拓展接口(18 个通用 IO)。
    有需要的朋友可以在   shop397545458.taobao.com    购买。
3. 进制转换(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];
                buf1[3:0] = (buf0[3:0]>=10)?(buf0[3:0]-10 + 6):(buf0[3:0]+6);
                buf1[7:4] = (buf0[3:0]>=10)?(buf0[7:4]+1):buf0[7:4];
                buf2[3:0] = (buf1[3:0]>=10)?(buf1[3:0]-10):(buf1[3:0]);
                buf2[7:4] = (buf1[3:0]>=10)?(buf1[7:4]+1):buf1[7:4];        
                data_out  = buf2;
        end
        default:
        begin
                data_out  = data_in;
        end
        endcase

assign temperature = data_out[7:0];


相关帖子

沙发
vc_Verilog| | 2017-11-6 14:58 | 只看该作者
不错,楼主辛苦了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝