Найти в Дзене
Электроника и жизнь

Сохраняем массивы данных в EEPROM. Хранение картинок в EEPROM

Здравствуйте, уважаемые читатели! В одной из прошлых статей я уже рассказывал о модуле энергонезависимой памяти EEPROM 24LC512 и его подключении к Ардуино и ATtiny85. В этой статье поговорим чуть подробнее о записи и чтении целых массивов во внешнюю энергонезависимую память. В статье, где мы разбирали вывод на светодиодную матрицу различных изображений, массивы с битовым представлением картинок мы хранили во Flash памяти, используя специальную директиву PROGMEM перед названием массива. Но, данный способ отнимает существенное количество Flash памяти, которая предназначена для хранения кода скетча. В случае с Arduino UNO, где у нас 32 КБ Flash памяти это еще допустимо. Но вот в случае даже c ATtiny85, у которого всего 8 КБ Flash памяти, этот способ может быть не приемлем. В качестве альтернативы можно хранить информацию в EEPROM памяти. Причем так как объем встроенной EEPROM памяти обычно не большой, можно подключить внешнюю EEPROM память и хранить данные в ней. Дополнительным плюсом, мо

Здравствуйте, уважаемые читатели! В одной из прошлых статей я уже рассказывал о модуле энергонезависимой памяти EEPROM 24LC512 и его подключении к Ардуино и ATtiny85. В этой статье поговорим чуть подробнее о записи и чтении целых массивов во внешнюю энергонезависимую память.

Выводим записанную в модуль внешней EEPROM анимацую
Выводим записанную в модуль внешней EEPROM анимацую

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

Но, данный способ отнимает существенное количество Flash памяти, которая предназначена для хранения кода скетча. В случае с Arduino UNO, где у нас 32 КБ Flash памяти это еще допустимо. Но вот в случае даже c ATtiny85, у которого всего 8 КБ Flash памяти, этот способ может быть не приемлем.

В качестве альтернативы можно хранить информацию в EEPROM памяти. Причем так как объем встроенной EEPROM памяти обычно не большой, можно подключить внешнюю EEPROM память и хранить данные в ней. Дополнительным плюсом, может быть возможность во время работы скетча перезаписать хранимые данные, что в случае хранения массивов с директивой PROGMEM во Flash памяти, не получится. И вообще, данный модуль в DIP корпусе прекрасно размещается в точно таком же гнезде, как и восьминогие Тиньки.

Данное гнездо подходит и для ATtiny13/25/45/85 и для модулей EEPROM в DIP корпусе
Данное гнездо подходит и для ATtiny13/25/45/85 и для модулей EEPROM в DIP корпусе

Т.е. можно его использовать как аналог SD карты и, например, уже в готовом устройстве заменить на другой такой модуль с другими картинками. И модули можно соединять последовательно до 8 шт, увеличивая их суммарную емкость. В данной статье я буду использовать модуль памяти 24LC512. Напомню, что цифра 512 модуля означает, что размер памяти модуля 512 килобит, т.е. 64 килобайта.

Параметры модуля памяти 24LC512
Параметры модуля памяти 24LC512

На данный момент это старшая модель в линейке чипов последовательной энергонезависимой памяти от компании Microchip (https://www.microchip.com/wwwproducts/en/24LC512). Есть модели с объемом памяти 256 килобит (32 килобайта), 64 килобита (8 килобайт) и менее.

Распиновка модуля памяти 24LC512
Распиновка модуля памяти 24LC512

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

Схема подключения модуля памяти 24LC512 к Arduino UNO
Схема подключения модуля памяти 24LC512 к Arduino UNO

Для записи массивов изображений в EEPROM возьмем 2 анимации, которые ранее хранили во Flash памяти, используя директиву PROGMEM. В коде скетча, каждый цвет, при помощи указателей, разбивается на байты и записывается в энергонезависимую память. Ссылки на скетчи в конце статьи.

Скетч
Скетч

Загружаем скетч в Ардуино, открываем Монитор порта, дожидаемся окончания записи. И видим, что время записи составило 2670 мс.

Т.е. около 2,5 секунд. В дальнейшем, когда мы оптимизируем наши картинки для светодиодной матрицы, чтобы каждый цвет занимал 1 байт, скорость загрузки существенно увеличится.

Монитор порта
Монитор порта

Теперь перейдем к скетчу, в котором будем считывать информацию из EEPROM памяти и выводить картинку на светодиодную матрицу. По нажатию на кнопку энкодера, будем переходить к следующей анимации.

Подключаем к Ардуино светодиодную матрицу и энкодер по следующей схеме:

 Схема подключения Ардуино, светодиодной матрицы и энкодера
Схема подключения Ардуино, светодиодной матрицы и энкодера

После загрузки скетча и подачи питания на схему у нас воспроизводится первая анимация из двух кадров – бьющееся сердце.

Анимация бьющегося сердца
Анимация бьющегося сердца

Нажимаем на кнопку энкодера и переходим ко второй анимации - эффекту огня.

Анимация огня
Анимация огня

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

Скетч для записи в EEPROM - https://drive.google.com/file/d/1pARM...

Скетч для считывания из EEPROM - https://drive.google.com/file/d/1KdiZ...

Видео, по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!