Reklama

Czy wiesz, że Arduino może przechowywać dane, gdy jest wyłączone? Nie szkic zapisany w pamięci flash. Mówię o zmiennych danych w EEPROM. Dołącz do mnie, gdy pokażę ci, jak czytać i pisać, oraz co może zrobić dla twoich projektów.

Jeśli jesteś nowy w Arduino, koniecznie sprawdź nasze Przewodnik dla początkujących Pierwsze kroki z Arduino: przewodnik dla początkującychArduino to platforma prototypowania elektroniki typu open source oparta na elastycznym, łatwym w użyciu sprzęcie i oprogramowaniu. Jest przeznaczony dla artystów, projektantów, hobbystów i wszystkich zainteresowanych tworzeniem interaktywnych obiektów lub środowisk. Czytaj więcej .

Co to jest EEPROM?

EEPROM oznacza elektrycznie kasowana programowalna pamięć tylko do odczytu. Jest to rodzaj nieulotnej pamięci. Nie martw się, jeśli nie rozumiesz, co to wszystko oznacza. Po prostu przechowuje dane nawet przy odłączonej mocy (w przeciwieństwie do Baran Szybki i brudny przewodnik po pamięci RAM: co musisz wiedziećPamięć RAM jest kluczowym elementem każdego komputera, ale może być myląca. Rozbijamy to na łatwe do zrozumienia warunki, które zrozumiesz.

instagram viewer
Czytaj więcej , który potrzebuje energii elektrycznej, aby zatrzymać wszelkie dane).

Przykład EEPROM

EEPROM jest wbudowany w niezliczoną liczbę procesorów, takich jak programowalna tablica bramek (FPGA) używana w Matrix Creator Matrix Creator for Raspberry Pi ReviewMatrix Creator to szwajcarski scyzoryk dla twojego Pi, z 15 czujnikami, pakietem protokołów komunikacyjnych, pierścieniem diod RGB, zestawem mikrofonów i nie tylko! Czytaj więcej Pi HAT. Wszystkie Arduinos mają dostępną pamięć EEPROM, ale pojemność różni się w zależności od modelu. Upewnij się, że spojrzysz na nasze przewodnik zakupu Poradnik kupujący Arduino: Którą deskę powinieneś dostać?Istnieje tak wiele różnych rodzajów tablic Arduino, że wybaczono by ci, że jesteś zdezorientowany. Które powinieneś kupić dla swojego projektu? Pomóż nam, korzystając z tego przewodnika zakupów Arduino! Czytaj więcej po więcej szczegółów na temat każdej planszy.

Jak to działa?

EEPROM jest elektrycznie kasowany i programowany za pomocą Tunelowanie Fowler-Nordheim. Nie musisz znać szczegółów technicznych, aby móc z niego korzystać. Podstawową przesłanką jest to, że energia elektryczna jest wykorzystywana do zmiany danych binarnych (co jest binarne Co to jest binarny? [Technologia wyjaśniona]Biorąc pod uwagę, że pliki binarne są tak absolutnie fundamentalne dla istnienia komputerów, wydaje się dziwne, że nigdy wcześniej nie zajmowaliśmy się tym tematem - więc dzisiaj pomyślałem, że dam krótki przegląd tego, co binarne ... Czytaj więcej ). Można go czytać, usuwać i ponownie zapisywać elektronicznie.

Na szczęście Język Arduino ułatwia zmianę danych, wszystko bez konieczności posiadania dyplomu z informatyki.

EEPROM Close Up

Długość życia

Chociaż pamięć EEPROM jest łatwa w użyciu w Arduino, ma ona ograniczoną żywotność. Pamięć EEPROM obsługuje 100 000 cykli odczytu / kasowania. Oznacza to, że możesz zapisywać, a następnie kasować / ponownie zapisywać dane 100 000 razy, zanim pamięć EEPROM stanie się niestabilna. W rzeczywistości, Atmel (producenci półprzewodników „Chip” Arduino) mogą obsługiwać większą lub mniejszą liczbę cykli, w zależności od tolerancji każdego procesora.

