找回密码
 立即注册
楼主: wuzhengmin

第一次:环境的创立 | 送实验箱

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 2025-9-10 10:36:29 | 显示全部楼层
相应的读取参数,为了配合2位数码管,也做了对应限制:
  1. void Parm_Read(void)
  2. {
  3.         EEPROM_read_n(EE_ADDRESS,tmp,2);        //读出2字节
  4.     Test_cnt = ((u16)tmp[0] << 8) + tmp[1]; //秒计数
  5.     if(Test_cnt > 100)    Test_cnt = 0;   //秒计数范围为0~10000,数码管显示2位的话,最大数值是100
  6.         EEPROM_SectorErase(EE_ADDRESS); //擦除扇区
  7. }       
复制代码
好像一起都对,但是实验就是不成功,感觉就是不执行写入函数:

EEPROM_write_n(EE_ADDRESS,tmp,2);
搞了10几天,还没有反应过来是哪里的问题?

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 5 天前 | 显示全部楼层
在STC梁工的耐心指导下,终于把掉电实验成功完成了


不过,我们实验环境先换成stc32g12k128 试验箱:

先把程序上传:


计时数据掉电保存.zip

342.76 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 5 天前 | 显示全部楼层
马上就发现一个问题:


先看这段程序:

  1. while(1)
  2.                         {
  3.                                         if((B_1ms) && (LowVolFlag == 0))   //1ms到,低电压时不工作
  4.                                         {
  5.                                                 B_1ms = 0;
  6.                                                                 if(++TimCount_z >= 100U)   //1秒到这里不是应该1000么?
  7.                                                                 {
  8.                                                                         TimCount_z = 0;        //清1000ms计数
  9.                                                                         Test_cnt++;         //秒计数+1
  10.                                                                         if(Test_cnt > 65530U)    Test_cnt = 0;   //秒计数范围为0~10000
  11.                                                                         
  12.                                                                         Test_cntSet();
  13.                                                                 }
  14.                                                                         
  15.                                         }
  16.                         }
复制代码
if(++TimCount_z >= 100U)   //1秒到这里不是应该1000么?
如果写成1000,就发现好像在以10倍的速度慢动作

仔细观察: if(Test_cnt > 65530U)    Test_cnt = 0;   //秒计数范围为0~65530
也有这个问题:
我发现Test_cnt = 6553 的时候就执行Test_cnt = 0 了

好像都减小了10倍 ???

哪里出问题了???


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 5 天前 | 显示全部楼层
if(++TimCount_z >= 100U)   //1秒到这里不是应该1000么?

其实这里还行,因为我们在定时器0中断里还要扫描SEG和LED,需要时间....所以1ms就加1的逻辑有漏洞

但是 if(Test_cnt > 65530U)    Test_cnt = 0;   //秒计数范围为0~65530

这个问题:

Test_cnt = 6553 的时候就执行Test_cnt = 0 了,叫人无法理解,感觉困在这里

这个问题无法忽略...........
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 前天 09:31 | 显示全部楼层
上个问题,其实是显示函数我搞错了,各位不能除以10,应该是取余(%)

我当时脑子不清醒,取余后随手又除了10

导致显示的是10秒,自然是到了6553 就复位为0

好了 今天我们继续学习冲哥的18B20温度采集






回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 前天 09:37 | 显示全部楼层
db18b20 的硬件连接,是相当的简单:


零下的温度,用补码表示

是单总线器件


3主要功能简介3.2温度报警说明-温度报警
当 18B20 完成一次温度转换后,该温度转换值将会与用户定义的温度报警 TH 和 TL寄存器(详见图3)中的值进行比较。符号标志位(S)温度的正负极性:正数则 S=0,负数则 S=1。过温和低温(TH和TL)温度报警寄存器是非易失性的(EEPROM),所以其可以在设备断电的情况下保存。过温和低温(TH和TL)温度报警寄存器在“寄存器”章节中可以解释为暂存寄存器的第2、3个字节。
图3、过温和低温(TH和TL)温度报警寄存器


