找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3670|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)溫度數(shù)據(jù)的存貯問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:497468 發(fā)表于 2019-6-2 20:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
上一期用6675做了一個(gè)溫度采集的程序,現(xiàn)在想把溫度的數(shù)據(jù)存貯起來,放到電腦上做一個(gè)曲線顯示,  剛學(xué)會(huì)EEPRON的應(yīng)用,但不知這個(gè)如何寫,我的想法是這樣的.:
1, 每隔1S采集一個(gè)數(shù)據(jù),然后把這個(gè)數(shù)據(jù)存起來, 我用的是STC15W4K系列的單片機(jī),有42K的EEPRON,  EEPRON是512個(gè)字節(jié)為一個(gè)扇區(qū),我要建一個(gè)512的數(shù)組嗎? 因網(wǎng)上沒有看到類似的例子,煩請(qǐng)大俠給我一個(gè)相關(guān)的思路或例子的鏈接.
2,開一個(gè)512的數(shù)組緩存,用完就要清零,如何一次可以把整個(gè)數(shù)組全部清零呢,
3,如何把EEPRON的用過的數(shù)據(jù)一次清零呢,可能從第二個(gè)扇區(qū)開始.直接用擦除的方法嗎?

因本人是搞硬件的,自學(xué)的C語言,所以是個(gè)菜鳥,還請(qǐng)大俠們多多指教
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2019-6-2 21:13 | 只看該作者
EEPROM是用于掉電保存數(shù)據(jù)用的。因?yàn)镾TC15W系列單片機(jī)的EEPROM更新一次數(shù)據(jù),哪怕只一個(gè)字節(jié)也要?jiǎng)h除一整個(gè)扇區(qū)。通常做法是先把某扇區(qū)的有效數(shù)據(jù)全部讀出保存在一個(gè)緩存數(shù)組中,更新其中需要修改的部分?jǐn)?shù)據(jù)后再全部寫入原扇區(qū)。從你敘述的情況不必使用EEPROM,就用一個(gè)數(shù)組直接保存每隔1S采集的數(shù)據(jù)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:415123 發(fā)表于 2019-6-2 21:42 | 只看該作者
像這數(shù)據(jù)種數(shù)據(jù)不需要存到EEPROM里,你應(yīng)該在RAM區(qū)里開辟一個(gè)區(qū),比如100或更多,滿的時(shí)候使用通信手段發(fā)出去給電腦,然后RAM區(qū)再清零。EEPROM是有壽命的,像這種數(shù)據(jù)更新頻繁的場(chǎng)合,不建議存到EEPROM里
回復(fù)

使用道具 舉報(bào)

地板
ID:47286 發(fā)表于 2019-6-2 22:34 | 只看該作者
1. 如果你要一次寫那么多進(jìn)去 就需要建立一個(gè)那么大的數(shù)組 STC的手冊(cè)說片內(nèi)EEPROM不支持單字節(jié)寫入 如果要寫一個(gè)字節(jié) 應(yīng)該在數(shù)組(我管它叫緩沖區(qū))內(nèi)修改你需要的位 然后擦除扇區(qū) 再一起寫入 從這點(diǎn)看 也有必要建立數(shù)組 畢竟讀出來也需要時(shí)間 我嘗試過不擦除直接寫 結(jié)果就是亂七八糟的數(shù) 和寫進(jìn)去的不一樣

2.第一種方法
for(i=0;i<512;i++)
{每一位=0
寫入扇區(qū)
}
第二種方法
擦除扇區(qū) 然后再讀出扇區(qū)
第三種方法
直接重啟系統(tǒng) 內(nèi)存里的東西就全沒了 所以你可以考慮關(guān)機(jī)前或者特定的條件下寫入 然后重啟

3.直接擦除整個(gè)扇區(qū)是最快的 但這個(gè)問題和第2個(gè)問題的第2個(gè)方法一樣有個(gè)問題 STC默認(rèn)是用FF填充 如果你一定要是0的話 就需要手動(dòng)操作 也就是用for語句之類的強(qiáng)制清零再寫入

這種片內(nèi)的EEPROM不如24c02之類的好用 但至少我用起來 覺得比外置的快 你應(yīng)該嘗試多用幾個(gè)扇區(qū)把數(shù)據(jù)分開寫 然后程序里規(guī)劃一下 能不寫EEPROM盡量不 512個(gè)數(shù)據(jù)挺耽誤時(shí)間的 人能感覺出執(zhí)行的延遲 我曾經(jīng)做一個(gè)測(cè)試的時(shí)候就干過和你一樣的事 寫了500個(gè)數(shù)據(jù)到EEPROM里然后回去讀出來分析
回復(fù)

使用道具 舉報(bào)

5#
ID:47286 發(fā)表于 2019-6-2 22:41 | 只看該作者
補(bǔ)充 如果你一定要寫那么多數(shù)據(jù)保存下來 干嘛不考慮一下SD卡呢 那東西容量大多了 還是FAT文件格式

