找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3313|回复: 10
收起左侧

关于单片机温度数据的存贮问题

[复制链接]
ID:497468 发表于 2019-6-2 20:09 | 显示全部楼层 |阅读模式
上一期用6675做了一个温度采集的程序,现在想把温度的数据存贮起来,放到电脑上做一个曲线显示,  刚学会EEPRON的应用,但不知这个如何写,我的想法是这样的.:
1, 每隔1S采集一个数据,然后把这个数据存起来, 我用的是STC15W4K系列的单片机,有42K的EEPRON,  EEPRON是512个字节为一个扇区,我要建一个512的数组吗? 因网上没有看到类似的例子,烦请大侠给我一个相关的思路或例子的链接.
2,开一个512的数组缓存,用完就要清零,如何一次可以把整个数组全部清零呢,
3,如何把EEPRON的用过的数据一次清零呢,可能从第二个扇区开始.直接用擦除的方法吗?

因本人是搞硬件的,自学的C语言,所以是个菜鸟,还请大侠们多多指教
回复

使用道具 举报

ID:213173 发表于 2019-6-2 21:13 | 显示全部楼层
EEPROM是用于掉电保存数据用的。因为STC15W系列单片机的EEPROM更新一次数据,哪怕只一个字节也要删除一整个扇区。通常做法是先把某扇区的有效数据全部读出保存在一个缓存数组中,更新其中需要修改的部分数据后再全部写入原扇区。从你叙述的情况不必使用EEPROM,就用一个数组直接保存每隔1S采集的数据。
回复

使用道具 举报

ID:415123 发表于 2019-6-2 21:42 | 显示全部楼层
像这数据种数据不需要存到EEPROM里,你应该在RAM区里开辟一个区,比如100或更多,满的时候使用通信手段发出去给电脑,然后RAM区再清零。EEPROM是有寿命的,像这种数据更新频繁的场合,不建议存到EEPROM里
回复

使用道具 举报

ID:47286 发表于 2019-6-2 22:34 | 显示全部楼层
1. 如果你要一次写那么多进去 就需要建立一个那么大的数组 STC的手册说片内EEPROM不支持单字节写入 如果要写一个字节 应该在数组(我管它叫缓冲区)内修改你需要的位 然后擦除扇区 再一起写入 从这点看 也有必要建立数组 毕竟读出来也需要时间 我尝试过不擦除直接写 结果就是乱七八糟的数 和写进去的不一样

2.第一种方法
for(i=0;i<512;i++)
{每一位=0
写入扇区
}
第二种方法
擦除扇区 然后再读出扇区
第三种方法
直接重启系统 内存里的东西就全没了 所以你可以考虑关机前或者特定的条件下写入 然后重启

3.直接擦除整个扇区是最快的 但这个问题和第2个问题的第2个方法一样有个问题 STC默认是用FF填充 如果你一定要是0的话 就需要手动操作 也就是用for语句之类的强制清零再写入

这种片内的EEPROM不如24c02之类的好用 但至少我用起来 觉得比外置的快 你应该尝试多用几个扇区把数据分开写 然后程序里规划一下 能不写EEPROM尽量不 512个数据挺耽误时间的 人能感觉出执行的延迟 我曾经做一个测试的时候就干过和你一样的事 写了500个数据到EEPROM里然后回去读出来分析
回复

使用道具 举报

ID:47286 发表于 2019-6-2 22:41 | 显示全部楼层
补充 如果你一定要写那么多数据保存下来 干嘛不考虑一下SD卡呢 那东西容量大多了 还是FAT文件格式

沙发的建议你也可以考虑 不过片内EEPROM的寿命貌似还行 我有一次干个傻事 程序写错了 设计的0扇第0位是初始化标记 读却是2扇第0位 单片机起动后检测到运行参数没有初始化 就反复调用code往0扇写 我当时不知道原因 过了半个小时才明白过来 这期间单片机就在不断的擦写0扇 这厮居然没坏 大概是擦写8或9万次吧 呵呵呵
回复

使用道具 举报

ID:517466 发表于 2019-6-3 15:56 | 显示全部楼层
如果是不掉电的检测设备,考虑用RAM保存数据啊。
回复

使用道具 举报

ID:123289 发表于 2019-6-4 09:24 | 显示全部楼层
1、无所畏放哪里!只要你取的时候不要张冠李戴就可以了。
2、无所畏什么格式!只要你取出它之后,能按照原意去解释就可以了。
3、EPROM的擦除到是麻烦,因为它一次擦除命令擦除的数量是固定死的。所以你要其中的一、二个或一部分的做法只能如下:
将擦除固定的数量中的所有数据全部复制至RAM中,再在RAM有改数据,然后擦去这个固定区域,再将RAM中的数写入这个固定区域。
提示:通常这个固定区域是一页(512个字节),数量不一定对,你要看手册,以手册中给的参数为准!
回复

使用道具 举报

ID:497468 发表于 2019-6-4 13:06 来自手机 | 显示全部楼层
首先感谢各位的回贴
回复

使用道具 举报

ID:497468 发表于 2019-6-4 22:12 来自手机 | 显示全部楼层
ne5532 发表于 2019-6-4 13:06
首先感谢各位的回贴

今天仔细看了6675的规格书,他采集一次,需要零点22秒.我预计做0.5秒采集一次,一共采集六个通道,采集时长10分钟.数据格式是双字节,预计一次需要15000个字节.依次采集六个通道,满256次存储一次,直到时间结束停止采集并储存,因为要掉电工作,所以的话必须要存在eepron内,预计每天使用3次,十万次够用了,   上面大侠说存储的话会速度比较慢,假如我用两个单片机,一个采集一个专门用于存储,这样效率会不会速度会不会快点?如果用SPI接口的外部存储,有什么型号推荐?
回复

使用道具 举报

ID:497468 发表于 2019-6-9 21:06 | 显示全部楼层
ne5532 发表于 2019-6-4 22:12
今天仔细看了6675的规格书,他采集一次,需要零点22秒.我预计做0.5秒采集一次,一共采集六个通道,采集时 ...

自己做了一个采集的程序,现在只有一个通道,采集256个数据存贮一次,把一个INT分成二个CHAR存贮,然后用读出用串口发送到电脑上,用串口助手读出来,暂时没有发现有问题,数据基本上是对的. 因最终的想法是要和6个通道来测试,现在有个问题想要各位帮忙?   
1,如果用6通道来测温,6片6675可以一次读数据吗,还是只能一片片的读温度数据,
2,如果6片依次读数据,那6675的读取值为0.17S一次,读一圈不就要1S多了,是这样理解吗?
3,如果6片的数据,是依次读取放到一个6个数组中,还是放到256
回复

使用道具 举报

ID:745081 发表于 2020-5-6 10:42 | 显示全部楼层
ne5532 发表于 2019-6-9 21:06
自己做了一个采集的程序,现在只有一个通道,采集256个数据存贮一次,把一个INT分成二个CHAR存贮,然后用读出 ...

可不可以给个联系方式
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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