截图202510120933588580.jpg
截图202510120937015256.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 前天 09:44 | 显示全部楼层
因为过温和低温(TH和TL)温度报警寄存器是一个8位的寄存器,所以在与其比较时温度寄存器的4位至11位才是有效的数据。如果温度转换数据小于或等于TL及大于或等于TH,18B2内部的报警标志位将会被置位。该标志位在每次温度转换之后都会更新,因此,如报警控制消失,该标志位在温度转换之后将会关闭。
主设备可以通过报警查询命令[Che]查询该总线上的 18B20 设备的报警标志位。任何一个报警标志位已经置位的 18B20设备都会响应该命令,因此,主设备可以确定到底哪个18B20设备存在温度报警。如果温度报警存在,并且过温和低温(TH和TL)温度报警寄存器已经被改变,则下一个温度转换值必须验证其温度报警标志位。

3.3 ROM编码(独一无二)

64 位光刻 ROM 编码
每片 18B20 的片内ROM 中都存有一个独一无二的 64 位的编码。在该内ROM 编码的低 8 位保存有 18B20 的分类编码:28h。中间的 48 位保存有独一无二的序列号。最高 8 位保存片内ROM 中前56位的循环冗余校验(CRC)值。更加详细的在"1-wire总线系统”章节该64位ROM编码及相关的ROM 功能控制逻辑允许 18B20 作为 1-wire 总线协议上的设备。

如果担心自己的产品被人复刻了或者被人恶意拆装复制,可以再单片机里加一段程序读取到13c20的编码正确才可以开始运行!

1-wire总线系统
1-wire 总线系统即一个总线主设备控制一个或多个从设备。18B20 始终是一个从设备。当总线上只有一个从设备时,此系统被称为“单节点”系统;当总线上有多个从设备连接时,此系统被称之为
“多节点”系统。
1-wire总线上所有的命令或者数据的发送都是遵循低位先发送的原则。接下来关于1-wire 总线系统的描述将会分成三个部分:硬件配置,事件序列和 1-wire 总线信号(信号定义和时序)。

下面是重点:
事件序列
访问 18B20 的事件序列如下所示:
第一步:初始化
第二步:ROM 命令(紧跟任何数据交换请求)第三步:18B20功能命令(紧跟任何数据交换请求)
每次对 18B20的访问都必须遵循这样的步骤来进行,如果这些步骤中的任何一个丢失或者没有执行,则 18B20将不会响应。除了ROM搜索命令[FOh]和报警搜索命令[ECh]之外。1当执行完这些ROM 命令之后,主设备必须回到上述步骤中的第一步。





回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 前天 09:45 | 显示全部楼层
4.2.1.初始化
初始化程序—复位和存在脉冲
与 18B20 所有的通信都是由初始化序列开始的,该序列包括从主设备发出的复位脉冲及从18B20响应的存在脉冲组成。如图 13所示。当 18B20响应复位信号的存在脉冲后,则其向主设备表明其在该总线上,并且已经做好操作命令。
在初始化序列期间,总线上的主设备通过拉低1-wire总线超过480us来发送(TX)复位脉冲。
之后主设备释放总线而进入接收模式(RX)。当总线释放后,5kΩ 左右的上拉电阻将 1-wire 总线拉至高电平。当18B20检测到该上升边沿信号后,其等待15us至60us后通过将1-wire总线拉低60us至240us 来实现发送一个存在脉冲。



截图202510120945099962.jpg
截图202510120945555466.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 前天 09:48 | 显示全部楼层
接着:



小结一下:


5.代码编写
5.1 底层驱动
复位(输出0保持480us,输出1保持60us,读取当前电平,延时420us)写0(输出0保持60us+,输出1保持1us+).
写1(输出0保持1us+,输出1保持60us+)读0/1(输出0保持1us+,,输出1保持Tus+,读取当前电平,延时60us)
5.2 接口函数
写1字节读1字节
5.3 用户功能函数
温度读取换算函数
(复位-CCH-44H-等待-复位-CCH-BEH-读取2字节温度数据-换算)


截图202510120947066522.jpg
截图202510120947514027.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-14 08:27:33
已绑定手机

2

主题

258

回帖

750

积分

高级会员

积分
750
发表于 前天 09:50 | 显示全部楼层
总结
1,学会看芯片手册,尤其是时序图
2.回顾18b20的工作原理
3.思考下生活里什么应用要用到这个。
课后练习:
1,将之前那节课的温度计实验改成18b20驱动的2.学习代码包“42-一线制温度传感器 DS18B20 测温”
的实验,分析下他的代码和我们的代码有什么区别。
3.尝试着读取一下内部的64位编码,以及显示更高精度的温度。



回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-14 10:37 , Processed in 0.163469 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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