Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

novator
2021-04-15 11:09:15

Тогда ячейка с адресом будет содержать состояние кнопок.

gfo
2021-03-23 11:36:40

Пишите в память только тогда когда текущее состояние кнопки отличается от уже записанного. Чтение епрома то практически не органичено. По такой схеме вам 100к записей хватит лет на 100. Только от дребезга не забудьте избавится.

luminofor
2021-01-28 14:44:09
Green пише:

А это на кой хрен, можно поинтересоваться?

Первый пост, первые два предложения

И вообще, уже не актуально. Накодил, проверил, работает!. Думаю при планируемом использовании, ячейки хватит лет на 20-30
lol

Green
2021-01-28 11:21:58
luminofor пише:

Счетчик считает, сколько раз я записал состояние сенсорных кнопок в ячейку.

А это на кой хрен, можно поинтересоваться?

luminofor
2021-01-28 10:29:51
г0сть пише:
luminofor пише:

Делаю зарядное устройство

Ну и в чем проблема запитать ардуинку (или что там у вас) от заряжаемого аккумулятора на время отключения питания и не искать себе приключений?

Не, ну тут вы не правы. Это вообще запутает схему дополнительными стабилизаторами и гальваническими развязками. Проще добавить пару строчек кода

luminofor
2021-01-28 10:21:04

Блиин!!! Господа, я жестоко ошибался! Еще раз посмотрел даташит. Это флеш имеет 10000 циклов перезаписи, а eeprom 100000!
Так что буду писать в одну ячейку и не выносить мозг!
lol

г0сть
2021-01-28 10:20:57
luminofor пише:

Делаю зарядное устройство

Ну и в чем проблема запитать ардуинку (или что там у вас) от заряжаемого аккумулятора на время отключения питания и не искать себе приключений?

luminofor
2021-01-28 09:55:41
Green пише:

luminofor, вы из простого делаете сложное. Сохраняйте состояние отдельно, счётчик отдельно. Состояние, как и счётчик сохраняются только при изменении. Счётчик что считает, как часто изменяется?

Счетчик считает, сколько раз я записал состояние сенсорных кнопок в ячейку.
Допустим состояние меняется примерно 10 раз в сутки. Что при ресурсе одной ячейки 10000 циклов дает 1000 циклов записи. Это почти три года безотказной работы, если писать все время в одну ячейку.

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

Green
2021-01-28 09:19:32

luminofor, вы из простого делаете сложное. Сохраняйте состояние отдельно, счётчик отдельно. Состояние, как и счётчик сохраняются только при изменении. Счётчик что считает, как часто изменяется?

luminofor
2021-01-27 20:29:25
MikeM пише:

Я как-то делал так:
В запись включается маркер. Когда вся память чистая (заполнена единицами), маркер имеет значение 0.
Первая свободная ячейка будет иметь маркер 1.
Когда вся память заполнится записями с нулевым маркером, начинаем заполнять её с самого начала записями с единичным маркером.
Какое значение маркера является активным узнаём из первой ячейки. Когда значения маркеров в первой и последней ячейках совпадают, пора менять активное значение.
Алгоритм успешно работает в пульте управления какой-то самолётной радиостанции. Точно не помню, но кажется Р-862

Тоже неплохо!

luminofor
2021-01-27 20:27:57

В принципе да. Имеется ввиду запомнить режим.
Делаю зарядное устройство с сенсорным дисплеем. Нужно управлять кнопками Заряд-Стоп-Разряд.
И когда питание пропадает, то Заряд или Разряд уже не восстанавливаются. То есть нужно как то хранить состояние.
Можно вообще не заморачиваться, тупо долбить в одну ячейку. 10000 циклов должно надолго хватить lol
YK1 предложил нормальную идею, я ее обдумал на предмет реализации.
Берем 7 и 6 биты под хранение состояния:
10 - Заряд
00 - Стоп
01 - Разряд
Остальные биты, с пятого 5 по 0,  под счетчик. Получаем 64 цикла
Читаем ячейку eeprom, делаем логическое И с 0x00111111, получаем циклы, прибавляем единицу и в полученном числе выставляем биты 7 и 6, записываем обратно.
Счетчик досчитал до 64х - переходим в следующую ячейку.
Есть проблема первого включения, когда все ячейки по 255, но я где то встречал решение. Идея такая.
Стираем всю eeprom и делаем контрольную сумму всей области памяти, записываем на шпаргалку. В setup() проверяем контрольную сумму с шаблонной, если совпадают, то это первый запуск и нужно записать нули во все ячейки.
Как узнать в какой ячейке находится состояние - читаем все ячейки по маске 0x00111111, находим первое с числом меньше 64.
Примерно так. Осталось накодить smile

Green
2021-01-27 16:50:05

Обычно состояние кнопок не запоминают, запоминают текущий режим выбранный этими кнопками. Запоминают также состояние переключателей. Если же нужна последовательность нажатий, например для снятия пароля, то это уже кнопочный (или клавиатурный) логгер. Ну а запись по кольцу или нет, выбирается исходя из требуемой задачи.

MikeM
2021-01-26 21:25:54

Я как-то делал так:
В запись включается маркер. Когда вся память чистая (заполнена единицами), маркер имеет значение 0.
Первая свободная ячейка будет иметь маркер 1.
Когда вся память заполнится записями с нулевым маркером, начинаем заполнять её с самого начала записями с единичным маркером.
Какое значение маркера является активным узнаём из первой ячейки. Когда значения маркеров в первой и последней ячейках совпадают, пора менять активное значение.
Алгоритм успешно работает в пульте управления какой-то самолётной радиостанции. Точно не помню, но кажется Р-862

luminofor
2021-01-26 16:14:42

А что, хорошая мысль. Спасибо за идею!

YK1
2021-01-26 13:16:04

А зачем усложнять в 2 раза ?
Не проще ли искать нужный байт начиная сначала.
Допустим у тебя по умолчанию вся память 255.  ищем байт сначала который не равен 255 и предшествует 255

В этом байте ты допустим хранишь 0bxxx...0yyy следующие биты
где
xxx....  -счетчик
yyy      - состояние кнопок

Соответсвенно читаем состояние кнопок. из yyy. Если нужно записать увеличиваем счетчик xxxx+1 и пишем состояние кнопок. Переполнили счетчик, пишем в след. байт и т.п.
Если уж бороться с кол-вом записей. то она одна на изменение состояние (не надо писать адрес)
Ну и когда дошли до упора надо записать все 255. Хотя тоже можно обойтись и без этого. Надо искать последний байт (начиная с нулевого) у которого не переполнен счетчик xxx. и так по кругу...

Підвал форуму