Страница 1 из 2

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

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

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

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

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

Вот так примерно:

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

Добавлено: 01.08.2017{, 15:19}
fsergei70
Спасибо за блок вечером попробую. С внешней eeprom ваш блок работать будет? Я хочу в микросхему памяти часов реального времени писать чтоб ардуинку не портить.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 01.08.2017{, 15:53}
Sancho
Сергей, хватило 1К на всё? Сколько пользователей будет в конечном варианте?

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

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

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

Добавлено: 01.08.2017{, 15:58}
Sancho
fsergei70, Какая конечная цель устройства - логгер?

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

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

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

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

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

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

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

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

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

Добавлено: 01.08.2017{, 16:40}
Sancho
Пришла мысль по внешней памяти типа 24С32 EEPROM, которая часто есть в комплекте с часами DS3231, ветку в "железе" создать.
Пойду, попробую пару тестовых блоков сделать....

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

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

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

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

Добавлено: 01.08.2017{, 17:30}
Сергей
fsergei70, напишите сколько переменных и каких типов Вы хотите сохранить, поименно. Потом продолжим. Я насчитал 7 переменных.