Возьми стандартную библиотеку, переменные флоат занимают 4 байта, а вот булевые занимают байт, если хочешь уменьшить то через маску сохранять и писать свою функцию
А почему не упомянули что если кто то, из посмотревших решит все тоже самое повторить в цикле loop, в вашем случае Setup выполняется один раз, при старте, то может достаточно быстро протереть дыру в памяти, вообще с этой памятью нужно обращаться осторожно. Автор явно далек от электроники и от программирования. Правильно сказал мне как то один человек: "Раньше в интернете была только полезная информация, так как выходить в него могли в большинстве своем грамотные люди, а сейчас любой у кого есть компьютер строчит бестолковые статьи даже не разбираясь в том о чем ведет речь". Лучше нужно готовиться, а не стряпать ролики как попало.
Да я то не виню, просто кто то не опытный может споткнуться на этом месте, а вы этого не упомянули в видео, даже вскользь, что не есть хорошо, раз уж взялись пилить обзор, пилите до конца. А так получается обзор для галочки. В сети очень много контента, но так мало полезного и качественного.
a) Вообще-то любая память "не поддерживает" вещественные числа и EEPROM ничем от другой памяти в этом смысле не отличается - данные везде хранятся в двоичном виде. б) Тут встроенную не знаешь куда потратить... Обычно внешнюю память используют для временного сохранения новой прошивки, которую контролёр получает по IP, ибо в загрузчик вкорячить стек TCP/IP не получается. в) Переменные в EEPROM нормальные люди не хранят, ибо накладно по ресурсам. Хранят значения для инициализации переменных при старте, которые могут меняться в ходе жизни (не константы). г) "Хранение" с умножением вообще чушь полная! Иногда деньги хранят целыми числами, считая копейками т.е. умножая на 100 сумму перед сохранение, ограничивая таким образом число разрядов до 2-х после точки, которые не нужны. Т.е. можно вещественные числа хранить как целые, двигая десятичную точку, и оперировать с ними так же быстрее, где нет встроенной в проц вещественной математики. Но разрядами, т.е. умножая и деля на 10 .
f33net, лайк и в догонку пару комментов 1. Количество перезаписей у EEPROM хоть и ограничено, но очень велико, и если не писать что-попало ради того, чтобы что-то писать, то встроенной в контроллер хватит на всегда. 2. Если писать все таки реально приходится что-то часто, например некий лог, который необходимо сохранить даже в случае перезагрузки до момента слива его куда-то, то организуйте алгоритм так, чтобы не писать в одну и туже ячейку все время, а циклически двигайтесь по всей памяти, в таком случае её хватит еще на более долгий срок. 3. иногда удобней использовать EEPROM вместо флешки для хранения долгих данных, например я так в одном проекте хранил html'ки для веб сервера на ЕСП. Но в таких экзотических случаях подумайте и взвесьте все за и против, и поймите .что скорей всего вам это не надо.
"организуйте алгоритм так, чтобы не писать в одну и туже ячейку все время, а циклически двигайтесь по всей памяти" // Как после перезагрузки узнать адрес для считывания? Если его хранить по постоянному адресу, то его придётся каждый раз обновлять, что приводит нас к тому, с чего начали.
Ну так сказано "разработайте алгоритм", он будет в каждом конкретном случае свой, опираться на свои задачи... Но вот пример одного из простых. Разделите всю память на блоки. Например пусть будет так... Есть у нас 16 КB, делим на блоки таким образом 64B (служебная) + 32 * (500B (данные) + 10B (служебная блока)) В общем служебном блоке записываем номер текущего рабочего блока, при этом выделяем байт в служебной блоке нашей страницы для учета, количества записей, при переполнении изменяем текущий блок на следующий. Дополнительно в данной случае можно реализовать дублирование информации в соседних блоках и проверку корректности сохранения. Это один из способов. В каждом случае нужно смотреть на то ,какие данные нужно сохранять. требования к надежности, объему этих данных, скорости работы и прочее...
Да, со знанием алгоритмов и логикой поле не пахано. :) Самый простой и универсальный: перед использованием обнуляем всю флэшку, первое слово - длинна записи + размер слова, R1:=0, читаем по адресу R1, , если 0, по адресу R1 последняя запись, иначе прибавляем к R1 прочитанное и переходим к "читаем по адресу R1". Запись - аналогично, но когда R1+размер блока данных вылазит за размер флэшки, обнуляем флэшку и R1. И ещё раз: флешка не для пиления её часто меняющимися данными. А 100 000 циклов это каждую минуту непрерывно писать 3 года в одно место.
Здравствуйте, помогите решить такую задачу: Есть необходимость на платформе Arduino по команде (внешняя кнопка - например) включить шаговый двигатель. После выполнения заданного числа оборотов (1000) остановить его и включить второй шаговый двигатель с аналогичной задачей (допустим 2000 оборотов)и стоп. После получения второй команды программа отрабатывает все в обратном порядке. Сначала второй мотор 2000 оборотов в обратном направлении, затем первый 1000 оборотов в обратном направлении. Нужен скетч программы, по возможности с подробными комментариями, так-как ваш покорный слуга сущий чайник в программировании С уважением и надеждой.
Как говорил товарищ Бендер: "Я бы взял по частям, но мне нужно сразу". Что в моем случае означает - написал бы, да не умею. Поэтому и обратился к Вам.😶
xn--18-6kcdusowgbt1a4b.xn--p1ai/%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9-%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE/ здесь для начала найдите меня в vk там пишите
У них совершенно разное назначение. Как бы не корректно сравнивать одно с другим. Правильно сравнивать SD и SPI FLASH. Я пробовал, но особой разницы не заметил.
Чтобы считать EEPROM нужно подключаться на прямую к микросхеме. Проблема заключается в том что при подаче питания на плату могут быть задействованы другие узлы устройства, которые займут шину данных EEPROM, из-за чего считать содержимое микросхемы не получится. Именно по этому EEPROM выпаивают и считывают отдельно на программаторе. В остальных ситуациях все крайне индивидуально. И зависит от схемотехники устройства. Но в любом случае содержимое EEPROM должно считываться на прямую при помощи программатора.
@@UCanDo С программатором проблем считать нет. Проблема в том, что корпус может быть не SOIC8, а BGA или TSSOP и ты уже её не зажмёшь... При этом мне нужно к примеру считать данный в конкретной ячейке. Что бы МК не дёргался и не занимал шину, полагаю надо прижать его ресет к земле, что бы он не дёргался... Я просто даже не знаю с чего начать в данном случае, никакой толковой инфы нет...
Есть переходники. EEPROM напаивается на переходник. А дальше обычное чтение через программатор. По схеме вам ничем не подскажу. Так каких-то крайне ситуативно.
А чем отличаются 24с32 , 24с64, 24с128, 24с256, 24с512, кроме объема? Почему АТМЕЛ разделил эти модели по разным даташитам, ведь эта библиотека походу поддерживает все эти модели, все они с 16 битной (2-х байтовой) адресацией памяти, не подойдет эта библиотека только для 24с01-24с16 (эти 8 битную адресацию памяти имеют).
Даже и не знаю. Приходит на ум только две вещи: разное время производства (может у них разная структура?). Ну и разные производители. ST тоже производит такие же EEPROM
Здравствуйте. Заранее извиняюсь за возможно глупый вопрос.А есть ли возможность соединения нескольких модулей памяти друг с другом, тем самым увеличив общий объем энергонезависимой памяти. А далее вести запись или считывание уже с объединенной памяти?
Да, конечно. Чипы памяти подключаются параллельно , только пины EN от каждого чипа подключаются по отдельности. Активирую тот или иной пин EN вы задаёте в какую микросхему будет производится запись или чтение
Хмм, а в чем вообще преимущество внешней ЕЕПРОМ, ведь можно просто микроСД карту использовать и хранить данные там. Ну разве что ЕЕПРОМ юзает i2c а микроСД SPI вроде.. но если выбирать между микроСД и ЕЕПРОМ, какие факты есть для перевеса в сторону внешней ЕЕПРОМ?
Между ними очень большая разница. Micro SD в первую очередь это хранилище файлов, а EEPROM - хранилище переменных. Это можно сравнить с компьютером. Жесткий диск - SD, а оперативка - EEPROM. Хотя такое сравнение тоже не совсем верное. EEPROM тоже предназначена для хранения информации. Но только переменных. На пример, у вас есть переменная х, которая = 211. Вы просто задаете адрес в EEPROM и туда эту переменную записываете, для сохранности. Потом (опять же) обратившись только к адресу EEPROM, можно назад получить значение переменной. Да, можно сохранять переменные и на флешку, но для этого нужно создать файл, открыть его для записи, записать переменную (при этом обязательно нужно знать сколько байт эта переменная занимает, но это верно и для EEPROM), закрыть файл. Потом, при восстановлении переменной, открыть файл, считать именно столько байт, сколько нужно, перевести считанные байты в значение переменной.... Зато работа с файлами и папками на флешке идет без проблем, а вот на EEPROM создать файловую систему не получится. Вообще рекомендую почитать на эту тему что-нибудь. Слишком много между ними отличий чтобы я смог их все перечислить. Еще одно отличие: EEPROM имеет очень "мало" памяти. 8 килобайт считается много. Сохранить картинку не получится. А вот переменных можно сохранить аж 8 тысяч! Ну а какой объем у флешек, думаю вы и сами знаете.
@@UCanDo благодарю за весьма подробный ответ! Примерно понятно, у ЕЕПРОМ доступ быстрее будет осуществляться, хотя смотря для каких целей.. скажем, прочитать настройки/опции при запуске системы такая разница в скорости наверное не критична.. другое дело если попытаться ее использовать как "оперативную память".. кстати.. отсюда вытекает такой вопрос - а есть ли вообще возможность как-то добавить оперативной памяти микроконтроллеру? Мне тут где-то в комментах попалось что-то про SPI Flash, потом я стал искать на Ютубе это, попалось Serial Flash, там рассказывалось что можно к МК подключить такой модуль и можно во время работы программы пользоваться этой памятью как если бы она была обычной встроенной оперативной, т.е. создавать переменные, обращаться к ним, как я понял это без дополнительных усилий типа специального обращения к чипу в коде.. возможно ли что-то такое на АТмега или тех же ESP32 STM32? Или же это совсем другое что-то.. в общем можно ли как-то добавить ОЗУ и при этом свободно ею пользоваться, чтобы скажем то же создание массива byte x[1000]; автоматически черпало память из дополнительного чипа?
На сколько я знаю, EEPROM можно прочитать только по ячейкам. А значит, нужно создать цикл, в котором поочередно будут читаться ячейки. А дальше записывать считанные данные в новую EEPROM
А как организовывать быстрый поиск 10значных десятичных чисел по всему размеру памяти ? (понятно что там другой формат) Я самим принципом поиска интересуюсь. Но именно шустрого поиска.
Интересную задачку вы задали. Первый вопрос: в чем именно искать будете? В ОЗУ или в EEPROM? Относительно того как искать в ОЗУ, не подскажу, так как надо знать как она устроена, а я это уже забыл... EEPROM разделена на ячейки. Каждая хранит 1 байт, то есть 256 значений. Для хранения переменных Long Integer и Float используется 4 ячейки, то есть 4 байта. Для поиска переменной конкретной длинны вам нужно знать адреса начала всех переменных и сколько байт они занимают. Потому как 4 случайные ячейки могут содержать: - 4 разных переменных по 1 байт - или 2 переменные по 2 байта - или 2 переменные по 1 байт и 1 переменная 2 байта - или .... и так далее... Зная начало и длину можно пробегаться по ним, считывать, сравнивать с искомыми параметрами, считывать дальше... Без знания начала и длинны переменных искать ничего не получится.
Home Made - В епром нужно искать. Будут туда писаться 10значные десятичные цыфири, и потом в такой себе базе нужно быстренько сравнить, есть заданный или нету.
Это что, прикол? Во-первых, hex - 16-ричное, а не двоичное. Во-вторых, о формате дробных чисел уже в школе рассказывают. Открою Вам гигантскую тайну: бывают еще и отрицательные числа. В школу, господа, в школу!
union позволяет объявить вместе структуру данных и одновременно массив из байтов в одном и том же месте памяти. Для работы с данными обращаемся к структуре, а для чтения-записи всего блока вместе - к массиву байт. Можно и через указатели, но так тоже можно.
Добрый день. Ссылка работает. Только что проверил. Замечено что мобильные устройства (телефоны, планшеты) часто некорректно обрабатывают ссылки. По этому лучше открывать их с компьютера.
Посмотрите это видео: ua-cam.com/video/S8cbIllYc1I/v-deo.html Создаете нужную картинку, получаете массив вида: static unsigned char gImage_1[] U8G_PROGMEM = {0x00,0x00,0x00,............} Где каждая точка представлена в виде 0x00 Создаете скетч, с картинкой. Этот скетч "по точечно" сохранит картинку в EEPROM. Потом в пишите новый скетч в котором будет функция считывания картинки прямо с EEPROM
Ссылка рабочая. Только что проверил. Если открываете ссылку на телефоне или планшете, то иногда такое наблюдается. Попробуйте открыть ссылку на компьютере.
@@UCanDo слушай, ну тогда подскажи как с компа через какой браузер качать? все мне известные выдают ошибку 404, тоже самое после формата ц и установки чистой системы. как черт побери у тебя работает эта ссылка?
Странно, у меня открывается. Пробую в Хроме. Только что проверил, в Опере ссылка не открывается (тоже 404). Раньше работало. Несколько дней назад изменилась политика предоставления услуг Гугла, может это как-то повлияло. Архив перезалил. У меня открывается во всех браузерах. Так же дублирую ссылку здесь: drive.google.com/open?id=1l99bhLMaMlG-IKiN5CK7zrPUeQ__8aQJ
Нет, должна открыться в браузере страница с возможностью скачать файл. Это общедоступный ресурс. Попробуйте в другом браузере. Может у вас проблема с какими-то блокировщиками, или антивирусом.
Сканер видит 24C04 и 24C16, не с одним, а с множеством адресов Сканер I2C eeprom AT24C04 Scanning... I2C device found at address 0x50 ! I2C device found at address 0x51 ! done ua-cam.com/video/6cni_zKOsqA/v-deo.html Сканер I2C eeprom AT24C16 Scanning... I2C device found at address 0x50 ! I2C device found at address 0x51 ! I2C device found at address 0x52 ! I2C device found at address 0x53 ! I2C device found at address 0x54 ! I2C device found at address 0x55 ! I2C device found at address 0x56 ! I2C device found at address 0x57 ! done ua-cam.com/video/wOxwScntD_E/v-deo.html Подскажите пожалуйста, как решить эту проблему или киньте ссылку где можно об этом узнать.
Для этого нужно число разбить на две части, старший и младший байты, и каждый байт сохранять отдельно. По этому для сохранения int понадобится две ячейки EEPROM. Немного позже приведу пример кода
Работает. Просто стандартные команды записи и чтения замените на команды записи и чтения для внешней памяти: Вместо EEPROM.update напишите: eeprom.writeByte EEPROM.read замените на: eeprom.readByte
Дай Бог здоровья человеку и его близким в наше нелёгкое время.
Огромное спасибо за понятный язык . Понял --- усвоил .👍👍👍👍👍
Всегда приятно и познавательно смотреть твои видео.
Здоровья тебе и долгих лет.
Возьми стандартную библиотеку, переменные флоат занимают 4 байта, а вот булевые занимают байт, если хочешь уменьшить то через маску сохранять и писать свою функцию
10:50 а можно умножить на 100, тогда сохранится без потерь. Надо вспомнить и потом разделить на 100.
Я так и делаю всегда
А почему не упомянули что если кто то, из посмотревших решит все тоже самое повторить в цикле loop, в вашем случае Setup выполняется один раз, при старте, то может достаточно быстро протереть дыру в памяти, вообще с этой памятью нужно обращаться осторожно. Автор явно далек от электроники и от программирования. Правильно сказал мне как то один человек: "Раньше в интернете была только полезная информация, так как выходить в него могли в большинстве своем грамотные люди, а сейчас любой у кого есть компьютер строчит бестолковые статьи даже не разбираясь в том о чем ведет речь". Лучше нужно готовиться, а не стряпать ролики как попало.
То есть в собственной необразованности и глупых действиях вы вините меня???
🤦♂️
Да я то не виню, просто кто то не опытный может споткнуться на этом месте, а вы этого не упомянули в видео, даже вскользь, что не есть хорошо, раз уж взялись пилить обзор, пилите до конца. А так получается обзор для галочки. В сети очень много контента, но так мало полезного и качественного.
a) Вообще-то любая память "не поддерживает" вещественные числа и EEPROM ничем от другой памяти в этом смысле не отличается - данные везде хранятся в двоичном виде.
б) Тут встроенную не знаешь куда потратить... Обычно внешнюю память используют для временного сохранения новой прошивки, которую контролёр получает по IP, ибо в загрузчик вкорячить стек TCP/IP не получается.
в) Переменные в EEPROM нормальные люди не хранят, ибо накладно по ресурсам. Хранят значения для инициализации переменных при старте, которые могут меняться в ходе жизни (не константы).
г) "Хранение" с умножением вообще чушь полная! Иногда деньги хранят целыми числами, считая копейками т.е. умножая на 100 сумму перед сохранение, ограничивая таким образом число разрядов до 2-х после точки, которые не нужны. Т.е. можно вещественные числа хранить как целые, двигая десятичную точку, и оперировать с ними так же быстрее, где нет встроенной в проц вещественной математики. Но разрядами, т.е. умножая и деля на 10 .
f33net, лайк и в догонку пару комментов
1. Количество перезаписей у EEPROM хоть и ограничено, но очень велико, и если не писать что-попало ради того, чтобы что-то писать, то встроенной в контроллер хватит на всегда.
2. Если писать все таки реально приходится что-то часто, например некий лог, который необходимо сохранить даже в случае перезагрузки до момента слива его куда-то, то организуйте алгоритм так, чтобы не писать в одну и туже ячейку все время, а циклически двигайтесь по всей памяти, в таком случае её хватит еще на более долгий срок.
3. иногда удобней использовать EEPROM вместо флешки для хранения долгих данных, например я так в одном проекте хранил html'ки для веб сервера на ЕСП. Но в таких экзотических случаях подумайте и взвесьте все за и против, и поймите .что скорей всего вам это не надо.
"организуйте алгоритм так, чтобы не писать в одну и туже ячейку все время, а циклически двигайтесь по всей памяти" // Как после перезагрузки узнать адрес для считывания? Если его хранить по постоянному адресу, то его придётся каждый раз обновлять, что приводит нас к тому, с чего начали.
Ну так сказано "разработайте алгоритм", он будет в каждом конкретном случае свой, опираться на свои задачи... Но вот пример одного из простых.
Разделите всю память на блоки. Например пусть будет так... Есть у нас 16 КB, делим на блоки таким образом
64B (служебная) + 32 * (500B (данные) + 10B (служебная блока))
В общем служебном блоке записываем номер текущего рабочего блока, при этом выделяем байт в служебной блоке нашей страницы для учета, количества записей, при переполнении изменяем текущий блок на следующий.
Дополнительно в данной случае можно реализовать дублирование информации в соседних блоках и проверку корректности сохранения. Это один из способов. В каждом случае нужно смотреть на то ,какие данные нужно сохранять. требования к надежности, объему этих данных, скорости работы и прочее...
Да, со знанием алгоритмов и логикой поле не пахано. :) Самый простой и универсальный: перед использованием обнуляем всю флэшку, первое слово - длинна записи + размер слова, R1:=0, читаем по адресу R1, , если 0, по адресу R1 последняя запись, иначе прибавляем к R1 прочитанное и переходим к "читаем по адресу R1". Запись - аналогично, но когда R1+размер блока данных вылазит за размер флэшки, обнуляем флэшку и R1. И ещё раз: флешка не для пиления её часто меняющимися данными. А 100 000 циклов это каждую минуту непрерывно писать 3 года в одно место.
писать блоками, сохранять блоки вместе с инкрементируемыми номерами, после перезагрузки искать блок с максимальным номером, ну например.
Ардуино захватывает мир
Здравствуйте, помогите решить такую задачу: Есть необходимость на платформе Arduino по команде (внешняя кнопка - например) включить шаговый двигатель.
После выполнения заданного числа оборотов (1000) остановить его и включить второй шаговый двигатель с аналогичной задачей (допустим 2000 оборотов)и стоп.
После получения второй команды программа отрабатывает все в обратном порядке.
Сначала второй мотор 2000 оборотов в обратном направлении, затем первый 1000 оборотов в обратном направлении.
Нужен скетч программы, по возможности с подробными комментариями, так-как ваш покорный слуга сущий чайник в программировании
С уважением и надеждой.
это очень легко, поищите сами
Как говорил товарищ Бендер: "Я бы взял по частям, но мне нужно сразу".
Что в моем случае означает - написал бы, да не умею. Поэтому и обратился к Вам.😶
xn--18-6kcdusowgbt1a4b.xn--p1ai/%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9-%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE/ здесь для начала найдите меня в vk там пишите
@@anlaz1, разобрались?
К сожалению не могу найти правильный скетч.☹
Как высчитывается ресурс еепром? Одна переменная считается одним циклом записи? Или для каждой ячейки свои 100000 циклов перезаписи?
Для каждой ячейки свой цикл перезаписи
3:10 а всмысле, зачем пропустили WP? Не знаете что это?
а с чем выше скорость работы: с eeprom или с SD картой памяти?
У них совершенно разное назначение. Как бы не корректно сравнивать одно с другим. Правильно сравнивать SD и SPI FLASH. Я пробовал, но особой разницы не заметил.
Согласен, хотел также написать, не разумно использовать EEPROM для большого количества информации.
Эта eeprom по I2C работает 400кГц макс. для ардуино и 1мГц для самой микросхемы, а SD по SPI интерфейсу до 8 МГц для ардуино и до сотен МГц вообще.
А если надо прочитать значения еепром в другой системе, достаточно будет прижать ресет МК к земле, что бы он не мешал считывать?
Лучше всего выпаять EEPROM но если такой возможности нет, то тогда придётся изгаляться.
@@UCanDo Какие варианты мазахизма есть? Может есть смысл стучаться напрямую через СОМ порт? Но какая тогда прога нужна?
Чтобы считать EEPROM нужно подключаться на прямую к микросхеме.
Проблема заключается в том что при подаче питания на плату могут быть задействованы другие узлы устройства, которые займут шину данных EEPROM, из-за чего считать содержимое микросхемы не получится. Именно по этому EEPROM выпаивают и считывают отдельно на программаторе.
В остальных ситуациях все крайне индивидуально. И зависит от схемотехники устройства. Но в любом случае содержимое EEPROM должно считываться на прямую при помощи программатора.
@@UCanDo С программатором проблем считать нет. Проблема в том, что корпус может быть не SOIC8, а BGA или TSSOP и ты уже её не зажмёшь... При этом мне нужно к примеру считать данный в конкретной ячейке. Что бы МК не дёргался и не занимал шину, полагаю надо прижать его ресет к земле, что бы он не дёргался...
Я просто даже не знаю с чего начать в данном случае, никакой толковой инфы нет...
Есть переходники. EEPROM напаивается на переходник. А дальше обычное чтение через программатор.
По схеме вам ничем не подскажу. Так каких-то крайне ситуативно.
А чем отличаются 24с32 , 24с64, 24с128, 24с256, 24с512, кроме объема? Почему АТМЕЛ разделил эти модели по разным даташитам, ведь эта библиотека походу поддерживает все эти модели, все они с 16 битной (2-х байтовой) адресацией памяти, не подойдет эта библиотека только для 24с01-24с16 (эти 8 битную адресацию памяти имеют).
Даже и не знаю. Приходит на ум только две вещи: разное время производства (может у них разная структура?). Ну и разные производители. ST тоже производит такие же EEPROM
Здравствуйте. Заранее извиняюсь за возможно глупый вопрос.А есть ли возможность соединения нескольких модулей памяти друг с другом, тем самым увеличив общий объем энергонезависимой памяти. А далее вести запись или считывание уже с объединенной памяти?
Да, конечно. Чипы памяти подключаются параллельно , только пины EN от каждого чипа подключаются по отдельности. Активирую тот или иной пин EN вы задаёте в какую микросхему будет производится запись или чтение
Хмм, а в чем вообще преимущество внешней ЕЕПРОМ, ведь можно просто микроСД карту использовать и хранить данные там. Ну разве что ЕЕПРОМ юзает i2c а микроСД SPI вроде.. но если выбирать между микроСД и ЕЕПРОМ, какие факты есть для перевеса в сторону внешней ЕЕПРОМ?
Между ними очень большая разница. Micro SD в первую очередь это хранилище файлов, а EEPROM - хранилище переменных. Это можно сравнить с компьютером. Жесткий диск - SD, а оперативка - EEPROM. Хотя такое сравнение тоже не совсем верное. EEPROM тоже предназначена для хранения информации. Но только переменных. На пример, у вас есть переменная х, которая = 211. Вы просто задаете адрес в EEPROM и туда эту переменную записываете, для сохранности. Потом (опять же) обратившись только к адресу EEPROM, можно назад получить значение переменной.
Да, можно сохранять переменные и на флешку, но для этого нужно создать файл, открыть его для записи, записать переменную (при этом обязательно нужно знать сколько байт эта переменная занимает, но это верно и для EEPROM), закрыть файл. Потом, при восстановлении переменной, открыть файл, считать именно столько байт, сколько нужно, перевести считанные байты в значение переменной....
Зато работа с файлами и папками на флешке идет без проблем, а вот на EEPROM создать файловую систему не получится.
Вообще рекомендую почитать на эту тему что-нибудь. Слишком много между ними отличий чтобы я смог их все перечислить.
Еще одно отличие: EEPROM имеет очень "мало" памяти. 8 килобайт считается много. Сохранить картинку не получится. А вот переменных можно сохранить аж 8 тысяч! Ну а какой объем у флешек, думаю вы и сами знаете.
@@UCanDo благодарю за весьма подробный ответ! Примерно понятно, у ЕЕПРОМ доступ быстрее будет осуществляться, хотя смотря для каких целей.. скажем, прочитать настройки/опции при запуске системы такая разница в скорости наверное не критична.. другое дело если попытаться ее использовать как "оперативную память".. кстати.. отсюда вытекает такой вопрос - а есть ли вообще возможность как-то добавить оперативной памяти микроконтроллеру? Мне тут где-то в комментах попалось что-то про SPI Flash, потом я стал искать на Ютубе это, попалось Serial Flash, там рассказывалось что можно к МК подключить такой модуль и можно во время работы программы пользоваться этой памятью как если бы она была обычной встроенной оперативной, т.е. создавать переменные, обращаться к ним, как я понял это без дополнительных усилий типа специального обращения к чипу в коде.. возможно ли что-то такое на АТмега или тех же ESP32 STM32? Или же это совсем другое что-то.. в общем можно ли как-то добавить ОЗУ и при этом свободно ею пользоваться, чтобы скажем то же создание массива byte x[1000]; автоматически черпало память из дополнительного чипа?
Подскажите пожалуйста. Как скопировать (сдампить) eeprom.? Arduino mega 2560.
На сколько я знаю, EEPROM можно прочитать только по ячейкам. А значит, нужно создать цикл, в котором поочередно будут читаться ячейки. А дальше записывать считанные данные в новую EEPROM
Привет. Я в этом новичок есть вопрос. А можно в подобную микросхему записать картинку по типу фотографии и вывести на дисплей?
Да, можно. Вот пример: ua-cam.com/video/ShnyOOcfbhc/v-deo.html
В этом видео я подключал дисплей и выводил на него несколько тестовых картинок
А как организовывать быстрый поиск 10значных десятичных чисел по всему размеру памяти ? (понятно что там другой формат)
Я самим принципом поиска интересуюсь.
Но именно шустрого поиска.
Интересную задачку вы задали. Первый вопрос: в чем именно искать будете? В ОЗУ или в EEPROM?
Относительно того как искать в ОЗУ, не подскажу, так как надо знать как она устроена, а я это уже забыл...
EEPROM разделена на ячейки. Каждая хранит 1 байт, то есть 256 значений. Для хранения переменных Long Integer и Float используется 4 ячейки, то есть 4 байта.
Для поиска переменной конкретной длинны вам нужно знать адреса начала всех переменных и сколько байт они занимают. Потому как 4 случайные ячейки могут содержать:
- 4 разных переменных по 1 байт
- или 2 переменные по 2 байта
- или 2 переменные по 1 байт и 1 переменная 2 байта
- или .... и так далее...
Зная начало и длину можно пробегаться по ним, считывать, сравнивать с искомыми параметрами, считывать дальше... Без знания начала и длинны переменных искать ничего не получится.
Home Made -
В епром нужно искать. Будут туда писаться 10значные десятичные цыфири, и потом в такой себе базе нужно быстренько сравнить, есть заданный или нету.
+Александр Сановский вы быстро убьете EEPROM. У нее ограничение на запись/считывание
Home Made -
На запись да, а на считывание???
forОМ выбивать
Это что, прикол? Во-первых, hex - 16-ричное, а не двоичное. Во-вторых, о формате дробных чисел уже в школе рассказывают. Открою Вам гигантскую тайну: бывают еще и отрицательные числа. В школу, господа, в школу!
Приведите, пожалуйста, пример как дробное число записать в одну ячейку
+Home Made - 1 бит под порядок, 7 бит мантисса
@@ВалерийЗалавин Порядок 1 бит? Вы серьёзно?
Интересное решение.
Но у меня вопрос: в C++ union уже отменили?
Зачем этот велосипед?
Этот "велосипед" и мне самому не очень... Но других решений просто не встречал. Можете дать ссылку где об этом почитать можно?
Почитал я про C++ union. И что-то я не понял причем здесь union к записи в EEPROM
union позволяет объявить вместе структуру данных и одновременно массив из байтов в одном и том же месте памяти. Для работы с данными обращаемся к структуре, а для чтения-записи всего блока вместе - к массиву байт. Можно и через указатели, но так тоже можно.
Да, но это только работа с данными. Это никак не поможет в одну ячейку EEPROM записать дробное число, на пример 39.1
Конечно, одной буквой слово не запишешь, но это альтернативный путь разобрать слово на буквы. Хотя лучше через указатель.
Ссылка на Гугл диск не работает. Исправьте, пожалуйста!
Добрый день. Ссылка работает. Только что проверил.
Замечено что мобильные устройства (телефоны, планшеты) часто некорректно обрабатывают ссылки. По этому лучше открывать их с компьютера.
Arduino с I2C и OLED-EEPROM. EEPROM предоставляет данные для монохромного изображения. Кто-нибудь знает?
Сохраняете картинку на EEPROM, а потом ее считываете и выводите.
Но EEPROM не для этого предназначена. Вам надо SPIFLASH
У вас не хватает памяти в скетче?
да. кто-то использовал atma16 с EEPROM: imgur.com/eCP8MgM
Мне удалось загрузить EEPROM с помощью библиотек : github.com/cyberp/AT24Cx
Посмотрите это видео: ua-cam.com/video/S8cbIllYc1I/v-deo.html
Создаете нужную картинку, получаете массив вида:
static unsigned char gImage_1[] U8G_PROGMEM = {0x00,0x00,0x00,............}
Где каждая точка представлена в виде 0x00
Создаете скетч, с картинкой. Этот скетч "по точечно" сохранит картинку в EEPROM.
Потом в пишите новый скетч в котором будет функция считывания картинки прямо с EEPROM
Для меня не проблема создавать изображения: ua-cam.com/video/n6Cr9eUuuac/v-deo.html
Ссылка на библиотеку и скетч не работает!
Ссылка рабочая. Только что проверил. Если открываете ссылку на телефоне или планшете, то иногда такое наблюдается. Попробуйте открыть ссылку на компьютере.
пожалуйста, перезалей библиотеку и скетч, так как указанная ссылка выдает 404. заранее благодарен
Ссылка рабочая. Ошибка бывает если открывать на телефоне или планшете. Открывайте ссылку на компьютере
@@UCanDo слушай, ну тогда подскажи как с компа через какой браузер качать? все мне известные выдают ошибку 404, тоже самое после формата ц и установки чистой системы. как черт побери у тебя работает эта ссылка?
Странно, у меня открывается. Пробую в Хроме.
Только что проверил, в Опере ссылка не открывается (тоже 404). Раньше работало. Несколько дней назад изменилась политика предоставления услуг Гугла, может это как-то повлияло.
Архив перезалил. У меня открывается во всех браузерах. Так же дублирую ссылку здесь: drive.google.com/open?id=1l99bhLMaMlG-IKiN5CK7zrPUeQ__8aQJ
Ссылка на библиотеку и скетч не работает!?
Ссылка работает. Перепроверил только что.
пишет 404. Произошла ошибка.
Не удалось найти запрошенный URL на этом сервере. Это все, что мы знаем.
Вы с планшета открываете или с телефона? Ссылка ведёт на ГуглДиск. С компьютера открывается без проблем
с ноута, похоже у меня не установлен гугл.диск?!
Нет, должна открыться в браузере страница с возможностью скачать файл. Это общедоступный ресурс.
Попробуйте в другом браузере. Может у вас проблема с какими-то блокировщиками, или антивирусом.
А 24со8?
Тоже EEPROM , 1 килобайт
Сканер видит 24C04 и 24C16, не с одним, а с множеством адресов
Сканер I2C eeprom AT24C04
Scanning...
I2C device found at address 0x50 !
I2C device found at address 0x51 !
done
ua-cam.com/video/6cni_zKOsqA/v-deo.html
Сканер I2C eeprom AT24C16
Scanning...
I2C device found at address 0x50 !
I2C device found at address 0x51 !
I2C device found at address 0x52 !
I2C device found at address 0x53 !
I2C device found at address 0x54 !
I2C device found at address 0x55 !
I2C device found at address 0x56 !
I2C device found at address 0x57 !
done
ua-cam.com/video/wOxwScntD_E/v-deo.html
Подскажите пожалуйста, как решить эту проблему или киньте ссылку где можно об этом узнать.
Это очень странно. Может что-то не так подключено? Попробуйте с этим вопросом обратиться на форум radiokot
перезалей скетч с библиотекой и дай нормальную ссылку. та что есть под видео не работает
Ссылка рабочая. Бывает что ссылки на ГуглДиск не открываются на телефонах или планшетах. Открывайте с компьютера.
а как записать и считать int значение из внешней памяти
Для этого нужно число разбить на две части, старший и младший байты, и каждый байт сохранять отдельно. По этому для сохранения int понадобится две ячейки EEPROM.
Немного позже приведу пример кода
@@UCanDo ок спс было бы неплохо глянуть
#define addr 0 // адрес, занимает 2 байта
int i = 2500; // переменная
void setup() {
writeIntIntoEEPROM(addr, i); // сохраняем значение в EEPROM
i = readIntFromEEPROM(addr); // читаем из EEPROM
}
void loop() {
}
void writeIntIntoEEPROM(int address, int number)
{
EEPROM.update(address, number >> 8);
EEPROM.update(address + 1, number & 0xFF);
}
int readIntFromEEPROM(int address)
{
byte byte1 = EEPROM.read(address);
byte byte2 = EEPROM.read(address + 1);
return (byte1
@@UCanDo не работает с внешней памятью
Работает. Просто стандартные команды записи и чтения замените на команды записи и чтения для внешней памяти:
Вместо
EEPROM.update
напишите:
eeprom.writeByte
EEPROM.read
замените на:
eeprom.readByte
А 25 серию так перепрошить можно?
25-я серия это не EEPROM, а SPI FLASH. С ней совершенно другой принцип работы.
Постараюсь в будущих видео сделать на них обзор.
Спасибо за ответ. Она у меня в телеке спрыгнула, перепрошить надо, а под рукой только arduino mega.
@@gennadiykuznetsov3723программатор ch341a за не дорого можно купить(200 руб) и можно будет кучу всего прошивать
Говори слово write - врайт. Так правильно.
Рогалик как раз врайт говорить не правильно
Правильно говорить райт
HEX есть 16 разрядов, а не 2 разряда 6:00
Оговорился
If you put an english title you MUST speak english.
У него не английский заголовок