Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Счётчик наработки часов
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Punk
Привет! Хочу сделать счетчик наработки часов(tiny2313) на гидроподъемник и вот думаю куда же мне сохранять часы во внутреннее EEPROM или 93с46 прикрутить(из сооброжений ресурса EEPROM) или же использовать RTC, подскажите кто с этими вещами сталкивался как лучше сделать ?
mihask
Цитата(Punk @ Feb 19 2007, 11:17) *
Привет! Хочу сделать счетчик наработки часов(tiny2313) на гидроподъемник и вот думаю куда же мне сохранять часы во внутреннее EEPROM или 93с46 прикрутить(из сооброжений ресурса EEPROM) или же использовать RTC, подскажите кто с этими вещами сталкивался как лучше сделать ?


Помоему для растягивания ресурса EEPROM можно записывать счетчик наработки каждый раз в новые ячейки (если в случае с EEPROM tiny2313 я не прав надеюсь меня поправят smile.gif ).
Еще можно FRAM прикрутить (у нее нет ограничений на количество циклов записи чтения),
только поди эта FRAM будет дороже проца. smile.gif А что значит "использовать RTC" - Вы хотите
запользовать под счетчик внутреннее ОЗУ RTC. Какую микросхему RTC вы используете ?
Igor26
Я использовал RTC DS1307 и в его ОЗУ хранил время наработки.
Punk
Цитата(mihask @ Feb 19 2007, 09:20) *
Какую микросхему RTC вы используете ?


Я еще пока ни че не использую а определяюсь с выбором элемнтов..
если буду ставить RTC то это будет ricoh_RS5C372A не потому что они мега крутые просто у меня их есть.Хотя млин неохота много корпусов пихать,хотелось бы одним процом обойтись но сколько ЕПРОМ его протянет черт его знает.
mihask
Цитата(Punk @ Feb 19 2007, 12:30) *
но сколько ЕПРОМ его протянет черт его знает.


Ну еще даташит знает smile.gif - 100000 циклов записи/чтения, а если в каждый раз в разные ячейки писать,
то 100000*Nточек записи.

А если RTC DS1307 использовать то как я понимаю после отключения питания, через двое суток батарейка сядет и счетчик в озушке умрет. Хотя можно конечно счетчик из озушки каждый час в EEPROM переписывать.

Цитата
хотелось бы одним процом обойтись...

А вы хотите tiny2313 обойтись, но ведь у него нет встроенного RTC ?
Или вы хотели бы использовать только tiny2313+RTC?
Dopler
Цитата(Punk @ Feb 19 2007, 09:30) *
Хотя млин неохота много корпусов пихать,хотелось бы одним процом обойтись но сколько ЕПРОМ его протянет черт его знает.


Тут гадать особо не стоит, достаточтно глянуть в Даташит и увидеть 100.000 циклов записи. Ну а дальше примерно так - если буду писать каждую секунду то за 8-ми часовой рабочий день буду записывать 28800 раз, т.е всех 128 байт EEPROM хватит на 2 месяца работы (по 8 часов в день). Если писать раз в минуту, то соответственно, в 60 раз больше, уже на пару лет можно растянуть.
aahardsoft
а не хотите ли просто поставить в питание диод,после него кондёр а на ногу инт0 например завести питание до диода, и по приходу инта(будет вам означать что питание отрубили) писать часики в eeprom питаясь от кондера ,и ложиться спать smile.gif
Alex B._
2Punk
во-первых aahardsoft дело говорит - имеет смысл считать внутри, а писать в eeprom при отключении питания. Во-вторых если есть вероятность, что кто-то захочет твой счетчик обнулить - то только внутреняя eeprom.
Igor26
Цитата
после отключения питания, через двое суток батарейка сядет и счетчик в озушке умрет

Ничего подобного! Года три на одной батарейке без внешнего питания отбегает. А чтоб не потерять данные в момент замены батарейки, сначала подайте внешнее питание и меняйте батарейку.
mihask
Цитата(Igor26 @ Feb 19 2007, 13:36) *
Цитата
после отключения питания, через двое суток батарейка сядет и счетчик в озушке умрет

Ничего подобного! Года три на одной батарейке без внешнего питания отбегает. А чтоб не потерять данные в момент замены батарейки, сначала подайте внешнее питание и меняйте батарейку.


А ну да вы правы конечно smile.gif, это я перепутал, у нас батарека висела на внешнем ОЗУ и RTC
одновремено оба устройства питала ну и озушка эта дохла через двое суток после отключения
питания. А данные из RTC помоему можно после подачи питания(по команде пользователя) в EEPROM загонять и тогда не нужно при включеном питании батарейку менять.
FAV
Мне кажется правильнее, по аналогии с автомобильными моточасами или счетчиком пробега, переписывать в еепром при отключения зажигания. При этом постоянное питание должно оставаться. А до этого считать в ОЗУ. В результате если запустили прибор в работу в начале дня и выключили в конце, то всего одна перезапись в день. Ресурс ЕЕПРОМ за всю жизнь не исчерпается.
khach
А если поставить вопрос так: счетчик часов критичен или нет, т.е будут ли его хакать, и должен ли он быть "ломоустойчивым"? Есть ли идеи по "ломоустойчивости" как то шифровынный протокол, невозможность замены на аналогичный, невозможность "отмотки" итд.
Igor26
Если писАть время в EEPROM контроллера, то достаточно залочить ЧИП и не о какой "отмотке", изменении этого времени речи не будет.
Punk
Цитата(khach @ Feb 19 2007, 16:38) *
А если поставить вопрос так: счетчик часов критичен или нет, т.е будут ли его хакать, и должен ли он быть "ломоустойчивым"? Есть ли идеи по "ломоустойчивости" как то шифровынный протокол, невозможность замены на аналогичный, невозможность "отмотки" итд.

