Как сделать считывание Eeprom один раз.

Использование внешней и внутренней EEPROM, а так-же SD card
Аватара пользователя
Oleg
Сержант
Сообщения: 200
Зарегистрирован: 17 сен 2015, 13:04
Откуда: Беларусь
Имя: Олег

Как сделать считывание Eeprom один раз.

Сообщение Oleg »

Скажите как после пропадания питания и после запуска программы данные из Eeprom читались только один раз.Или сбросить записанные данные. Не получается никак одолеть эту проблему.
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

Заводите переменную bool ReadEPP с начальным значением True. В первой плате делаете чтение из EEPROM в переменные с входами разрешения записи. К этим входам цепляете переменную ReedEPP. После блоков чтения делаете ReadEPP = 0.
Таким образом переменные прочитаются один раз, далее бит разрешения обнулится.



Или на плате с условием. Плата выполнится только один раз.

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Boroda 24 фев 2017, 17:05, всего редактировалось 1 раз.
Аватара пользователя
Vitez
Сержант
Сообщения: 211
Зарегистрирован: 08 ноя 2015, 14:32

Как сделать считывание Eeprom один раз.

Сообщение Vitez »

Изображение
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

Vitez,
Ваш код:

Код: Выделить всё

if (1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (_trgrt1) {_gtv4 = (EEPROM.readInt(0));}
Мой код:

Код: Выделить всё

if (_gtv3) {_gtv4 = (EEPROM.readInt(0));}
_gtv3 = 0;
Чувствуете разницу?
Последний раз редактировалось Boroda 24 фев 2017, 21:55, всего редактировалось 1 раз.
Аватара пользователя
Vitez
Сержант
Сообщения: 211
Зарегистрирован: 08 ноя 2015, 14:32

Как сделать считывание Eeprom один раз.

Сообщение Vitez »

Boroda, Простите меня, белый господин. ))
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

Просто когда у МК остается три байта свободной памяти, а надо засунуть еще кучу всего, вот такие оптимизации очень помогают (можно сократить объем программы на 10-50%). К ардуино это не относится, потому как загрузка 80% памяти уже ведет к глюкам.
Аватара пользователя
Vitez
Сержант
Сообщения: 211
Зарегистрирован: 08 ноя 2015, 14:32

Как сделать считывание Eeprom один раз.

Сообщение Vitez »

Boroda, 99% процентов пользователей задающих подобные вопросы не создадут проект на 80% памяти. На мой взгляд, предложенная мной реализация проще именно в формате FlProg.

Чувствуете разницу?
Честно? Не очень. Я слабо знаю C++ и оценить преимущество в коде к сожалению не смогу .....
Но тем не менее, спасибо вам на новую структурную реализацию процесса, которую я возьму на учет.
Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29 дек 2016, 00:49
Откуда: москва

Как сделать считывание Eeprom один раз.

Сообщение Nikan »

.
Последний раз редактировалось Nikan 23 мар 2023, 16:16, всего редактировалось 2 раза.
Аватара пользователя
Oleg
Сержант
Сообщения: 200
Зарегистрирован: 17 сен 2015, 13:04
Откуда: Беларусь
Имя: Олег

Как сделать считывание Eeprom один раз.

Сообщение Oleg »

Спасибо. Я это уже пробовал работает. Но мне нужно чуть другое. Есть счетчик который считает нажатие кнопки до двух 1- откр.  2- закр. После пропадания питания соответствующая команда записывается в Eeprom. После восстановления питания читается из Eeprom один раз и выполняется противоположная команда. Дальше команды выполняются из счетчика. Нужно я так понимаю нужно обнулять записанное число в Eeprom. Помогите пожалуйста.
Аватара пользователя
Vitez
Сержант
Сообщения: 211
Зарегистрирован: 08 ноя 2015, 14:32

Как сделать считывание Eeprom один раз.

Сообщение Vitez »

Oleg, После пропадания питания что либо записать нельзя. Для поддержания актуального состояния,необходимо каждый раз перезаписывать eeprom.
Anydy

Как сделать считывание Eeprom один раз.

Сообщение Anydy »

Boroda писал(а):Просто когда у МК остается три байта свободной памяти
Спрошу здесь, дабы не плодить темы...
Как оптимизировать библиотеку? Занимает 71% памяти....
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Oleg
Сержант
Сообщения: 200
Зарегистрирован: 17 сен 2015, 13:04
Откуда: Беларусь
Имя: Олег

Как сделать считывание Eeprom один раз.

Сообщение Oleg »

Я имел ввиду что в eeprom уже до пропадания питания уже записано значение. И команда( т.е. значение взятое из памяти)должна один раз выполниться именно когда было пропадание питания. А если пропадания питания не было то работаем напрямую из счётчика.
Последний раз редактировалось Oleg 25 фев 2017, 16:42, всего редактировалось 1 раз.
DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18 окт 2015, 13:51
Откуда: Кривой Рог

Как сделать считывание Eeprom один раз.

Сообщение DWD »

Boroda писал(а):К ардуино это не относится, потому как загрузка 80% памяти уже ведет к глюкам.
Это как? Если "нарисованная" программа занимает более 80% памяти МК, то её корректная работа невозможна?

Сейчас постепенно ваяю два проекта и уже получилось 70% занятия памяти в одном и 78% в другом. А реализована пока только добрая половина задуманного.
Что получается, что довёв их до логического конца я не смогу добиться нормальной их работы? Ведь уже явно видно, что память будет занята под завязку. И то, хватило бы...
Последний раз редактировалось DWD 25 фев 2017, 12:32, всего редактировалось 1 раз.
Изображение
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

DWD, тут на форуме народ обсуждал это. И говорилось именно про 80% и более. Я так понимаю, что это связано с переменными типа Стринг и внутренними массивами Си компилятора. При определенных условиях памяти не хватает и появляются глюки.
Аватара пользователя
Oleg
Сержант
Сообщения: 200
Зарегистрирован: 17 сен 2015, 13:04
Откуда: Беларусь
Имя: Олег

Как сделать считывание Eeprom один раз.

Сообщение Oleg »

Так как насчет меня. Вопрос к господину Boroda. Помогите по моему вопросу.Пожалуйста.
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

Oleg, программу в студию, а то непонятно, зачем считать два нажатия кнопки счетчиком, когда можно обойтись битовой переменной.
Аватара пользователя
Oleg
Сержант
Сообщения: 200
Зарегистрирован: 17 сен 2015, 13:04
Откуда: Беларусь
Имя: Олег

Как сделать считывание Eeprom один раз.

Сообщение Oleg »

Вот прилагаю прог. Это программа управления на ардуино вместо сгоревшей платы от роллетных ворот. Есть пульт с двумя кнопками пуск и стоп. Один раз нажимаешь открытие, второй раз закрытие. Отдельная кнопка стоп. Пройденный путь считается от датчика Холла. Проблема в записи при отключении питания . Как сделать чтобы при аварийном пропадании питания записывались команда и путь. А при восстановлении питания отрабатывалась один раз противоположная команда. А потом все стиралось. Если ворота были закрыты и пропало питание, а потом появилось то просто открытие. В заводской плате было так. Я ни как не пойму как это сделать.Помогите пожалуйста.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

Oleg, а это вообще работает? У Вас вся схема в обратных связях...

Добавлено (25.02.2017, 22:35)
---------------------------------------------
Вы через полгода откроете свой проект и ничего тут не поймете...
Гость

Как сделать считывание Eeprom один раз.

Сообщение Гость »

А причем тут проект?

Нужно в контроллер ввести импульс который будет появляться перед тем как пропадет питание , с него то и дадите команду на запись в память.
Можно сделать так. Если питание к примеру 9 вольт, то ставим последовательно два одинаковых резистора 1-10К и посредине будет 4.5 вольт направляем это напряжение в аналоговый вход ардуины и в проекте ставим блок сравнения ,если число на АЦП будет меньше чем при 9 вольтах , то даем импульс на запись .
Или может по другому было сделано?

Добавлено (25.02.2017, 22:59)
---------------------------------------------
Если Вы измеряете  питание на ардуине 5 В , то записывать не будет , т.к  вместе с питанием ардуины снижается и опорное напряжение , поэтому 3 вольта на ардуине будет 1023 всё равно....
Можно сделать независимое опорное напряжение на большом кондёре ,тогда все получится с 5 вольтами.
Последний раз редактировалось Гость 25 фев 2017, 23:02, всего редактировалось 1 раз.
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Как сделать считывание Eeprom один раз.

Сообщение Boroda »

sser, а Вы проект откройте и все Lxx преобразуйте в линии. И введите импульс... на запись...

Добавлено (25.02.2017, 23:02)
---------------------------------------------
Я уже больше часа растаскиваю блоки на своем 19" монике и никак не разберусь в этих хитросплетениях.
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей