搜索
bottom↓
12
返回列表 发新帖
楼主: zkf0100007

FPGA控制DS18B20代码,绝对原创,欢迎拍砖

[复制链接]

出0入0汤圆

发表于 2010-12-23 07:54:53 | 显示全部楼层
还有一点不解的是,代码中的WAIT800MS这个状态不要,也就是不用等待800ms,也能正常工作,请高手不吝赐教!
这个800MS叫转换时间是不太确切的,应该是储能时间,12Bit和9Bit用时就不一样,而且不用寄生供电可以不要这个时间

出0入0汤圆

发表于 2010-12-23 08:49:35 | 显示全部楼层
mark

出0入25汤圆

发表于 2011-4-10 12:52:28 | 显示全部楼层
先Mark一下,改天试试

出0入0汤圆

发表于 2011-4-10 13:23:35 | 显示全部楼层
看不懂,先Mark

出0入0汤圆

发表于 2011-4-10 14:11:46 | 显示全部楼层
MARK FPGA控制DS18B20代码

出0入0汤圆

发表于 2011-4-21 20:29:01 | 显示全部楼层
回复【楼主位】zkf0100007
-----------------------------------------------------------------------

楼主好 我最近正在做基于FPGA的温度检测系统的毕业设计 想请教你 能加我qq聊么?390403879我qq 谢了

出0入0汤圆

发表于 2011-5-4 12:34:31 | 显示全部楼层
我想请问一下..dq的inout 综合不了的问题怎么解决??

出0入0汤圆

发表于 2011-5-13 16:07:20 | 显示全部楼层
回复【88楼】zkf0100007
-----------------------------------------------------------------------

lz 还在吗?我想问下ds18b20 链接fpga 的inout端口需要设置三态吗,我现在为什么连重置芯片都不成功啊~

出0入0汤圆

发表于 2011-5-16 11:03:18 | 显示全部楼层
回复【楼主位】zkf0100007
-----------------------------------------------------------------------

还是一样的问题,楼主的程序在板子上测试过了吗~ inout端口需要设置三态吗,这样的操作会不会引起总线冲突啊

出0入0汤圆

发表于 2011-5-19 10:33:26 | 显示全部楼层
回复【楼主位】zkf0100007
-----------------------------------------------------------------------

感谢楼主的程序 请问楼主你这个程序测出的温度是在128*64上的液晶显示器上显示么?

出0入0汤圆

发表于 2011-5-19 16:20:58 | 显示全部楼层
回复【112楼】zhuchenlong
-----------------------------------------------------------------------

哥们你的程序在板子上调试通过了吗

出0入0汤圆

发表于 2011-5-24 20:55:01 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-5-24 21:51:23 | 显示全部楼层
回复【112楼】zhuchenlong
-----------------------------------------------------------------------

不是,是数码管显示的

出0入0汤圆

发表于 2011-5-26 00:05:11 | 显示全部楼层
mark一下,我也来玩玩

出0入0汤圆

发表于 2011-5-26 10:13:29 | 显示全部楼层
各位讨论的都很热烈,ourdev难道一下来这么多搞FPGA的高手啊,小弟初学!学习了

出0入0汤圆

发表于 2011-6-4 14:15:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-6 18:54:19 | 显示全部楼层
谢谢分享,marking

出0入0汤圆

发表于 2011-6-9 01:49:16 | 显示全部楼层
楼主这个代码不错,是一个有限状态机的典型例子。占用资源不会太多。
有限状态机有时候是一种“偷懒”但是很有效的做法,是并行环境下实现串口控制序列的很好方法。
并且接口也写得很明朗,直接输出温度数值,模块内系统内强耦合,模块间弱耦合的设计规则。
赞!

出0入0汤圆

发表于 2011-6-16 15:42:24 | 显示全部楼层
以下是我编写的BCD译码模块..经过测试可以使用..
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
       
ENTITY TMPDISPLAY IS
PORT(
        TMP  :IN STD_LOGIC_VECTOR(11 DOWNTO 0) ;
        HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
    );       
END ;       
ARCHITECTURE BEHV OF TMPDISPLAY IS        

SIGNAL TMP_TEMP:STD_LOGIC_VECTOR(11 DOWNTO 0);

BEGIN


PROCESS(TMP)
BEGIN
        HEX3<="00000000";
    IF (TMP(11)='1') THEN
                        HEX3<="10111111";
                        TMP_TEMP<=0-TMP;
        ELSE
                TMP_TEMP<=TMP;
                IF (TMP>1599) THEN
                        HEX3<="11111001";
                ELSE
                        HEX3<="11111111";
                END IF;
        END IF;
END PROCESS;

