Хранение в памяти быстро меняющихся переменных

Roman
Offline
Зарегистрирован: 15.02.2013

Всем доброго времени суток!

Возникла такая задача: нужно хранить в памяти контроллера переменную int, но вся проблема в том, что она очень быстро меняет свои значения. То есть ресурс перезаписи памяти EEPROM иссякнет через час роботы. Есть ли какие то варианты? Или только запись в EEPROM на постоянно, а через некий интервал времени?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

__Alexander
Offline
Зарегистрирован: 24.10.2012

если в проекте есть часы ds1307, то они самый идеальный вариант для хранения таких данных.

Roman
Offline
Зарегистрирован: 15.02.2013

Puhlyaviy пишет:

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

Есть расходомер жидкости, сигнал от которого поступает на контроллер. Он считает мгновенный расход и общий расход. Вот этот общий расход и надо сохранять все время, то есть если случайно пропадет питание, я знал сколько жидкости уже прошло.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

UPS поставить ) Шутка.

Тогда нужно посчитать, с какой погрешностью можно жить. Т.е. если потерян один отсчет, насколько это критично. Зависит от скорости движения жидкости. Грубо, если +- литр, а литр протекает за 10 минут, то можно раз в 10 минут сохранять.

Если нужно очень точно, то может быть шутка с UPS не такая уж и шутка, тогда аварийный аккумулятор.

tsostik
Offline
Зарегистрирован: 28.02.2013

Ставим на питание внешнюю резервную батарейку. Пока питание есть - ничего в eeprom не пишем, как только основное питание пропало в аварийном порядке записываем данные в eeprom.

Альтернатива - пишем данные, допустим, раз в час, подобрав батарейку таким образом, чтобы при пропадании внешнено питания схема гарантировано проработала минимум до следующей записи данных.

 

Roman
Offline
Зарегистрирован: 15.02.2013

kisoft пишет:

UPS поставить ) Шутка.

Тогда нужно посчитать, с какой погрешностью можно жить. Т.е. если потерян один отсчет, насколько это критично. Зависит от скорости движения жидкости. Грубо, если +- литр, а литр протекает за 10 минут, то можно раз в 10 минут сохранять.

Если нужно очень точно, то может быть шутка с UPS не такая уж и шутка, тогда аварийный аккумулятор.

Значит другого выхода нет. Или организовать бесперебойное питание, или записывать значения с неким промежутком во времени.

Geronimo
Offline
Зарегистрирован: 06.05.2013

Ну или на SD карту писать

ales2k
Offline
Зарегистрирован: 25.02.2013

У СД карт тоже 10000-30000 перезаписей на 1 ячейку.

Так что если только лог последовательно писать. На 16 гиг например поместится не мало (17179869184 байт, если флоат на 4 байта 1 раз в секунду, то примерно на 136 лет :) последовательной записи данных )

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

Geronimo
Offline
Зарегистрирован: 06.05.2013

Ну а устройстово проживет 136 лет ?)

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

Делали свою стойку ЧПУ на замену НЦ-31, использовали в модуле ОЗУ микросхемы FRAM. М/б сейчас есть еще более продивнутые микрухи.

FRAM - сегнетоэлектрическое ОЗУ

Roman
Offline
Зарегистрирован: 15.02.2013

Michal пишет:

Делали свою стойку ЧПУ на замену НЦ-31, использовали в модуле ОЗУ микросхемы FRAM. М/б сейчас есть еще более продивнутые микрухи.

FRAM - сегнетоэлектрическое ОЗУ

А цена вопроса? 

__Alexander
Offline
Зарегистрирован: 24.10.2012

дорого. лучше часы. )

maksim
Offline
Зарегистрирован: 12.02.2012
step962
Offline
Зарегистрирован: 23.05.2011

Если думать не хочется, то NVRAM (или подешевле) - вполне себе решение...

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

step962 пишет:

Если думать не хочется, то NVRAM (или подешевле) - вполне себе решение...

я уже предлогал... дорого им :)

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

Можно сделать вот так

Пока есть внешнее питание - нормально все. Как только его нет, генерится прерывание на INT0 или INT1 (переход с высокого на низкий уровень). По этому прерыванию сохраняем переменную в ЕЕПРОМ. Конденсатор на 1000 мкФ продолжает питать ардуину после пропадания внешнего питания где-то 1-2 секунды. Диод не дает конденсатору разрядиться "налево".

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Для быстрого лога успешно подключил FRAM по SPI. Цена чипа (FM25CL64B-GTR) на 64 килобита у нашего местного поставщика 2.5$ в розницу. Если кому-то интересно могу выложить схему и код.

 

llaabbss
Offline
Зарегистрирован: 28.12.2017

Интересно! И схему, и код! Правда, я пытаюсь завести I2C версию...