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

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

Добавлено: 24.02.2017{, 14:39}
Oleg
Скажите как после пропадания питания и после запуска программы данные из Eeprom читались только один раз.Или сбросить записанные данные. Не получается никак одолеть эту проблему.

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

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



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


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

Добавлено: 24.02.2017{, 20:41}
Vitez
Изображение

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

Добавлено: 24.02.2017{, 21:54}
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;
Чувствуете разницу?

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

Добавлено: 24.02.2017{, 22:15}
Vitez
Boroda, Простите меня, белый господин. ))

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

Добавлено: 24.02.2017{, 22:23}
Boroda
Просто когда у МК остается три байта свободной памяти, а надо засунуть еще кучу всего, вот такие оптимизации очень помогают (можно сократить объем программы на 10-50%). К ардуино это не относится, потому как загрузка 80% памяти уже ведет к глюкам.

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

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

Чувствуете разницу?
Честно? Не очень. Я слабо знаю C++ и оценить преимущество в коде к сожалению не смогу .....
Но тем не менее, спасибо вам на новую структурную реализацию процесса, которую я возьму на учет.

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

Добавлено: 24.02.2017{, 23:02}
Nikan
.

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

Добавлено: 25.02.2017{, 08:22}
Oleg
Спасибо. Я это уже пробовал работает. Но мне нужно чуть другое. Есть счетчик который считает нажатие кнопки до двух 1- откр.  2- закр. После пропадания питания соответствующая команда записывается в Eeprom. После восстановления питания читается из Eeprom один раз и выполняется противоположная команда. Дальше команды выполняются из счетчика. Нужно я так понимаю нужно обнулять записанное число в Eeprom. Помогите пожалуйста.

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

Добавлено: 25.02.2017{, 09:07}
Vitez
Oleg, После пропадания питания что либо записать нельзя. Для поддержания актуального состояния,необходимо каждый раз перезаписывать eeprom.

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

Добавлено: 25.02.2017{, 09:43}
Anydy
Boroda писал(а):Просто когда у МК остается три байта свободной памяти
Спрошу здесь, дабы не плодить темы...
Как оптимизировать библиотеку? Занимает 71% памяти....

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

Добавлено: 25.02.2017{, 12:06}
Oleg
Я имел ввиду что в eeprom уже до пропадания питания уже записано значение. И команда( т.е. значение взятое из памяти)должна один раз выполниться именно когда было пропадание питания. А если пропадания питания не было то работаем напрямую из счётчика.

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

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

Сейчас постепенно ваяю два проекта и уже получилось 70% занятия памяти в одном и 78% в другом. А реализована пока только добрая половина задуманного.
Что получается, что довёв их до логического конца я не смогу добиться нормальной их работы? Ведь уже явно видно, что память будет занята под завязку. И то, хватило бы...

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

Добавлено: 25.02.2017{, 13:33}
Boroda
DWD, тут на форуме народ обсуждал это. И говорилось именно про 80% и более. Я так понимаю, что это связано с переменными типа Стринг и внутренними массивами Си компилятора. При определенных условиях памяти не хватает и появляются глюки.

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

Добавлено: 25.02.2017{, 16:38}
Oleg
Так как насчет меня. Вопрос к господину Boroda. Помогите по моему вопросу.Пожалуйста.

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

Добавлено: 25.02.2017{, 17:18}
Boroda
Oleg, программу в студию, а то непонятно, зачем считать два нажатия кнопки счетчиком, когда можно обойтись битовой переменной.

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

Добавлено: 25.02.2017{, 21:31}
Oleg
Вот прилагаю прог. Это программа управления на ардуино вместо сгоревшей платы от роллетных ворот. Есть пульт с двумя кнопками пуск и стоп. Один раз нажимаешь открытие, второй раз закрытие. Отдельная кнопка стоп. Пройденный путь считается от датчика Холла. Проблема в записи при отключении питания . Как сделать чтобы при аварийном пропадании питания записывались команда и путь. А при восстановлении питания отрабатывалась один раз противоположная команда. А потом все стиралось. Если ворота были закрыты и пропало питание, а потом появилось то просто открытие. В заводской плате было так. Я ни как не пойму как это сделать.Помогите пожалуйста.

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

Добавлено: 25.02.2017{, 22:35}
Boroda
Oleg, а это вообще работает? У Вас вся схема в обратных связях...

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

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

Добавлено: 25.02.2017{, 22:59}
Гость
А причем тут проект?

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

Добавлено (25.02.2017, 22:59)
---------------------------------------------
Если Вы измеряете  питание на ардуине 5 В , то записывать не будет , т.к  вместе с питанием ардуины снижается и опорное напряжение , поэтому 3 вольта на ардуине будет 1023 всё равно....
Можно сделать независимое опорное напряжение на большом кондёре ,тогда все получится с 5 вольтами.

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

Добавлено: 25.02.2017{, 23:02}
Boroda
sser, а Вы проект откройте и все Lxx преобразуйте в линии. И введите импульс... на запись...

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