Это видео недоступно.
Сожалеем об этом.
Уроки Arduino. Работа с EEPROM памятью
HTML-код
- Опубликовано: 18 авг 2024
- В этом уроке поговорим о EEPROM в Arduino - энергонезависимой памяти для хранения настроек и прочих данных.
► Текстовый урок EEPROM и примеры: alexgyver.ru/l...
► Текстовый урок по типам данных: alexgyver.ru/l...
► Видео урок по графическим меню на OLED: • Как написать меню для ...
► Независимый тест EEPROM: chipenable.ru/...
► Огромный стартовый набор GyverKIT: kit.alexgyver.ru/
► Уроки Arduino на сайте: alexgyver.ru/l...
► Модули и датчики с Али: alexgyver.ru/ar...
► Страница "Заметок Ардуинщика": alexgyver.ru/ar...
★ Инструменты, приборы и материалы для пайки ★
- Удобные мультиметры: ali.ski/2nn13 ali.ski/fTDAW9
- Тестеры компонентов: ali.ski/ZFLC7Y ali.ski/Mb_7W
- Карманные осциллографы: ali.ski/JdkQw
- Паяльная станция HakkoT12: ali.ski/pEUz9I
- Паяльный фен 8858: ali.ski/3cSLjp ali.ski/OtB10-
- Коврик для пайки: ali.ski/gF7bWW
- Стриппер для проводов: ali.ski/RiVwcj ali.ski/Thu_i
- Оловоотсос: ali.ski/1MLjH ali.ski/1K-IS
- Куча дешевого припоя: ali.ski/ZGkkx ali.ski/S3h5V
- Шпильки для выпайки: ali.ski/WSv7wx
- Хороший флюс-гель: ali.ski/uFflw
00:00 - вступление
00:18 - EEPROM как тип памяти
01:08 - особенности работы с EEPROM
03:38 - адресация EEPROM
04:36 - библиотека EEPROM.h
05:45 - пример с светодиодом и ШИМ
06:34 - пример с OLED дисплеем
07:23 - оптимизация работы с EEPROM
08:05 - инициализация EEPROM
09:00 - снижение износа
09:52 - EEPROM в роли RAM
10:14 - эпилог
Теги: #arduino #уроки #ардуино #alexgyver
●●●●●●●●●●●●●●●●●●●●
► Основной канал: / alexgyvershow
► Поддержать автора alexgyver.ru/s...
► Официальный сайт: alexgyver.ru/
► Почта: alex@alexgyver.ru
Поздравляем Ничикона с полноценным именным интро:D
После слов "надеюсь всё было понятно" обычно я смотрю этот отрывок еще раз. Пишу коды для бегущих поворотников для авто и показываю их работу вам.
Такая же фигня)))))
Я с этого не чего не понял, а есть уроки програмирования для начинающих?
@@user-vh6we5pv8l Так это и есть канал для начинающих. Посмотрите первые видео. Работа с памятью это уже более сложная тема.
Отлично, теперь про PROGMEM
Пишешь PROGMEM в объявлении переменной и всё. Константа лежит в флеш памяти...
@@GoodVrGames а её значение можно менять?
@@user-vd5ty6sz2w PROGMEM используется только с константами.
@@GoodVrGames спасибо!
Спустя вечность, я дождался этот урок. Ура.
Мало того, уроки стали с КОММЕНТАРИЯМИ, ого, канал растёт.
Спасибо за ваши супер уроки!))
Stm 32 будет?
Ставим лайки комменту, провоцируем автора.! :)
школьников пожалей... если сейчас на практических олимпиадах stm32, то я боюсь представить что будет после появления понятных гайдов по ним
esp8266 скоро будет, так как уже обросла крупным комьюнити и (что важно) стабильным ядром, 32 еще рановато - по слухам местами работает через жопу
Интересно, полезно и главное для меня очень своевременно, как раз собирался прикрутить к часам сохранение настроек.
Вот здесь можешь использовать пример кода для сохранения настроек ruclips.net/video/a9bPvAsOmpc/видео.html
@@olexangrstetsiuk3092 Спасибо, посмотрю, поковыряю.
Спасибо! Действительно полезный урок. Давно искал как работать с энергонезависимой памятью. Правда меня больше интересует ESP.
точно так же, только нужно вызвать begin(размер в байтах)
Замечательные ролики для легкого восприятия сложного контента, спасибо
я для такого использую кольцевой буфер со следующей структуруй
структура данных = 3 байта (номер записи) + N байт (полезные данные)
и это структуру растягиваем на всю память.
При включении контроллера програ пробегает по всем ячейкам и ищет наибольшее значение записи (те самые 3 байта). Указатель следующей записи смещается на размер структуры и каждая следующая запись идет с тем же смещением, и так по кругу.
Преимущество метода - уменьшенный общий расход.
Недостаток - завышенный удельный расход.
Преимущество перекрывает недостаток даже при полезной нагрузке в 1 байт.
Например для 328p
Структура 4 байта = 3 байта указателя + 1 байт полезной нагрузки
1024 / 4 = 256 ячеек для подобных структур. Т.е. каждая ячейка будет перезаписана в 256 раз реже чем при классическом методе. А это больше 25млн. гарантированных записей.
Почему именно 3 байта на указатель а не 4.
Максимальное значение 3 байт = 16777216 что с большим запасом покрывает даже самый оптимистичный срок службы.
UPD: Идея. Расходовать на указатель 1 байт а не 3. Недостающие 2 байта отправить в самый конец памяти, они будут обозначать смещение. Тогда у нас остаётся 1022 байта, структура = 2 байта, итог 511 ячеек. Ресурс 50млн.
есть способ намного проще и эффективнее)
Урок как всегда супер 👍 но хотелось бы ещё услышать инфу о том как подключать внешние eeprom если во встроенной в ардуину уже нет памяти
когда нибудь будет, опять же рабочий код давно написан и оформлен
Вот здесь использована внешняя EEPROM (интегрированная в модуль часов DS3231), можешь воспользоваться примером ruclips.net/video/a9bPvAsOmpc/видео.html
@@olexangrstetsiuk3092 спасибо
Ничего сложного, по I2C протокол простой до жути.
@@intelektum, только один вопрос: зачем лезть в дебри протокола, если большинство контроллеров имеет его аппаратную реализацию? Работа с памятью через этот протокол -- да, но и тут есть готовые библиотеки.
Ребяты вы молодцы, именно в плане Уроков (а не просто видосов со своими железками да еще и на продажу) вам нет равных, подумайте кстати о преподавании визуальных языков типа fbd - для новичка очень полезная вещь. Flprog, xod.....
спасибо, канал изначально уроковый
Полезно и достаточно подробно. Спасибо за труд.
Сделайте видео про GyverStepper. Не всем понятно про абсолютный мод и прочее. Было бы полезно!
понятия абсолютный и относительный вроде общепринятые и всем понятны)
@@ArduNotes "общепринятые" понятны большинству, но не всем. Ибо края наиболее часто встречаемого Гауссова колокола и широки и глубоки.
А что такое с голосом?
Спасибо, полезный урок был.
Спасибо за отличный урок !)
Добрался до ролика с опозданием, но, всё равно, лайк!
Для ESP8266 я использую внешнюю EEPROM, подключенную по i2c. Достаточно годно работает, и не надо с эмуляцией во флеш заморачиваться.
а разве там заморочки? Стандартная библиотека с таким же API
@@ArduNotes в принципе да, но, по моему мнению, внешняя епромка удобна с точки зрения износа. Существенных различий в реализации самого хранения данных нет, кроме того, если хранить данные в флеш, не нужно отбирать у esp аж два порта под i2c - а их там не так уж и много. Но ограничения по количеству циклов записи во флеш немного портят малину.
@@ArduNotes Кстати, я не встречал библиотек для работы с внешней eeprom для esp, нет ли желания ее сделать? Мне не приходилось самому библиотеки клепать, однако кодом для реализации библиотеки, если заинтересует, могу поделиться.
@@ArduNotes для продвинутых пользователей эта библиотека не нужна, все решается с помощью возможностей библиотеки Wire и даташита на память, однако начинающие ардуинщики это бы оценили. Ваш канал достаточно популярен и, по моему мнению, крайне полезный, поэтому данный контент, по работе с внешней еепром , думаю, был бы интересен многим.
Позвольте спросить, а заяем вам EEPROM на ESP-шке. Действительно, ничего сложного в эмуляции во Flash-памяти нет, просто поищите "SPIFFS". Это не идеальная система и имеет ряд недостаток (она больше не обновляеися, поэтому копайте в сторону LittleFS), но и преимущества у эиой системы есть. Эмуляция позволяет значительно расширить пространство для записи до нескольких мегабайт!
Здравствуйте, спасибо за урок. Полезно, интересно --> комментарий.
Спасибо за труд!
Сделай видео про FRAM память и работу с ней с Arduino. Пробовал работать с FM24C04B-G, очень понравилось, объём хоть и не большой, но его избыточно хватает много для чего и стоит не дорого, если с Китая покупать отдельно микросхемки. Делал им обвязку и использовал как полноценные модули.
Просто и понятно. Спасибо.
Заметки Ардуинщика , сделай свою плату подобие ардуин на каком - нить микроконтроллере например стареньком AT90S2313 он без внешнего кварца не работает . Спасибо за урок !
я в одном проекте у клиента в итоге поставил внешнюю 24c08 в DIP панель.
проще потом будет поменять ее, чем контроллер (там был MSP430).
Добрый день. а есть полный скетч из данного ролика?
ой бой !!!! Красава !!
В видео не хватает аналогов стандартной библиотеки и закольцовывание для уменьшения износа ячейки.
В видео сказано, что это тема для отдельного разговора. А библиотека для размазывания уже давно написана и ждет своего часа
*Вот не могу понять, у меня магнитола после выключения питания теряет настройки, неужети добавление сохранения настроек для производителя это так затратно, это же вопрос на пару баксов!*
во многих устройствах и время не сохраняется, хотя микросхема rtc стоит пару десятков центов
в массовом производстве каждая пара баксов превращается в сотни тысяч)
Очень интересно но никуя не понятно.
Слишком сжатая информация, чтобы разобраться просто как обращаться с епром в самом простом варианте приходится пересматривать короткий отрывок по пятьдесят раз...
Как на счет использования внешеней памяти например AT25256B-SSHL-B, Последовательная энергонезависимая память [SO-8] (5EB L) у нее;
High Reliability
̶ Endurance: 1,000,000 Write Cycles
̶ Data Retention: 100 Years
А если в структуре поменялось только одно поле, put перезапишет только его или все равно будет перезаписан весь объект?
Так ждал, что будут и примеры использования внешней EEPROM на i2c
тогда видео и называлось бы, работа с внешней eeprom
@@ArduNotes да, я подумал, сначала, что, раз i2c, то и будет рассмотрена в уроке по i2c. А затем подумал, что работа с EEPROM i2c будет в этом видеоуроке, т.к. модулей на i2c много разных, наверное, а EEPROM всего две - внутренняя и внешняя :)
В STM32 в серии L тоже есть еепром, по поводу алгоритма записи и чтения чтобы максимально увеличить ресурс памяти и не потерять данные если при записи произошёл сбой ( при просадке питания или посередине записи питание пропало то в данной области будут уже не то что хотели записать ), алгоритм довольно прост, очищаем память ( заполняем ее 0хFF ( все биты заполняем единичками )) далее записываем структуру как у вас в видео ( начало 0 адрес ) и в конце ставим пару байт метку ( чтоб знать где мы закончили запись ), теперь если мы читаем из памяти то начинаем в цикле с КОНЦА памяти искать нашу метку, как нашли сдвигаемся еще на размер структуры и считываем ее, теперь если нужно записать новые данные ( обновить старые ) то снова начинаем с конца читать ( ищем нашу метку ) и когда нашли записываем уже с адресом нашей метки и в конце тоже ставим метку ( тем самым у нас остались и предыдущая запись и новая ) теперь при чтении можно проверить ( если в одной из полей структуры хранить контрольную сумму пакета ) на целостность, если запись повреждена то прочитать предыдущую и перезаписать текущую. Ну и отслеживаем коней всех адресов. как дошли до конца все с самого начала. Тем самым кол-во перезаписей увеличиваем до максимального значения и при етом данные всегда можно возобновить в случае их потери.
в дуино среде используют самые популярные F3-F4, и самые доступные платы
@@nich1con652 Самые популярные и доступные это F0 и F1 =)
А где можно посмотреть конкретный код варианта предложенного вами ?
@@olexangrstetsiuk3092 а что там смотреть ? логика подробно описана выше, там чтение, запись, пару циклов и пару проверок
@@konstantingolinskiy4944 , эхх, остаётся только сожалеть ,что это все - пока-что не реализованая идея...
Спасибо. Лайк за из носа
У меня один практичный вопрос.
Как считать данные с ячейки еепром по I2C в системе с другим МК?
Прижать ресет к земле что бы тот не дёргался и шина свободна?
И как это схемотично будет выглядеть, подтягивающие резисторы и пр...?
Может видео такое запилите, думаю такой прикладной вопрос очень актуален.
неужели, дождался
я недавно случайно наткнулся на али на "24Cxx"(я смотрел 24С04,но видел и более ёмкие варианты как 24С64) (в рекомендациях появился) можно побаловаться,насоздавать "чёрных ящиков" или резервных копий настроек )))
И чтобы не ушатывать память ардуинки можно записывать на сменный блок (видел даже в вариантах DIP)
Как подключить к ардуино fdd ( флоппи ) привод что бы можно было к ноутбуку подключить как внешний носитель? Что бы не музыку издавал а определял и записывал на дискеты? Что бы ардуино выполнял роль платы которые обычно стоят в боксах для внешних дисков.
Спасибо! Вот бы ещё урок, как можно использовать ПЗУ-ху с платы ds3231...
Там нет ПЗУ, там маленький кусочек статического ОЗУ, а "энергонезависимость" обеспечивается батарейкой, которая питает эту память и пользовательское ОЗУ.
В контексте урока по RTC разве что
Можешь сделать урок с динамическим EEPROM адресом? Чтобы каждый раз данные в новый адрес записывались
Есть статистика по надежности епромок? Какая фирма, какие модели нормальные. Про Али не говорю, там все понятно.
Интересно. А будет урок по времени. Интересует как подать сигнал на 2 разных реле при значении времени. Например на одно реле подавать сигнал через 20 секунд, а на второе через 30.
А куда делся Алекс Гайвер???
Спасибо за видео! Подскажите, а где хранить карты шрифтов или битовые изображения, EEPROM используют дял этих целей?
программировал когда-то на Delphi7 )) Винда ХР настройки сохранял в реестр, EEPROM типа того?
Я на ESP8266 остановился на SPIFFS. Но т.к. его поддержка скоро закончится перехожу на LittleFS.
Интересует ваше мнение, а что лучше из встроенных возможностей контроллера при частой перезаписи?
Можно по подробнее про прекращение поддержки и LittleFS?
Не работал с есп практически, но я думаю большой разницы нет, все равно флеш затирается постепенно
Спасибо!!
Можно вопрос почему нету урока про записи в епром память минусовое значение и чтения. Во всем просторе интернета толка 2 статий про ето и то не рабочий скеч 😠
И, в догонку, еще один вопрос. Если с EEPROM в Ардуино всё так хорошо, то почему в проекте "Наливатор" калибровочные данные не сохраняются в EEPROM (что наиболее логично и удобно), а необходимо их прописать в коде и прошить плату повторно? Хотя сохранение текущего объема есть (правда у меня это не работает).
Лайк, репост, в тренд!
Спасибо тебе!)
Spasibo poleznoje
Как раз вовремя
Спасибо за видео ,очень интересно. Но видимо здесь один я дурак смотрю ничего не соображая в этом.))
Пожалуйста, выложите полный пример с олед дисплеем.
Невидно процедуру с курсором.
Невидно полного кода функции прорисовки меню.
Вот переписанно из видео:
#include
#include
#include
#define EEPROM_ADDR 90
GyverOLED oled;
EncButton enc;
struct {
bool a = false;
char b = '0';
byte c = 0;
int d = 0;
long e = 0;
float f = 0.0;
}settings;
uint8_t menu_ptr = 2;
bool menu_sel = false;
void setup() {
oled.init();
oled.clear();
drawMenu();
}
void loop() {
enc.tick();
if (enc.isRight()) {
if (menu_sel) {
switch (menu_ptr) {
case 2: settings.a = !settings.a; break;
case 3: settings.b = constrain(settings.b + 1, 48, 90); break;
case 4: settings.c = constrain(settings.c + 1, 0, 255); break;
case 5: settings.d += 100; break;
case 6: settings.e += 1000; break;
case 7: settings.f += 0.1; break;
}
} else {
menu_ptr = constrain(menu_ptr + 1, 2, 7);
}
drawMenu();
}
// if (enc.isLeft()) {
// if (menu_sel) {
// switch (menu_ptr) {
//
// }
if (enc.isClick()) {
menu_sel = !menu_sel;
drawMenu();
}
if (enc.isHolded()) {
EEPROM.put(0, settings);
}
}
void drawMenu() {
oled.clear();
oled.setCursor(30, 0);
oled.println(F("Test menu"));
oled.println(F(""));
oled.setCursor(30, 2);
oled.print(F("A: "));
oled.update();
}
Доброго времени суток ✌️ не могу соединить скетч измерения и регулировки с меню настроек. Попробую вписать как первое меню. Если не сложно подскажите как проще. Скетч могу выложить ссылку на гугл диск
Доброго времени суток! Подскажите, возможно ли на ардуинке сделать кнопку цензуры? То есть, нажимаем кнопку и в звуковой канал, например на виртуальный, аудио кабель идет звук цензуры, отпускаем кнопку, звук пропадает
Сожалею за комментарий, но Алекс на порядок харизматичней, как ведущий.
А так, видео было интересным, спасибо.
алех уже пять лет по бумажке читает, всё приходит со временем)
@@ArduNotes Об этом я и говорил - источник текста не особо важен, как удобней. И не спорю, многолетняя практика действительно расковвывает, давая возможность вносить театральность. Но изначально, чтение текста за кадром схоже с чтением текста диктором в радиоспектакле - весь интерес зависит от манеры исполнения. Никогда не занимался таким занятием, но для себя, вероятно, выбирал бы практику в этом направлении. Спасибо за ответ)
Super video!
Отличное видео, спасибо, а урок по v-usb будет когда нибудь?)
только в контексте готовых библиотек
@@nich1con652 отлично, очень жду)у Вас очень хорошие ролики!
Здравствуйте. Собираю руль на ардуино Леонардо, есть две прошивки: Aiwave и EMC. Скажите, если я залью одну, а потом за хочу перепрошить на другую, то чтобы это сделать понадобится программатор или можно будет обойтись без него?
Леонардо шьётся через USB.
Интересно при АЦП атмега 32а прошивальшиком АВР можно ли сохранять данные прошивки старой и вернутся к ней там два файла для прошивки hex формата еепром и флеш
Зарядник аймакс б6 клон
Не используйте нулевой адрес ячейки! Часто слетает от нестабильного питания, тоесть может слететь от включения-выключения устройства. Сталкивалса с етим во время разработки BMS
как именно слетает?
Народ, где прочитать про объяснение заводских библиотек? Как они расписаны, какие функции и переменные из них брать в основную программу?
в файле библиотеки или в гугле, на сайте автора/сайте ардуино. "какие функции и переменные из них брать" - для этого также в библиотеках есть примеры
как залить скетч в EEPROM и при использовании двух микросхем памяти и одной дуинки переключателем задействовать нужный скетч?
Никак, программа хранится во флеш памяти
Внешнюю FRAM память и забудьте про ресурс памяти. 10^14 число перезаписей. Да еще и скорость не сравнить с EEPROM
Когда будет продолжение игровой консоли?
я наверно вылез из танка, но где, чъерт возьми, Алекс?
Супер. Снимите ролик как сделать весы. по типу "вы худой", " вы норм", и "вы жиробас". Смотрю вас с огромным удовольствием.
ахах
Все получилось, благодарю
Даёшь заметки ЕСП32ня! :D
32 еще не получила стабильного ядра, как 8266. 8266 скоро будет от Алекса
А ещё у библиотеки EEPROM есть ограничения максимальной длины пакетов записи, их бы тоже надобно ,,разжевать,, ...
максимальная длина ограничена размером самой EEPROM, об этом говорится в самом начале урока
Спасибо за хороший видеоролик
Спасибо
Интересный урок! Когда выйдет следующий!?
Интересно, я один такой невезучий? Четыре китайских NANO, одна UNO, и итальянские (?!) UNO и MEGA - результат один: Данные корректно читаются только после первого ресета. После второго или отключения питания на любое время, вместо данных нули. В ячейках куда не было записи, как и положено 255. (Вашу статью по EEPROM зачитал "до дыр", пытаясь найти свои косяки, но без результата.) Может еще какие камушки подводные есть?
брак бывает попадается, мне с похожим нанка попалась вот
Давай урок про регистры.
Спасибо автору.👍👍👍
видел, что можно файлы загружать на eeprom (пытался, но чёт не особо получилось, p.s. дело было на esp8266)
Вы путаете EEPROM и SPIFFS. SPIFFS является "эмуляцией" EEPROM и находится во Flash-памяти, отчего может исеть больший размер и вместить в себя целые файлы. Поищите на эту тему. А вообще, даже эта система уже устарела и не будет обновляться, поэтому советуб копать в сторону LittleFS)
@@arduinoman4875, SPIFFS -- не эмуляций ЭСППЗУ, это отдельная штука. Под эмуляцию ЭСППЗУ и под SPIFFS и так настойчиво рекомендуемую Вами LittleFS память выделяется раздельно.
Кстати, надо-таки посмотреть, что это за зверь -- LittleFS.
У СТМ32 L серии есть еепром.
в пердуино среде если и юзаются стм, то F3,F4
Вы первые до тех пор, пока не обновите.
Круто
А что с голосом?
Очень хорошо 👍
Есть специальные епромки которые миллионы записей?? Какие?
внешняя AT24 самая популярная заявляет миллион
Да блин. Если пару тройку раз, то ничего ей не будет
Думать про износ памятм надо тогда, если ее насилуешь логами, постоянно ее выдрачиваешь, или майнишь chia
Те же SSD имеют лимит, но они через год не ломаются
А живут десятилетиями
Гугли мрам или фрам
FRAM
@@ArduNotes
Жду ещё от вас , новые уроки .
Спосиба за уроки
Стоп, если у того=же LGBT (LGT) ипром берется из флэша, то по сути ресурс у него больше? (я понимаю что он занимает в 2 раза больше физического места чем предполагаемого)
у еепром ресурс выше чем у флеш памяти
Как уже написал @Bdfy, ресурс у ЭСППЗУ больше. Причём, часто на порядок, а то и два. В случае LGT устройства нет. Китайцы просто сэкономили и не стали выращивать на кристалле ещё одно устройство и цепи, отвечающие за работу с ним. Как, кстати, в и STM32F103C8T6, который "синяя таблетка". Если планируется активная работа с ЭСППЗУ, стоит добавить на плату колодку под микросхему памяти, тогда её ещё и менять можно будет по мере износа.
4:46 объем*
Что за никичом
Спасибо за информацию, но теперь вы слишком спешите :)
AlexGyver продал этот канал?
Что с голосом?
7:09 нет, нельзя!(Я вам запрещаю) 😄😄😄
А кто озвучил ролик? Это не Alex.
на канале сейчас два ведущих
Крут
Первый. Ценитель канала тут))
Заметки ардуинщкааа
Меня одного бомбит от "holded"? Каждый раз, когда вижу - ору на весь дом "HELD!!!"
дада, но косяк был допусчен много лет назад и из за совместимости не исправляется
У Гайвера есть кнопка джи, инфа сотка.
NANO 33