標(biāo)題: 關(guān)于單片機(jī)溫度數(shù)據(jù)的存貯問題 [打印本頁]

作者: ne5532    時間: 2019-6-2 20:09
標(biāo)題: 關(guān)于單片機(jī)溫度數(shù)據(jù)的存貯問題
上一期用6675做了一個溫度采集的程序,現(xiàn)在想把溫度的數(shù)據(jù)存貯起來,放到電腦上做一個曲線顯示,  剛學(xué)會EEPRON的應(yīng)用,但不知這個如何寫,我的想法是這樣的.:
1, 每隔1S采集一個數(shù)據(jù),然后把這個數(shù)據(jù)存起來, 我用的是STC15W4K系列的單片機(jī),有42K的EEPRON,  EEPRON是512個字節(jié)為一個扇區(qū),我要建一個512的數(shù)組嗎? 因網(wǎng)上沒有看到類似的例子,煩請大俠給我一個相關(guān)的思路或例子的鏈接.
2,開一個512的數(shù)組緩存,用完就要清零,如何一次可以把整個數(shù)組全部清零呢,
3,如何把EEPRON的用過的數(shù)據(jù)一次清零呢,可能從第二個扇區(qū)開始.直接用擦除的方法嗎?

因本人是搞硬件的,自學(xué)的C語言,所以是個菜鳥,還請大俠們多多指教

作者: wulin    時間: 2019-6-2 21:13
EEPROM是用于掉電保存數(shù)據(jù)用的。因為STC15W系列單片機(jī)的EEPROM更新一次數(shù)據(jù),哪怕只一個字節(jié)也要刪除一整個扇區(qū)。通常做法是先把某扇區(qū)的有效數(shù)據(jù)全部讀出保存在一個緩存數(shù)組中,更新其中需要修改的部分?jǐn)?shù)據(jù)后再全部寫入原扇區(qū)。從你敘述的情況不必使用EEPROM,就用一個數(shù)組直接保存每隔1S采集的數(shù)據(jù)。
作者: honey_teck    時間: 2019-6-2 21:42
像這數(shù)據(jù)種數(shù)據(jù)不需要存到EEPROM里,你應(yīng)該在RAM區(qū)里開辟一個區(qū),比如100或更多,滿的時候使用通信手段發(fā)出去給電腦,然后RAM區(qū)再清零。EEPROM是有壽命的,像這種數(shù)據(jù)更新頻繁的場合,不建議存到EEPROM里
作者: dzbj    時間: 2019-6-2 22:34
1. 如果你要一次寫那么多進(jìn)去 就需要建立一個那么大的數(shù)組 STC的手冊說片內(nèi)EEPROM不支持單字節(jié)寫入 如果要寫一個字節(jié) 應(yīng)該在數(shù)組(我管它叫緩沖區(qū))內(nèi)修改你需要的位 然后擦除扇區(qū) 再一起寫入 從這點看 也有必要建立數(shù)組 畢竟讀出來也需要時間 我嘗試過不擦除直接寫 結(jié)果就是亂七八糟的數(shù) 和寫進(jìn)去的不一樣

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

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

這種片內(nèi)的EEPROM不如24c02之類的好用 但至少我用起來 覺得比外置的快 你應(yīng)該嘗試多用幾個扇區(qū)把數(shù)據(jù)分開寫 然后程序里規(guī)劃一下 能不寫EEPROM盡量不 512個數(shù)據(jù)挺耽誤時間的 人能感覺出執(zhí)行的延遲 我曾經(jīng)做一個測試的時候就干過和你一樣的事 寫了500個數(shù)據(jù)到EEPROM里然后回去讀出來分析
作者: dzbj    時間: 2019-6-2 22:41
補(bǔ)充 如果你一定要寫那么多數(shù)據(jù)保存下來 干嘛不考慮一下SD卡呢 那東西容量大多了 還是FAT文件格式

沙發(fā)的建議你也可以考慮 不過片內(nèi)EEPROM的壽命貌似還行 我有一次干個傻事 程序?qū)戝e了 設(shè)計的0扇第0位是初始化標(biāo)記 讀卻是2扇第0位 單片機(jī)起動后檢測到運(yùn)行參數(shù)沒有初始化 就反復(fù)調(diào)用code往0扇寫 我當(dāng)時不知道原因 過了半個小時才明白過來 這期間單片機(jī)就在不斷的擦寫0扇 這廝居然沒壞 大概是擦寫8或9萬次吧 呵呵呵
作者: suncat0504    時間: 2019-6-3 15:56
如果是不掉電的檢測設(shè)備,考慮用RAM保存數(shù)據(jù)啊。
作者: yzwzfyz    時間: 2019-6-4 09:24
1、無所畏放哪里!只要你取的時候不要張冠李戴就可以了。
2、無所畏什么格式!只要你取出它之后,能按照原意去解釋就可以了。
3、EPROM的擦除到是麻煩,因為它一次擦除命令擦除的數(shù)量是固定死的。所以你要其中的一、二個或一部分的做法只能如下:
將擦除固定的數(shù)量中的所有數(shù)據(jù)全部復(fù)制至RAM中,再在RAM有改數(shù)據(jù),然后擦去這個固定區(qū)域,再將RAM中的數(shù)寫入這個固定區(qū)域。
提示:通常這個固定區(qū)域是一頁(512個字節(jié)),數(shù)量不一定對,你要看手冊,以手冊中給的參數(shù)為準(zhǔn)!
作者: ne5532    時間: 2019-6-4 13:06
首先感謝各位的回貼
作者: ne5532    時間: 2019-6-4 22:12
ne5532 發(fā)表于 2019-6-4 13:06
首先感謝各位的回貼

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

作者: ne5532    時間: 2019-6-9 21:06
ne5532 發(fā)表于 2019-6-4 22:12
今天仔細(xì)看了6675的規(guī)格書,他采集一次,需要零點22秒.我預(yù)計做0.5秒采集一次,一共采集六個通道,采集時 ...

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

可不可以給個聯(lián)系方式




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1