沙發(fā)的建議你也可以考慮 不過片內(nèi)EEPROM的壽命貌似還行 我有一次干個(gè)傻事 程序?qū)戝e(cuò)了 設(shè)計(jì)的0扇第0位是初始化標(biāo)記 讀卻是2扇第0位 單片機(jī)起動(dòng)后檢測(cè)到運(yùn)行參數(shù)沒有初始化 就反復(fù)調(diào)用code往0扇寫 我當(dāng)時(shí)不知道原因 過了半個(gè)小時(shí)才明白過來 這期間單片機(jī)就在不斷的擦寫0扇 這廝居然沒壞 大概是擦寫8或9萬次吧 呵呵呵
回復(fù)

使用道具 舉報(bào)

6#
ID:517466 發(fā)表于 2019-6-3 15:56 | 只看該作者
如果是不掉電的檢測(cè)設(shè)備,考慮用RAM保存數(shù)據(jù)啊。
回復(fù)

使用道具 舉報(bào)

7#
ID:123289 發(fā)表于 2019-6-4 09:24 | 只看該作者
1、無所畏放哪里!只要你取的時(shí)候不要張冠李戴就可以了。
2、無所畏什么格式!只要你取出它之后,能按照原意去解釋就可以了。
3、EPROM的擦除到是麻煩,因?yàn)樗淮尾脸畈脸臄?shù)量是固定死的。所以你要其中的一、二個(gè)或一部分的做法只能如下:
將擦除固定的數(shù)量中的所有數(shù)據(jù)全部復(fù)制至RAM中,再在RAM有改數(shù)據(jù),然后擦去這個(gè)固定區(qū)域,再將RAM中的數(shù)寫入這個(gè)固定區(qū)域。
提示:通常這個(gè)固定區(qū)域是一頁(512個(gè)字節(jié)),數(shù)量不一定對(duì),你要看手冊(cè),以手冊(cè)中給的參數(shù)為準(zhǔn)!
回復(fù)

使用道具 舉報(bào)

8#
ID:497468 發(fā)表于 2019-6-4 13:06 來自觸屏版 | 只看該作者
首先感謝各位的回貼
回復(fù)

使用道具 舉報(bào)

9#
ID:497468 發(fā)表于 2019-6-4 22:12 來自觸屏版 | 只看該作者
ne5532 發(fā)表于 2019-6-4 13:06
首先感謝各位的回貼

今天仔細(xì)看了6675的規(guī)格書,他采集一次,需要零點(diǎn)22秒.我預(yù)計(jì)做0.5秒采集一次,一共采集六個(gè)通道,采集時(shí)長(zhǎng)10分鐘.數(shù)據(jù)格式是雙字節(jié),預(yù)計(jì)一次需要15000個(gè)字節(jié).依次采集六個(gè)通道,滿256次存儲(chǔ)一次,直到時(shí)間結(jié)束停止采集并儲(chǔ)存,因?yàn)橐綦姽ぷ�,所以的話必須要存在eepron內(nèi),預(yù)計(jì)每天使用3次,十萬次夠用了,   上面大俠說存儲(chǔ)的話會(huì)速度比較慢,假如我用兩個(gè)單片機(jī),一個(gè)采集一個(gè)專門用于存儲(chǔ),這樣效率會(huì)不會(huì)速度會(huì)不會(huì)快點(diǎn)?如果用SPI接口的外部存儲(chǔ),有什么型號(hào)推薦?
回復(fù)

使用道具 舉報(bào)

10#
ID:497468 發(fā)表于 2019-6-9 21:06 | 只看該作者
ne5532 發(fā)表于 2019-6-4 22:12
今天仔細(xì)看了6675的規(guī)格書,他采集一次,需要零點(diǎn)22秒.我預(yù)計(jì)做0.5秒采集一次,一共采集六個(gè)通道,采集時(shí) ...

自己做了一個(gè)采集的程序,現(xiàn)在只有一個(gè)通道,采集256個(gè)數(shù)據(jù)存貯一次,把一個(gè)INT分成二個(gè)CHAR存貯,然后用讀出用串口發(fā)送到電腦上,用串口助手讀出來,暫時(shí)沒有發(fā)現(xiàn)有問題,數(shù)據(jù)基本上是對(duì)的. 因最終的想法是要和6個(gè)通道來測(cè)試,現(xiàn)在有個(gè)問題想要各位幫忙?   
1,如果用6通道來測(cè)溫,6片6675可以一次讀數(shù)據(jù)嗎,還是只能一片片的讀溫度數(shù)據(jù),
2,如果6片依次讀數(shù)據(jù),那6675的讀取值為0.17S一次,讀一圈不就要1S多了,是這樣理解嗎?
3,如果6片的數(shù)據(jù),是依次讀取放到一個(gè)6個(gè)數(shù)組中,還是放到256
回復(fù)

使用道具 舉報(bào)

11#
ID:745081 發(fā)表于 2020-5-6 10:42 | 只看該作者
ne5532 發(fā)表于 2019-6-9 21:06
自己做了一個(gè)采集的程序,現(xiàn)在只有一個(gè)通道,采集256個(gè)數(shù)據(jù)存貯一次,把一個(gè)INT分成二個(gè)CHAR存貯,然后用讀出 ...

可不可以給個(gè)聯(lián)系方式
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表