EEPROM вопросы по созданию переменных

Использование внешней и внутренней EEPROM, а так-же SD card
fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

EEPROM вопросы по созданию переменных

#1

Сообщение fsergei70 » 01.08.2017{, 14:54}

Уважаемые знатоки как можно организовать запись значений в память каждый раз в новую переменную. Необходимо считывать к примеру температуру раз в час и записывать значение времени и температуры до заполнения eeprom. В качестве eeprom используется микросхема установленная в часах реального времени. После заполнения памяти в идеале былобы не плохо чтоб старые значения затирались новыми. Таким образом получился бы своеобразный архив. Именем переменной может быть дата и время. Можно конечно использовать карту памяти и писать в файл но интересней всё-таки попробовать  прикрутить eeprom.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#2

Сообщение Сергей » 01.08.2017{, 15:11}

fsergei70, Давайте начнем с простого. Вот блок для записи переменной int в выбранную ячейку еепром.
На вход дата подаете значение
На вход Адр - адрес от 0 до 511 (1 кБ на унке, данных Интежер влезит 512 шт)
На Ен подаете строб записи. На выходе всегда будет значение еппром, адрес которого задан на входе адр

поставив на вход адреса счетчик, с ограничением макс: 510 например, сможете писать новые данные в новую ячейку.

Вот так примерно:
Вложения
9425159.jpg
0541160.jpg
__-CODE-.ubi
(29.89 КБ) 99 скачиваний

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

EEPROM вопросы по созданию переменных

#3

Сообщение fsergei70 » 01.08.2017{, 15:19}

Спасибо за блок вечером попробую. С внешней eeprom ваш блок работать будет? Я хочу в микросхему памяти часов реального времени писать чтоб ардуинку не портить.

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

EEPROM вопросы по созданию переменных

#4

Сообщение OlegAn1962 » 01.08.2017{, 15:19}

Сергей писал(а):На выходе всегда будет значение еппром, адрес которого задан на входе адр
То есть, этот блок одновременно является и блоком чтения?

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#5

Сообщение Сергей » 01.08.2017{, 15:21}

fsergei70 писал(а):С внешней eeprom ваш блок работать будет?
нет, это просто запись во внутреннею память МК. Команды записи/чтения из примеров.
Тип переменной на входе, если надо будет, могу изменить. Лонг интежер или флоат надо писать по другому. Сделаю еще пару блоков под них.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#6

Сообщение Sancho » 01.08.2017{, 15:26}

fsergei70 писал(а):С внешней eeprom ваш блок работать будет?
Нет, читайте внимательно пост Сергея, тем более, что в предыдущей теме о памяти часов Вами не говорилось.
А вот работать с ней легко, 24C32 - простая память на 4 кб по I2C.
Но в каждом конкретном случае, что-бы не городить огород на плате, лучше все нужные, но громоздкие функции "спрятать" в блок.
В Вашем конкретном случае как видите сборку температуры/времени в байты?
Например, первые два- дата и час, третий( и четвёртый) - параметр(значение).
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#7

Сообщение Сергей » 01.08.2017{, 15:26}

OlegAn1962 писал(а):То есть, этот блок одновременно является и блоком чтения?
Да. Да там чтения того... пару строк кода. Его и блоком называть смешно.
А если в редакторе блока убрать "*2"
,
то можно побайтно вычитать всю ЕЕПРОМ. В таком случае адрес будет от 0 до 1023.
Вложения
2732545.jpg

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#8

Сообщение Sancho » 01.08.2017{, 15:27}

Дополню пост 6.
Создание блока для 24C32 не составляет труда, важно лишь понимание конечного результата - сколько информации должно записываться за один "проход" а потом читаться? Чтоб не городить кучу блоков и машинного кода в IDE....
Последний раз редактировалось Sancho 01.08.2017{, 15:34}, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

EEPROM вопросы по созданию переменных

#9

Сообщение fsergei70 » 01.08.2017{, 15:32}

Да неплохо бы было float писать.  Но если что можно значения умножить на 100 а после разделить. Ещё интересует если счётчик адреса сделать например до 255 и его значение в одном случае подавать на ваш блок а на второй такойже блок подавать значения с счетчика плю 256 можно будет писать сразу 2 переменных или этот блок только один в проекте использовать можно?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#10

Сообщение Sancho » 01.08.2017{, 15:39}

fsergei70 писал(а):Да неплохо бы было float писать.  Но если что можно значения умножить на 100 а после разделить
Вам нужна точность в два знака после запятой?
Какой диапазон параметра?
Какая нужна глубина стёка - число записей?
Вот и считайте байты, до 4К.
Последний раз редактировалось Sancho 01.08.2017{, 15:40}, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#11

Сообщение Сергей » 01.08.2017{, 15:42}

fsergei70 писал(а):Да неплохо бы было float писать
Если математикой с флоат заниматься не будете, то можно флоат писать (только не в этот блок  ) , в противном случае лучше на сто умножать. Ардуина флоат плохо "пережевывает". Математические операции лучше делать с целочисленными переменными. Для этого может понадобится блок для запись лонг интежер сделать.

В проекте можете несколько блоков ставить, только за адресами следите, что бы не "перетирали" друг друга.
У меня в последнем проекте штук 10 похожих блоков в еепром пишут по несколько значений. Отдельно хранятся UID бесконтактных карт, а к их номерам привязаны балансы (суммы денег). К каждой карте соответствует свой баланс, кредитный лимит. Так же в отдельной области еепром хранится остатки товаров, + настройки (крайние углы поворотов) сервоприводов в отдельной области еепром. Все работает, скоро доделаю, запишу полный обзор.
Кстати в нем же и пробовал флоат отнимать, делить... Не прокатило. Решил математику делать с целочисленными.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#12