PROCESS(TMP_TEMP)
       
        BEGIN       

        CASE TMP_TEMP(3 DOWNTO 0) IS
        WHEN "0000" =>HEX0<="11000000";    --0--0
        WHEN "0001" =>HEX0<="11111001";    --625--1
        WHEN "0010" =>HEX0<="11111001";    --1250--1
        WHEN "0011" =>HEX0<="10100100";    --1875--2
        WHEN "0100" =>HEX0<="10110000";    --2500--3
        WHEN "0101" =>HEX0<="10110000";    --3125--3
        WHEN "0110" =>HEX0<="10011001";    --3750--4
        WHEN "0111" =>HEX0<="10011001";    --4375--4
        WHEN "1000" =>HEX0<="10010010";           --5000--5
        WHEN "1001" =>HEX0<="10000010";    --5625--6
        WHEN "1010" =>HEX0<="10000010";    --6250--6
        WHEN "1011" =>HEX0<="11111000";    --6875--7
        WHEN "1100" =>HEX0<="10000000";    --7500--8
        WHEN "1101" =>HEX0<="10000000";    --8125--8
        WHEN "1110" =>HEX0<="10010000";    --8750--9
        WHEN "1111" =>HEX0<="10010000";    --9375--9
        END CASE;
END PROCESS;