Не девайс ломать этот ни кто не будет т.к. я его лично себе(СТО) делаю поэтому ни че шифровать не надо, а по поводу отмотки - отмотать все че хош можно(личный опыт).

И все таки я пожалй остановлюсь на RTC+tiny2313+кандюк+диод, т.к. неохото бэкапное питание как в тачках заводить, должно быть так: Есь питалово на счетчике он мотает, нет питалова от вырублен, всего два провода из корпуса торчать будет.
AlexG_changed
ресурс внутренней EEPROM достаточно просто умножается в N раз, если для записи наработки использовать не одну "запись" а N по очереди. Алгоритм выбора очередной области для записи и поиска текущей используемой области может быть различным, можно к записываемым данным дописывать "счетчик", если записывается наработка то данные сами по себе могут служить "счетчиком". В одной моей разработке запись наработки в EEPROM производится каждые пять минут, а ресурс рассчитан на 10 лет.

При правильной организации счетчика наработки в EEPROM он получается нечувствительным к перебоям питания, даже если очередная порция данных не успеет записаться целиком при очередном включении счет автоматически начнется с предыдущей, верной записи. Если счетчик рассчитан на много лет потеря пяти минут не критична.
mihask
Цитата(Punk @ Feb 19 2007, 20:11) *
И все таки я пожалй остановлюсь на RTC+tiny2313+кандюк+диод, т.к. неохото бэкапное питание как в тачках заводить, должно быть так: Есь питалово на счетчике он мотает, нет питалова от вырублен, всего два провода из корпуса торчать будет.


А такой способ сохранения данных надежен? Ведь здесь видимо предполагается аварийное отключение
питания? То есть в месте с резким отключением питания может возникнуть какая нибудь помеха
на линии связи RTC - tiny2313. Или это маловероятно ?

А как часто нужно сохранять данные во flash? Ведь если данные нужно сохранять достаточно редко
то способ предложенный AlexG (ну и я его тоже предлагал в самом начале smile.gif ) вполне
подойдет,причем у вас будет несколько точек записи если одна запортится остальные останутся.
Ведь эти 100000 циклов чтения/записи фирма производитель гарантирует(для конкретной одной
ячейки ), а записывая каждый раз в новые ячейки мы расширяем этот диапазон. По крайней
мере способ "RTC+tiny2313+кандюк+диод" можно совместить со способом предложенным
AlexG , просто сохранять счетчик в EEPROM пореже, хотя бы для резерва smile.gif
bloodden
метод как у aahardsoft"а у меня уже намотал под тыщу часов без единого сбоя. вкл/выкл 1-2 раза в сутки. 90s8515 самовар, и ему с головой хватает всё записать и лечь спать 100мкФ кондёра.
andrvisht
почти согласен с aahardsoft но делал чуть иначе:
Запись моточасов проводилась в RTC с интервалом 1 минута. При этом считалось CRC записи, или просто инверсия (не раз наверное видели в дампах щитков smile.gif ). Для супер надежности можно сделать 2-й буфер, на случай вырубки питания в момент записи.
По выключению питания ничего не пишется, все действия производяться по включению.
1. даем выдержку для устаканивания питания, можно в этот момент LCD проинитить или еще что нибудь.
2. проверяем CRC записи, и если все OK переносим результат в EEPROM процессора.
3. Если CRC не совпало ни в одном буфере - переносим данные из EEPROM в RTC. Потеря время последней работы.
4. Если совсем все плохо, CRC не совпало нигде - общая ошибка ...

Ну а все остальное типа буфер в EEPROM на любителя smile.gif
Maik-vs
Сам хочу.
Пока на бумажке придумал следующее.
В ЕЕПРОМ организуем N ячеек по 4 байта. 3 байта - число и 1 байт CRC. Если число - время в минутах, то 3 байта хватит на 32 года.
Сначала ячейки инициализируются нулями с правильным CRC: убеждаемся что они записываются.
При включении питания ищем максимальное значение с правильным CRC: это наработанное время. Переписываем его в память, будем наращивать каждую минуту, вычисляя CRC.
В ЕЕПРОМе ищем верную запись с нулями+CRC. Запоминаем адрес: это место для записи счётчика. Если нету таковой, то пытаемся записать нули во все 4 байта. Получилось - ячейка рабочая.
При выключении (смотрим компаратором на напряжение ДО стабилизатора) быстренько переписываем счётчик в ячейку.
В качестве часов хочу использовать родной кварц-таймер-программный счётчик по прерыванию таймера с коррекцией каждые N и M*N интервалов. Точность получается хорошая.

Алгоритм сделан из предположения, что в "усталый" ЕЕПРОМ труднее записать нули, чем единицы. Это так?

Хочется услышать критику. smile3046.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.