Сообщение Sancho » 01.08.2017{, 15:53}

Сергей, хватило 1К на всё? Сколько пользователей будет в конечном варианте?
Последний раз редактировалось Sancho 01.08.2017{, 16:13}, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

EEPROM вопросы по созданию переменных

#13

Сообщение fsergei70 » 01.08.2017{, 15:54}

Sancho писал(а):Какой диапазон параметра?
Нужно мерить температуру в системе отопления подача и обратка значения до 90 градусов для примерного вычисления потребляемой тепловой энергии. Одного знака после запятой в принципе хватит. В качестве датчика расхода хочу использовать водомер с датчиком хола
Последний раз редактировалось fsergei70 01.08.2017{, 15:56}, всего редактировалось 1 раз.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#14

Сообщение Sancho » 01.08.2017{, 15:58}

fsergei70, Какая конечная цель устройства - логгер?

Добавлено (01.08.2017, 15:58)
---------------------------------------------
fsergei70 писал(а):Нужно мерить температуру в системе отопления подача и обратка значения до 90 градусов для примерного вычисления потребляемой тепловой энергии. Одного знака после запятой в принципе хватит. В качестве датчика расхода хочу использовать водомер с датчиком хода.
Понято.
А если вычислять сразу и писать? Или нужна температура для "предъяв"
Расход примерно стабилен по времени?
Вы пытаетесь сделать дублирующий теплосчётчик?
Как пассатижами тянем инфу для ТЗ...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#15

Сообщение Сергей » 01.08.2017{, 16:10}

Sancho писал(а):Сергей, хватило 1К на всё?
нет конечно   . Я на меге2056 сделал. Там места на 100 карточек, + 100 балансов, + 100 кред. лимитов (это все числа лонг интежер по 4 байта) + на пять товаров (в каждом цена закупки, наценка, остаток) + на 5 серв, по 3 интежер (это по два угла и задержка на каждый привод). Как то так...

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#16

Сообщение Sancho » 01.08.2017{, 16:13}

Сергей писал(а):Там места на 100 карточек, + 100 балансов, + 100 кред. лимитов...........
Ого объём товарооборота....
А почему не использовали внешнюю память?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#17

Сообщение Сергей » 01.08.2017{, 16:32}

Sancho писал(а):А почему не использовали внешнюю память?
Та все в меге поместилось  . Отчеты по продажам пишутся в КаСкаде по каждому товару в отдельный файл (неудобно, но пока не додумался как лучше). С SD картой позже попробую, в наличии не хочет писать, а новых нету. Но в любом случае он постоянно совершенствуется.
Очень хорошо что при перепрошивке ЕЕПРОМ не стирается. Так, в работающем автомате можно изменить прошивку не угробив финансовую часть системы. Чужие деньги все таки.

fsergei70, значит требуется сохранять 2 переменных integer это температуры, и одну расход воды. При этом необходимо их "связать", как в моем проекте к картам привязаны балансы..., что бы именно над каждой такой группой переменных проводить расчет. Правильно?
Sancho писал(а):А если вычислять сразу и писать? Или нужна температура для "предъяв"
Хорошее решение, если для "предъявы" не надо отдельно хранить температуры, то лучше сохранять результат вычислений. Так больше влезет.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

EEPROM вопросы по созданию переменных

#18

Сообщение Sancho » 01.08.2017{, 16:40}

Пришла мысль по внешней памяти типа 24С32 EEPROM, которая часто есть в комплекте с часами DS3231, ветку в "железе" создать.
Пойду, попробую пару тестовых блоков сделать....
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

EEPROM вопросы по созданию переменных

#19

Сообщение fsergei70 » 01.08.2017{, 17:25}

Sancho писал(а):А если вычислять сразу и писать? Или нужна температура для "предъяв" Расход примерно стабилен по времени?
Вы пытаетесь сделать дублирующий теплосчётчик?
Как пассатижами тянем инфу для ТЗ...
Да какие могут быть предъявы ардуино ведь не коммерческий учёт. Пытаюсь сделать аналог теплосчётчик больше ради интереса ну и прикрутить к нему запись измеряемых параметров в память, что было все как у настоящего. Ну и для контроля циркуляции теплоносителя. Если разница  температур стала большая значит пора травить воздух из системы. В проекте что делаю самое главное это приобретённый опыт. Возможность писать значения не в одну и туже ячейку памяти очень пригодится и для других проектов.

Добавлено (01.08.2017, 17:25)
---------------------------------------------
Сергей писал(а):значит требуется сохранять 2 переменных integer это температуры, и одну расход воды. При этом необходимо их "связать", как в моем проекте к картам привязаны балансы..., что бы именно над каждой такой группой переменных проводить расчет.
Можно разницу температур, и расход плюс дату с временем писать или в оду из ячеек общее количество записей нарастающим итогом  чтоб знать сколько времени всего прошло при условии что питание не отключалось. если например запись велась раз в час, и зная дату и время первой записи можно будет пересчитать какие параметры какому времени и дате соответствуют.
Последний раз редактировалось fsergei70 01.08.2017{, 16:55}, всего редактировалось 1 раз.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

EEPROM вопросы по созданию переменных

#20

Сообщение Сергей » 01.08.2017{, 17:30}

fsergei70, напишите сколько переменных и каких типов Вы хотите сохранить, поименно. Потом продолжим. Я насчитал 7 переменных.

Ответить

Вернуться в «Устройства памяти»