PROCESS(TMP_TEMP)
BEGIN       
        CASE TMP_TEMP(10 DOWNTO 4) IS
        WHEN "0000000" =>HEX1<="01000000"; HEX2<="11000000";--0--00
        WHEN "0000001" =>HEX1<="01111001"; HEX2<="11000000";--1--01
        WHEN "0000010" =>HEX1<="00100100"; HEX2<="11000000";--2--02
        WHEN "0000011" =>HEX1<="00110000"; HEX2<="11000000";--3--03
        WHEN "0000100" =>HEX1<="00011001"; HEX2<="11000000";--4--04
        WHEN "0000101" =>HEX1<="00010010"; HEX2<="11000000";--5--05
        WHEN "0000110" =>HEX1<="00000010"; HEX2<="11000000";--6--06
        WHEN "0000111" =>HEX1<="01111000"; HEX2<="11000000";--7--07
        WHEN "0001000" =>HEX1<="00000000"; HEX2<="11000000";--8--08
        WHEN "0001001" =>HEX1<="00010000"; HEX2<="11000000";--9
    WHEN "0001010" =>HEX1<="01000000"; HEX2<="11111001";--10
        WHEN "0001011" =>HEX1<="01111001"; HEX2<="11111001";--11
        WHEN "0001100" =>HEX1<="00100100"; HEX2<="11111001";--12
        WHEN "0001101" =>HEX1<="00110000"; HEX2<="11111001";--13
        WHEN "0001110" =>HEX1<="00011001"; HEX2<="11111001";--14
        WHEN "0001111" =>HEX1<="00010010"; HEX2<="11111001";--15
        WHEN "0010000" =>HEX1<="00000010"; HEX2<="11111001";--16
        WHEN "0010001" =>HEX1<="01111000"; HEX2<="11111001";--17
        WHEN "0010010" =>HEX1<="00000000"; HEX2<="11111001";--18
        WHEN "0010011" =>HEX1<="00010000"; HEX2<="11111001";--19
        WHEN "0010100" =>HEX1<="01000000"; HEX2<="10100100";--20
        WHEN "0010101" =>HEX1<="01111001"; HEX2<="10100100";--21
        WHEN "0010110" =>HEX1<="00100100"; HEX2<="10100100";--22
        WHEN "0010111" =>HEX1<="00110000"; HEX2<="10100100";--23
        WHEN "0011000" =>HEX1<="00011001"; HEX2<="10100100";--24
        WHEN "0011001" =>HEX1<="00010010"; HEX2<="10100100";--25
        WHEN "0011010" =>HEX1<="00000010"; HEX2<="10100100";--26
        WHEN "0011011" =>HEX1<="01111000"; HEX2<="10100100";--27
        WHEN "0011100" =>HEX1<="00000000"; HEX2<="10100100";--28
        WHEN "0011101" =>HEX1<="00010000"; HEX2<="10100100";--29
        WHEN "0011110" =>HEX1<="01000000"; HEX2<="10110000";--30
        WHEN "0011111" =>HEX1<="01111001"; HEX2<="10110000";--31
        WHEN "0100000" =>HEX1<="00100100"; HEX2<="10110000";--32
        WHEN "0100001" =>HEX1<="00110000"; HEX2<="10110000";--33
        WHEN "0100010" =>HEX1<="00011001"; HEX2<="10110000";--34
        WHEN "0100011" =>HEX1<="00010010"; HEX2<="10110000";--35
        WHEN "0100100" =>HEX1<="00000010"; HEX2<="10110000";--36
        WHEN "0100101" =>HEX1<="01111000"; HEX2<="10110000";--37
        WHEN "0100110" =>HEX1<="00000000"; HEX2<="10110000";--38
        WHEN "0100111" =>HEX1<="00010000"; HEX2<="10110000";--39
        WHEN "0101000" =>HEX1<="01000000"; HEX2<="10011001";--40
        WHEN "0101001" =>HEX1<="01111001"; HEX2<="10011001";--41
        WHEN "0101010" =>HEX1<="00100100"; HEX2<="10011001";--42
        WHEN "0101011" =>HEX1<="00110000"; HEX2<="10011001";--43
        WHEN "0101100" =>HEX1<="00011001"; HEX2<="10011001";--44
        WHEN "0101101" =>HEX1<="00010010"; HEX2<="10011001";--45
        WHEN "0101110" =>HEX1<="00000010"; HEX2<="10011001";--46
        WHEN "0101111" =>HEX1<="01111000"; HEX2<="10011001";--47
        WHEN "0110000" =>HEX1<="00000000"; HEX2<="10011001";--48
        WHEN "0110001" =>HEX1<="00010000"; HEX2<="10011001";--49
        WHEN "0110010" =>HEX1<="01000000"; HEX2<="10010010";--50
        WHEN "0110011" =>HEX1<="01111001"; HEX2<="10010010";--51
        WHEN "0110100" =>HEX1<="00100100"; HEX2<="10010010";--52
        WHEN "0110101" =>HEX1<="00110000"; HEX2<="10010010";--53
        WHEN "0110110" =>HEX1<="00011001"; HEX2<="10010010";--54
        WHEN "0110111" =>HEX1<="00010010"; HEX2<="10010010";--55
        WHEN "0111000" =>HEX1<="00000010"; HEX2<="10010010";--56
        WHEN "0111001" =>HEX1<="01111000"; HEX2<="10010010";--57
        WHEN "0111010" =>HEX1<="00000000"; HEX2<="10010010";--58
        WHEN "0111011" =>HEX1<="00010000"; HEX2<="10010010";--59
        WHEN "0111100" =>HEX1<="01000000"; HEX2<="10000010";--60
        WHEN "0111101" =>HEX1<="01111001"; HEX2<="10000010";--61
        WHEN "0111110" =>HEX1<="00100100"; HEX2<="10000010";--62
        WHEN "0111111" =>HEX1<="00110000"; HEX2<="10000010";--63
        WHEN "1000000" =>HEX1<="00011001"; HEX2<="10000010";--64
        WHEN "1000001" =>HEX1<="00010010"; HEX2<="10000010";--65
        WHEN "1000010" =>HEX1<="00000010"; HEX2<="10000010";--66
        WHEN "1000011" =>HEX1<="01111000"; HEX2<="10000010";--67
        WHEN "1000100" =>HEX1<="00000000"; HEX2<="10000010";--68
        WHEN "1000101" =>HEX1<="00010000"; HEX2<="10000010";--69
        WHEN "1000110" =>HEX1<="01000000"; HEX2<="11111000";--70
        WHEN "1000111" =>HEX1<="01111001"; HEX2<="11111000";--71
        WHEN "1001000" =>HEX1<="00100100"; HEX2<="11111000";--72
        WHEN "1001001" =>HEX1<="00110000"; HEX2<="11111000";--73
        WHEN "1001010" =>HEX1<="00011001"; HEX2<="11111000";--74
        WHEN "1001011" =>HEX1<="00010010"; HEX2<="11111000";--75
        WHEN "1001100" =>HEX1<="00000010"; HEX2<="11111000";--76
        WHEN "1001101" =>HEX1<="01111000"; HEX2<="11111000";--77
        WHEN "1001110" =>HEX1<="00000000"; HEX2<="11111000";--78
        WHEN "1001111" =>HEX1<="00010000"; HEX2<="11111000";--79
        WHEN "1010000" =>HEX1<="01000000"; HEX2<="10000000";--80
        WHEN "1010001" =>HEX1<="01111001"; HEX2<="10000000";--81
        WHEN "1010010" =>HEX1<="00100100"; HEX2<="10000000";--82
        WHEN "1010011" =>HEX1<="00110000"; HEX2<="10000000";--83
        WHEN "1010100" =>HEX1<="00011001"; HEX2<="10000000";--84
        WHEN "1010101" =>HEX1<="00010010"; HEX2<="10000000";--85
        WHEN "1010110" =>HEX1<="00000010"; HEX2<="10000000";--86
        WHEN "1010111" =>HEX1<="01111000"; HEX2<="10000000";--87
        WHEN "1011000" =>HEX1<="00000000"; HEX2<="10000000";--88
        WHEN "1011001" =>HEX1<="00010000"; HEX2<="10000000";--89
        WHEN "1011010" =>HEX1<="01000000"; HEX2<="10010000";--90
        WHEN "1011011" =>HEX1<="01111001"; HEX2<="10010000";--91
        WHEN "1011100" =>HEX1<="00100100"; HEX2<="10010000";--92
        WHEN "1011101" =>HEX1<="00110000"; HEX2<="10010000";--93
        WHEN "1011110" =>HEX1<="00011001"; HEX2<="10010000";--94
        WHEN "1011111" =>HEX1<="00010010"; HEX2<="10010000";--95
        WHEN "1100000" =>HEX1<="00000010"; HEX2<="10010000";--96
        WHEN "1100001" =>HEX1<="01111000"; HEX2<="10010000";--97
        WHEN "1100010" =>HEX1<="00000000"; HEX2<="10010000";--98
        WHEN "1100011" =>HEX1<="00010000"; HEX2<="10010000";--99
        WHEN "1100100" =>HEX1<="01000000"; HEX2<="11000000";--100
        WHEN "1100101" =>HEX1<="01111001"; HEX2<="11000000";--101
        WHEN "1100110" =>HEX1<="00100100"; HEX2<="11000000";--102
        WHEN "1100111" =>HEX1<="00110000"; HEX2<="11000000";--103
        WHEN "1101000" =>HEX1<="00011001"; HEX2<="11000000";--104
        WHEN "1101001" =>HEX1<="00010010"; HEX2<="11000000";--105
        WHEN "1101010" =>HEX1<="00000010"; HEX2<="11000000";--106
        WHEN "1101011" =>HEX1<="01111000"; HEX2<="11000000";--107
        WHEN "1101100" =>HEX1<="00000000"; HEX2<="11000000";--108
        WHEN "1101101" =>HEX1<="00010000"; HEX2<="11000000";--109
        WHEN "1101110" =>HEX1<="01000000"; HEX2<="11111001";--110
        WHEN "1101111" =>HEX1<="01111001"; HEX2<="11111001";--111
        WHEN "1110000" =>HEX1<="00100100"; HEX2<="11111001";--112
        WHEN "1110001" =>HEX1<="00110000"; HEX2<="11111001";--113
        WHEN "1110010" =>HEX1<="00011001"; HEX2<="11111001";--114
        WHEN "1110011" =>HEX1<="00010010"; HEX2<="11111001";--115
        WHEN "1110100" =>HEX1<="00000010"; HEX2<="11111001";--116
        WHEN "1110101" =>HEX1<="01111000"; HEX2<="11111001";--117
        WHEN "1110110" =>HEX1<="00000000"; HEX2<="11111001";--118
        WHEN "1110111" =>HEX1<="00010000"; HEX2<="11111001";--119
        WHEN "1111000" =>HEX1<="01000000"; HEX2<="10100100";--120
        WHEN "1111001" =>HEX1<="01111001"; HEX2<="10100100";--121
        WHEN "1111010" =>HEX1<="00100100"; HEX2<="10100100";--122
        WHEN "1111011" =>HEX1<="00110000"; HEX2<="10100100";--123
        WHEN "1111100" =>HEX1<="00011001"; HEX2<="10100100";--124
        WHEN "1111101" =>HEX1<="00010010"; HEX2<="10100100";--125
        WHEN "1111110" =>HEX1<="00000010"; HEX2<="10100100";--126
        WHEN "1111111" =>HEX1<="01111000"; HEX2<="10100100";--127
        END CASE;
