Как использовать Arduino EEPROM для сохранения данных между циклами питания

Знаете ли вы, Arduino может хранить данные, когда он выключен? Не скетч хранится во флеш-памяти. Я говорю о переменных данных в EEPROM. Присоединяйтесь ко мне, я покажу вам, как читать и писать в него, и что он может сделать для ваших проектов.

Если вы новичок в Arduino, обязательно ознакомьтесь с нашим руководством для начинающих

,

Что такое EEPROM?

EEPROM означает электрически стираемое программируемое постоянное запоминающее устройство. Это тип энергонезависимой памяти. Не беспокойтесь, если вы не понимаете, что это значит. Он просто сохраняет данные даже при отключенном питании (в отличие от оперативной памяти

, который нуждается в электричестве, чтобы сохранить любые данные).

Пример EEPROM

EEPROM встроен в множество процессоров, таких как программируемая пользователем вентильная матрица (FPGA), используемая в Matrix Creator

Пи хат. Все Arduinos имеют EEPROM, но емкость зависит от модели. Обязательно посмотрите наше руководство по покупке

для более подробной информации о каждой доске.

Как это работает?

EEPROM электрически стирается и программируется с использованием Фаулер-Нордхайм туннелирование. Вам не нужно знать технические детали, чтобы иметь возможность использовать его. Основная предпосылка заключается в том, что электричество используется для изменения двоичных данных (что является двоичным

). Его можно читать, стирать и переписывать в электронном виде.

К счастью, язык Arduino позволяет легко изменять данные, и все это без какой-либо степени в области компьютерных наук.

EEPROM Close Up

Продолжительность жизни

Хотя EEPROM легко использовать в Arduino, он имеет ограниченный срок службы. EEPROM предназначен для обработки 100 000 циклов чтения / стирания. Это означает, что вы можете записывать, а затем стирать / перезаписывать данные 100 000 раз, прежде чем ЭСППЗУ станет нестабильным. В действительности полупроводники Atmel (производители Arduino «Chip») могут обрабатывать большее или меньшее количество циклов, в зависимости от допусков каждого процессора.

EEPROM Close Up

Как только место было написано и стерто слишком много раз, оно может стать ненадежным. Он может не возвращать правильные данные или возвращать значение из соседнего бита.

Это может звучать как много записей, но может быть легко достичь этого предела, если читать и писать программно (в петля, например). Чтение данных не ухудшает кремний, только письмо делает. Вы можете читать данные из EEPROM столько, сколько хотите, без страха!

Важно отметить, что этот предел применяется к каждой ячейке памяти. Ваш Arduino может иметь 1000 или более ячеек памяти, доступных в EEPROM, поэтому, если вы пишете слишком много раз в одну ячейку, это влияет только на эту ячейку, а не на любую другую. Позже я буду обсуждать выравнивание износа, который может уменьшить износ EEPROM, равномерно распределяя данные — то, что SSD

использовать.

Для чего это нужно?

EEPROM невероятно полезен для ваших проектов Arduino. Поскольку он запоминает данные, даже когда питание отключено, вы можете сохранить состояние Arduino. Может быть, вы могли бы построить лазерную башню

который помнит свою позицию или сколько осталось боеприпасов. Вы можете использовать его для управления своими приборами

и зарегистрируйте, сколько раз ваше устройство было активировано.

EEPROM лучше всего подходит для таких вещей, как настройки или рекорды. Если вы хотите регулярно писать сложные данные, возможно, подумайте о сетевом экране

(со встроенным SD-слотом) или Raspberry Pi

,

EEPROM Close Up

Прочти и напиши

Теперь, когда теория вышла из-под контроля, давайте посмотрим, как читать и записывать некоторые данные! Во-первых, включите библиотеку (это идет с IDE Arduino):

#include 

Теперь напишите некоторые данные:

EEPROM.write(0, 12);

Это пишет номер 12 в EEPROM . Каждая запись занимает 3,3 миллисекунды (Миз, 1000 мс = 1 секунда). Обратите внимание, как вы не можете писать письма (голец), разрешены только цифры от нуля до 255. Вот почему EEPROM идеально подходит для настроек или рекордов, но не так хорош для имен игроков или слов. С помощью этого метода можно сохранить текст (вы можете сопоставить каждую букву алфавита с числом), однако вам необходимо иметь несколько ячеек памяти — одно место для каждой буквы.

Вот как вы читаете эти данные:

EEPROM.read(0);

Ноль — это адрес, который вы написали ранее. Если вы не написали адрес раньше, он вернет максимальное значение (255).

Есть несколько более полезных методов. Скажем, вы хотите сохранить десятичное место или строку:

EEPROM.put(2,"12.67");

Это позволяет записывать данные в разные места — это легко написать самостоятельно, но, тем не менее, удобно. Вам все равно нужно будет отслеживать количество мест, в которые оно записано, чтобы случайно не перезаписать ваши данные! Вы должны использовать получить метод для получения этих данных снова:

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

Значение из get сохраняется в float е переменная. Обратите внимание, как это инициализируется с 0.00f в качестве значения. е позволяет компилятору знать, что вы можете хранить большое число в этой переменной, поэтому он устанавливает некоторые дополнительные конфигурации во время компиляции.

Документация EEPROM на веб-сайте Arduino содержит множество других примеров.

Выравнивание износа

Выравнивание износа — это метод, используемый для уменьшения износа и увеличения срока службы EEPROM. Если вы работаете только над небольшим проектом, вам не нужно об этом беспокоиться.

EEPROM Close Up

Самое простое, что вы можете сделать, чтобы сохранить жизнь EEPROM, — это ограничить ваши записи определенным местом. Вы можете сделать это, сначала прочитав адрес, и, если значение, которое вы хотите записать, уже присутствует, нет необходимости записывать его снова (помните, что чтение данных не вредит). Вот как вы это сделаете:

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

Это довольно простой код, однако он работает только для целых чисел! Вместо того, чтобы заново изобретать колесо, используйте функцию, встроенную в библиотеку Edurom для Arduino:

EEPROM.update(address, val);

Этот метод имеет точно такую ​​же подпись, что и записывать метод, хотя это может резко сократить количество необходимых записей!

Если вам нужно записать много данных и беспокоиться об износе кремния, вы можете отслеживать, сколько записей вы делаете, хотя при этом используется больше данных. Вот грубая реализация в псевдокоде:

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

Вам нужно будет сохранить address и writeCount в EEPROM (и writeCount нужно будет разделить по адресам). В большинстве случаев этот уровень защиты не будет необходим. Arduinos также очень дешевы, поэтому вам может быть проще купить резервную копию!

Теперь вы должны знать достаточно, чтобы сделать несколько потрясающих проектов. Дайте нам знать, если вы сделаете что-нибудь классное! Можете ли вы распознать все устройства на картинках? Оставьте нам комментарий ниже!

Ссылка на основную публикацию
Adblock
detector