EEPROM Close Up

Gdy miejsce zostanie zapisane i usunięte zbyt wiele razy, może stać się niewiarygodne. Może nie zwrócić poprawnych danych lub zwrócić wartość z sąsiedniego bitu.

Może to zabrzmieć jak wiele zapisów, ale osiągnięcie tego limitu może być łatwe, jeśli programowo czytasz i piszesz (w pętla, na przykład). Odczyt danych nie degraduje krzemu, robi tylko pismo. Możesz bez obaw odczytywać dane z EEPROM!

Należy pamiętać, że ten limit dotyczy każdej lokalizacji pamięci. Twoje Arduino może mieć 1000 lub więcej lokalizacji pamięci dostępnych w EEPROM, więc jeśli piszesz zbyt wiele razy w jednej lokalizacji, dotyczy to tylko tej lokalizacji, a nie żadnej z pozostałych. Później będę dyskutować poziomowanie zużycia, co może zmniejszyć zużycie pamięci EEPROM przez równomierną dystrybucję danych - coś takiego Dyski SSD Jak oszacować pozostałą żywotność dysku SSDWszystkie dyski SSD mają ograniczoną żywotność z powodu cykli zapisu (choć ta żywotność jest znacznie dłuższa niż mogłoby się wydawać). Oto jak możesz oszacować, jak blisko jesteś końca. Czytaj więcej zrobić użytek z.

Do czego to jest przydatne?

EEPROM jest niezwykle przydatny w twoich projektach Arduino. Ponieważ pamięta dane, nawet po odłączeniu zasilania, możesz zapisać stan Arduino. Może mógłbyś zbudować głowica laserowa Pew pew! Jak zbudować wieżyczkę laserową z ArduinoCzy jesteś znudzony? Równie dobrze może zbudować wieżę laserową. Czytaj więcej pamięta swoją pozycję lub ilość „amunicji”. Możesz to wykorzystać kontroluj swoje urządzenia Steruj urządzeniami z Arduino: początek automatyki domowejOstatnim razem pokazałem ci kilka sposobów na kontrolowanie mowy projektów Arduino za pomocą SiriProxy, OS X's wbudowane elementy mówione oraz niektóre skrypty Automatora, a nawet dedykowany sprzęt do rozpoznawania głosu żeton. JA... Czytaj więcej i zaloguj, ile razy urządzenie zostało aktywowane.

EEPROM najlepiej nadaje się do takich ustawień, jak wysokie wyniki. Jeśli chcesz regularnie pisać złożone dane, może warto rozważyć osłona Ethernet Nadaj projektowi Arduino własny mini-serwer z osłoną EthernetJakiś czas temu pokazałem ci, jak skonfigurować system kontroli Internetu dla twojego Arduino - ale musiał pozostać podłączony do komputera przez USB, aby utrzymać połączenie internetowe ... Czytaj więcej (z wbudowanym gniazdem SD) lub a Raspberry Pi Raspberry Pi: The Unofficial TutorialNiezależnie od tego, czy jesteś obecnym właścicielem Pi, który chce dowiedzieć się więcej, czy potencjalnym właścicielem tego urządzenia o wielkości karty kredytowej, nie jest to przewodnik, którego nie możesz przegapić. Czytaj więcej .

EEPROM Close Up

Czytaj i pisz

Teraz, gdy teoria się skończyła, spójrzmy, jak czytać i zapisywać niektóre dane! Najpierw dołącz bibliotekę (jest to dostarczane z Arduino IDE):

#zawierać 

Teraz napisz trochę danych:

EEPROM.write (0, 12);

To zapisuje liczbę 12 do lokalizacji EEPROM 0. Każdy zapis zajmuje 3,3 milisekundy (ms, 1000 ms = 1 sekunda). Zauważ, że nie możesz pisać liter (zwęglać), dozwolone są tylko liczby od zera do 255. Dlatego pamięć EEPROM jest idealna do ustawień lub najlepszych wyników, ale nie jest tak dobra do nazw graczy lub słów. Za pomocą tej metody można przechowywać tekst (można zmapować każdą literę alfabetu na liczbę), ale trzeba będzie mieć wiele lokalizacji pamięci - po jednej dla każdej litery.

Oto jak czytasz te dane:

EEPROM.read (0);

Zero to adres, na który wcześniej napisałeś. Jeśli wcześniej nie napisałeś na adres, zwróci maksymalną wartość (255).

Istnieje kilka nieco bardziej przydatnych metod. Powiedz, że chcesz zapisać miejsce po przecinku lub ciąg znaków:

EEPROM.put (2, „12,67”);

Spowoduje to zapisanie danych w wielu lokalizacjach - coś, co łatwo byłoby napisać samodzielnie, ale mimo to przydatne. Nadal będziesz musiał śledzić, w ilu lokalizacjach to zapisało, abyś nie nadpisał swoich danych! Musisz użyć otrzymać metoda ponownego pobrania tych danych:

zmiennoprzecinkowa f = 0,00f; EEPROM.get (2, f);

Wartość z get jest przechowywana w zmiennoprzecinkowym fa zmienna. Zauważ, jak to się inicjuje 0,00f jako wartość. The fa informuje kompilator, że możesz chcieć przechowywać dużą liczbę w tej zmiennej, więc konfiguruje dodatkowe konfiguracje podczas kompilacji.

The Dokumentacja EEPROM na Strona Arduino ma o wiele więcej przykładów.

Wyrównanie zużycia

Wyrównanie zużycia to technika stosowana w celu zmniejszenia zużycia i zwiększenia żywotności pamięci EEPROM. Jeśli pracujesz tylko nad małym projektem, nie musisz się tym martwić.

EEPROM Close Up

Najprostszą rzeczą, jaką możesz zrobić, aby zachować życie pamięci EEPROM, jest ograniczenie liczby zapisów do określonej lokalizacji. Możesz to zrobić, najpierw czytając adres, a jeśli wartość, którą chcesz zapisać, jest już obecna, nie musisz jej ponownie zapisywać (pamiętaj, że odczyt danych nie szkodzi). Oto jak to zrobiłbyś:

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

To dość prosty kod, ale działa tylko na liczby całkowite! Zamiast ponownie wynaleźć koło, użyj funkcji wbudowanej w bibliotekę EEPROM Arduino:

EEPROM.update (adres, val);

Ta metoda ma dokładnie taki sam podpis jak pisać metoda, chociaż może drastycznie zmniejszyć liczbę potrzebnych zapisów!

Jeśli musisz napisać dużo danych i martwisz się zużyciem krzemu, możesz śledzić, ile zapisów wykonujesz, chociaż zużywa to więcej danych. Oto przybliżona implementacja w pseudo kod:

zmienny adres = 0. var writeCount = 0 if (writeCount> 75 000) writeCount = 0 adres + = 1 EEPROM.write (adres, dane)

Będziesz musiał przechowywać adres i writeCount w EEPROM (i writeCount trzeba będzie podzielić na lokalizacje adresów). Przez większość czasu ten poziom ochrony nie będzie konieczny. Arduinos są również tak tanie, więc możesz łatwiej kupić kopię zapasową!

Powinieneś teraz wiedzieć wystarczająco dużo, aby tworzyć niesamowite projekty. Daj nam znać, jeśli zrobisz coś fajnego! Czy rozpoznajesz wszystkie urządzenia na zdjęciach? Zostaw nam komentarz poniżej!

Joe jest absolwentem informatyki na University of Lincoln w Wielkiej Brytanii. Jest profesjonalnym programistą, a kiedy nie lata latającymi dronami ani nie pisze muzyki, często można go znaleźć przy robieniu zdjęć lub tworzeniu filmów.