END PROCESS;

END;

出0入0汤圆

发表于 2011-6-16 15:47:19 | 显示全部楼层
回复【121楼】fansy38  
-----------------------------------------------------------------------

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4215535&bbs_page_no=1&search_mode=3&search_text=888888888888&bbs_id=9999

我的16位BIN转BCD,你是组合逻辑吧,我是靠时钟打数据

出0入0汤圆

发表于 2011-6-16 17:31:33 | 显示全部楼层
LZ可以试试把多个18B20挂一根总线上进行控制。以前在avr上实现过,不过貌似现在各种芯片的管脚都比较多,很少有人还会这么干吧?呵呵

出0入0汤圆

 楼主| 发表于 2011-6-19 23:32:01 | 显示全部楼层
回复【123楼】sharpedge
lz可以试试把多个18b20挂一根总线上进行控制。以前在avr上实现过,不过貌似现在各种芯片的管脚都比较多,很少有人还会这么干吧?呵呵
-----------------------------------------------------------------------

这个我也做过,就是多一个ID读取,其他差不多

出0入0汤圆

发表于 2011-6-20 23:19:15 | 显示全部楼层
mark一下!~

出0入0汤圆

发表于 2011-7-16 16:13:43 | 显示全部楼层
学习了,佩服中,,,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 12:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表