Как сделать считывание Eeprom один раз.
- Oleg
- Сержант
- Сообщения: 204
- Зарегистрирован: 17 сен 2015, 13:04
- Откуда: Беларусь
- Имя: Олег
- Благодарил (а): 43 раза
Как сделать считывание Eeprom один раз.
Скажите как после пропадания питания и после запуска программы данные из Eeprom читались только один раз.Или сбросить записанные данные. Не получается никак одолеть эту проблему.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
Заводите переменную bool ReadEPP с начальным значением True. В первой плате делаете чтение из EEPROM в переменные с входами разрешения записи. К этим входам цепляете переменную ReedEPP. После блоков чтения делаете ReadEPP = 0.
Таким образом переменные прочитаются один раз, далее бит разрешения обнулится.
Или на плате с условием. Плата выполнится только один раз.
Таким образом переменные прочитаются один раз, далее бит разрешения обнулится.
Или на плате с условием. Плата выполнится только один раз.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Boroda 24 фев 2017, 17:05, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
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 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
Просто когда у МК остается три байта свободной памяти, а надо засунуть еще кучу всего, вот такие оптимизации очень помогают (можно сократить объем программы на 10-50%). К ардуино это не относится, потому как загрузка 80% памяти уже ведет к глюкам.
Как сделать считывание Eeprom один раз.
Boroda, 99% процентов пользователей задающих подобные вопросы не создадут проект на 80% памяти. На мой взгляд, предложенная мной реализация проще именно в формате FlProg.
Но тем не менее, спасибо вам на новую структурную реализацию процесса, которую я возьму на учет.
Честно? Не очень. Я слабо знаю C++ и оценить преимущество в коде к сожалению не смогу .....Чувствуете разницу?
Но тем не менее, спасибо вам на новую структурную реализацию процесса, которую я возьму на учет.
Как сделать считывание Eeprom один раз.
.
Последний раз редактировалось Nikan 23 мар 2023, 16:16, всего редактировалось 2 раза.
- Oleg
- Сержант
- Сообщения: 204
- Зарегистрирован: 17 сен 2015, 13:04
- Откуда: Беларусь
- Имя: Олег
- Благодарил (а): 43 раза
Как сделать считывание Eeprom один раз.
Спасибо. Я это уже пробовал работает. Но мне нужно чуть другое. Есть счетчик который считает нажатие кнопки до двух 1- откр. 2- закр. После пропадания питания соответствующая команда записывается в Eeprom. После восстановления питания читается из Eeprom один раз и выполняется противоположная команда. Дальше команды выполняются из счетчика. Нужно я так понимаю нужно обнулять записанное число в Eeprom. Помогите пожалуйста.
Как сделать считывание Eeprom один раз.
Oleg, После пропадания питания что либо записать нельзя. Для поддержания актуального состояния,необходимо каждый раз перезаписывать eeprom.
-
Anydy
Как сделать считывание Eeprom один раз.
Спрошу здесь, дабы не плодить темы...Boroda писал(а):Просто когда у МК остается три байта свободной памяти
Как оптимизировать библиотеку? Занимает 71% памяти....
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Oleg
- Сержант
- Сообщения: 204
- Зарегистрирован: 17 сен 2015, 13:04
- Откуда: Беларусь
- Имя: Олег
- Благодарил (а): 43 раза
Как сделать считывание Eeprom один раз.
Я имел ввиду что в eeprom уже до пропадания питания уже записано значение. И команда( т.е. значение взятое из памяти)должна один раз выполниться именно когда было пропадание питания. А если пропадания питания не было то работаем напрямую из счётчика.
Последний раз редактировалось Oleg 25 фев 2017, 16:42, всего редактировалось 1 раз.
Как сделать считывание Eeprom один раз.
Это как? Если "нарисованная" программа занимает более 80% памяти МК, то её корректная работа невозможна?Boroda писал(а):К ардуино это не относится, потому как загрузка 80% памяти уже ведет к глюкам.
Сейчас постепенно ваяю два проекта и уже получилось 70% занятия памяти в одном и 78% в другом. А реализована пока только добрая половина задуманного.
Что получается, что довёв их до логического конца я не смогу добиться нормальной их работы? Ведь уже явно видно, что память будет занята под завязку. И то, хватило бы...
Последний раз редактировалось DWD 25 фев 2017, 12:32, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
DWD, тут на форуме народ обсуждал это. И говорилось именно про 80% и более. Я так понимаю, что это связано с переменными типа Стринг и внутренними массивами Си компилятора. При определенных условиях памяти не хватает и появляются глюки.
- Oleg
- Сержант
- Сообщения: 204
- Зарегистрирован: 17 сен 2015, 13:04
- Откуда: Беларусь
- Имя: Олег
- Благодарил (а): 43 раза
Как сделать считывание Eeprom один раз.
Так как насчет меня. Вопрос к господину Boroda. Помогите по моему вопросу.Пожалуйста.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
Oleg, программу в студию, а то непонятно, зачем считать два нажатия кнопки счетчиком, когда можно обойтись битовой переменной.
- Oleg
- Сержант
- Сообщения: 204
- Зарегистрирован: 17 сен 2015, 13:04
- Откуда: Беларусь
- Имя: Олег
- Благодарил (а): 43 раза
Как сделать считывание Eeprom один раз.
Вот прилагаю прог. Это программа управления на ардуино вместо сгоревшей платы от роллетных ворот. Есть пульт с двумя кнопками пуск и стоп. Один раз нажимаешь открытие, второй раз закрытие. Отдельная кнопка стоп. Пройденный путь считается от датчика Холла. Проблема в записи при отключении питания . Как сделать чтобы при аварийном пропадании питания записывались команда и путь. А при восстановлении питания отрабатывалась один раз противоположная команда. А потом все стиралось. Если ворота были закрыты и пропало питание, а потом появилось то просто открытие. В заводской плате было так. Я ни как не пойму как это сделать.Помогите пожалуйста.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
Oleg, а это вообще работает? У Вас вся схема в обратных связях...
Добавлено (25.02.2017, 22:35)
---------------------------------------------
Вы через полгода откроете свой проект и ничего тут не поймете...
Добавлено (25.02.2017, 22:35)
---------------------------------------------
Вы через полгода откроете свой проект и ничего тут не поймете...
-
Гость
Как сделать считывание Eeprom один раз.
А причем тут проект?
Нужно в контроллер ввести импульс который будет появляться перед тем как пропадет питание , с него то и дадите команду на запись в память.
Можно сделать так. Если питание к примеру 9 вольт, то ставим последовательно два одинаковых резистора 1-10К и посредине будет 4.5 вольт направляем это напряжение в аналоговый вход ардуины и в проекте ставим блок сравнения ,если число на АЦП будет меньше чем при 9 вольтах , то даем импульс на запись .
Или может по другому было сделано?
Добавлено (25.02.2017, 22:59)
---------------------------------------------
Если Вы измеряете питание на ардуине 5 В , то записывать не будет , т.к вместе с питанием ардуины снижается и опорное напряжение , поэтому 3 вольта на ардуине будет 1023 всё равно....
Можно сделать независимое опорное напряжение на большом кондёре ,тогда все получится с 5 вольтами.
Нужно в контроллер ввести импульс который будет появляться перед тем как пропадет питание , с него то и дадите команду на запись в память.
Можно сделать так. Если питание к примеру 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
- Откуда: Коломна
- Имя: Станислав
- Поблагодарили: 1 раз
- Контактная информация:
Как сделать считывание Eeprom один раз.
sser, а Вы проект откройте и все Lxx преобразуйте в линии. И введите импульс... на запись...
Добавлено (25.02.2017, 23:02)
---------------------------------------------
Я уже больше часа растаскиваю блоки на своем 19" монике и никак не разберусь в этих хитросплетениях.
Добавлено (25.02.2017, 23:02)
---------------------------------------------
Я уже больше часа растаскиваю блоки на своем 19" монике и никак не разберусь в этих хитросплетениях.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость

