如何使用arduino eeprom在電源週期之間儲存資料

你知道Arduino在關閉時可以儲存資料嗎?我在說EEPROM,所以請跟我一起,我教你如何讀寫。...

你知道Arduino關閉後可以存儲數據嗎?不是存儲在閃存中的草圖。我說的是EEPROM中的可變數據。加入我,我向你展示如何讀寫它,以及它能為你的項目做些什麼。

arduino-eeprom-save-data

如果你是新來Arduino的,一定要看看我們的初學者指南。

什麼是電可擦可編程只讀存儲器(eeprom)?

EEPROM代表電可擦除可編程只讀存儲器。這是一種非易失性存儲器。如果你不明白這意味著什麼,別擔心。它只是簡單地存儲數據,即使在斷電的情況下(不像RAM,它需要電力來保留任何數據)。

EEPROM example shot

EEPROM內置於無數的處理器中,例如矩陣生成器Pi HAT中使用的現場可編程門陣列(FPGA)。所有Arduinos都提供EEPROM,但容量因型號而異。請務必查看我們的購買指南,瞭解每塊板的更多詳情。

它是如何工作的?

EEPROM是電擦除和編程使用福勒諾德海姆隧道。你不需要知道技術細節就可以使用它。基本前提是電是用來改變二進制數據(什麼是二進制的)。它可以通過電子方式讀取、擦除和重寫。

幸運的是,Arduino語言使更改數據變得很容易,所有這些都不需要計算機科學學位。

EEPROM Close Up

預期壽命

雖然在Arduino中使用EEPROM很容易,但它的使用壽命有限。EEPROM被指定處理100000個讀/擦除週期。這意味著在EEPROM變得不穩定之前,您可以寫入然後擦除/重新寫入數據100000次。實際上,Atmel(Arduino“芯片”的**商)半導體可以處理更高或更低的週期數,這取決於每個處理器的公差。

EEPROM Close Up

一旦一個位置被多次寫入和擦除,它就會變得不可靠。它可能不會返回正確的數據,或從相鄰位返回值。

這聽起來像是寫了很多東西,但是如果以編程方式讀寫(例如在循環中),很容易達到這個極限。讀取數據不會降低硅的質量,只有寫入才能。您可以讀取數據從EEPROM的,你喜歡沒有恐懼!

需要注意的是,這個限制適用於每個內存位置。您的Arduino在EEPROM中可能有1000個或更多的可用內存位置,因此如果您對一個位置寫入太多次,則只會影響該位置,而不會影響其他任何位置。稍後我將討論磨損均衡,它可以通過均勻分佈數據來減少EEPROM的磨損——SSD可以利用這一點。

它有什麼用?

EEPROM對於Arduino項目非常有用。因為即使斷電,它也能記住數據,所以可以存儲Arduino的狀態。也許你可以建造一個激光炮塔,它可以記住自己的位置或者剩餘的“**”數量。您可以使用它來控制設備,並記錄設備被激活的次數。

EEPROM最適合設置或高分。如果您想定期寫入複雜數據,可以考慮使用以太網屏蔽(內置SD插槽)或Raspberry Pi。

EEPROM Close Up

讀寫

現在理論已經過時了,讓我們來看看如何讀寫一些數據!首先,包括庫(這是ArduinoIDE附帶的):

#include <EEPROM.h>

現在寫一些數據:

EEPROM.write(0, 12);

這將數字12寫入EEPROM位置0。每次寫入需要3.3毫秒(ms,1000ms=1秒)。注意你不能寫字母(char),只能寫從0到255的數字。這就是為什麼EEPROM是理想的設置或高分,但不是那麼好的球員姓名或文字。可以使用這種方法存儲文本(可以將字母表中的每個字母映射到一個數字),但是需要有多個內存位置——每個字母對應一個位置。

以下是您如何讀取這些數據的:

EEPROM.read(0);

零是您以前寫過的地址。如果您以前沒有寫入地址,它將返回最大值(255)。

有一些稍微有用的方法可用。假設要存儲小數點或字符串:

EEPROM.put(2,"12.67");

這會將數據寫入多個位置——這很容易自己編寫,但也很方便。您仍然需要跟蹤它寫入了多少個位置,這樣您就不會意外地覆蓋數據了!必須使用get方法再次檢索此數據:

float f = 0.00f;EEPROM.get(2, f);

get中的值存儲到float f變量中。注意這是如何用0.00f作為值初始化的。f讓編譯器知道您可能需要在這個變量中存儲大量的數據,因此它在編譯期間設置了一些額外的配置。

Arduino網站上的EEPROM文檔有更多的例子。

磨損整平

磨損均衡是一種減少EEPROM磨損、提高EEPROM使用壽命的技術。如果你只是在做一個小項目,你可能不需要擔心這個。

EEPROM Close Up

要保持EEPROM的壽命,最簡單的方法就是將寫操作限制在特定的位置。您可以先讀取地址,如果要寫入的值已經存在,則無需再次寫入(請記住,讀取數據不會造成傷害)。下面是您將如何做到這一點:

int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); }}

這是一個相當簡單的代碼位,但它只適用於整數!與其重新發明輪子,不如使用Arduino EEPROM庫中內置的功能:

EEPROM.update(address, val);

這個方法與寫入方法具有完全相同的簽名,儘管它可能會大大減少所需的寫入次數!

如果您需要寫入大量數據,並且擔心硅片磨損,則可以跟蹤您的寫入次數,儘管這樣會使用更多數據。以下是偽代碼的粗略實現:

var address = 0var writeCount = 0if(writeCount > 75,000) writeCount = 0 address += 1EEPROM.write(address, data)

您需要將地址和writeCount存儲在EEPROM中(writeCount需要在地址位置之間拆分)。大多數情況下,這一級別的保護是沒有必要的。Arduinos也很便宜,所以您可能會發現購買備份更容易!

你現在應該知道足夠的知識來做一些很棒的項目。如果你做的很酷,就告訴我們!你能認出照片中所有的設備嗎?請在下面給我們留言!

  • 發表於 2021-03-16 14:09
  • 閱讀 ( 35 )
  • 分類:DIY

你可能感興趣的文章

阿杜伊諾(arduino)和樹莓皮(raspberry pi)的區別

關鍵區別–arduino vs raspberry pi Arduino和Raspberry Pi的主要區別在於Arduino是一個微控制器開發板,而Raspberry Pi是基於Linux作業系統的通用計算機。 選擇Arduino或Raspberry Pi取決於要開發的專案。本文討論了最常見的Arduino Uno和Raspberry Pi...

  • 發佈於 2020-10-11 03:02
  • 閲讀 ( 50 )

猛撞(ram)和只讀儲存器(rom)的區別

...樣的方法和方法來儲存資訊。RAM和ROM都是在任何計算機中使用的不同型別的儲存器,它們可以使計算機更快地訪問儲存在計算機中的資訊。每臺計算機都有一定數量的實體記憶體,以儲存資料的晶片的形式存在。 目錄 1. 概述和...

  • 發佈於 2020-10-16 15:33
  • 閲讀 ( 71 )

如何重用舊的ram模組:您可以做的7件事

... 三。將舊ram連線到arduino ...

  • 發佈於 2021-03-10 20:05
  • 閲讀 ( 60 )

為什麼一夜之間給手機充電不好

如何增加智慧**電池的電量?你可能會認為在睡覺的時候給它充電,讓它定期達到100%是有益的,但這實際上會損害你的電池,縮短它的壽命。 ...

  • 發佈於 2021-03-11 09:16
  • 閲讀 ( 50 )

我應該移除膝上型電腦電池以延長其壽命嗎?

... 膝上型電腦電池是如何工作的? ...

  • 發佈於 2021-03-12 17:36
  • 閲讀 ( 47 )

任天堂wii u擴充套件儲存,解釋道

...時都要刪除一個遊戲。因此,在這篇文章中,我們將解釋如何新增更多的儲存到您的Wii U如果你正在執行的空間不足。 ...

  • 發佈於 2021-03-12 21:41
  • 閲讀 ( 69 )

作為一個arduino初學者不要犯的10個錯誤

Arduino板,以及隨之而來的許多價格合理的微控制器,永遠改變了人們的電子愛好。曾經是超級極客的領域,擁有廣泛的電子和計算知識,現在所有人都可以使用。 ...

  • 發佈於 2021-03-13 03:20
  • 閲讀 ( 50 )

如何在任何系統上備份遊戲儲存

... 別讓這種事再發生在你身上。我們將向您展示如何備份您的遊戲儲存,這樣無論您使用何種遊戲系統,您都不會再次失去進度。 ...

  • 發佈於 2021-03-14 20:18
  • 閲讀 ( 67 )

帶arduino和rfid的diy智慧鎖

...甚至連碰都沒碰就打開了。聽起來很酷?今天我們將使用Arduino作為主幹和一些便宜的元件來構建一個簡單的基於RFID的智慧鎖。 ...

  • 發佈於 2021-03-15 03:29
  • 閲讀 ( 48 )

nand和emmc:你需要知道的關於快閃記憶體的所有知識

... 快閃記憶體是如何工作的? ...

  • 發佈於 2021-03-17 13:33
  • 閲讀 ( 40 )
cu971784
cu971784

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章