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

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

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





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





Что такое EEPROM?

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





EEPROM встроена во множество процессоров, таких как программируемая вентильная матрица (FPGA), используемая в Matrix Creator Pi HAT. У всех Arduinos есть EEPROM, но емкость зависит от модели. Обязательно ознакомьтесь с нашим руководством по покупке, чтобы получить более подробную информацию о каждой плате.

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

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



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

Ожидаемая продолжительность жизни

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





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

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





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

Для чего это полезно?

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

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

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

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

#include

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

EEPROM.write(0, 12);

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

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

В настройках прошивки uefi отсутствует Windows 10
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, - это ограничить запись определенным местом. Вы можете сделать это, сначала прочитав адрес, и если значение, которое вы хотите записать, уже присутствует, нет необходимости записывать его снова (помните, чтение данных не вредит). Вот как бы вы это сделали:

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

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

EEPROM.update(address, val);

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

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

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

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

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

Делиться Делиться Твитнуть Эл. адрес 5 советов, как зарядить ваши машины VirtualBox Linux

Устали от низкой производительности виртуальных машин? Вот что вам нужно сделать, чтобы повысить производительность VirtualBox.

Читать далее
Похожие темы
  • Сделай сам
  • Ардуино
  • Электроника
Об авторе Джо Кобурн(136 опубликованных статей)

Джо закончил факультет компьютерных наук Линкольнского университета в Великобритании. Он профессиональный разработчик программного обеспечения, и когда он не пилотирует дроны и не пишет музыку, его часто можно встретить фотографирующим или снимающим видео.

Ещё от Joe Coburn

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться