Страница 1 из 2
Хочу разобраться с EEPROM
Добавлено: 26 ноя 2015, 14:06
AndreyK0
Приветствую!
Ни разу не программист, но хочу разобраться. Сделал макетку управления климатом в авто. Не совсем климат, конечно... Итак логика такова:
Есть три тактовые кнопки
- Первая на вкл/откл кондиционера, реализовал блоком ТТ триггера+звук нажатия на пассивный зуммер;
- Вторая на вкл/откл обогрева заднего стекла, аналогично кондиционеру;
- третья управление заслонкой - забор воздуха снаружи/циркуляция внутри салона. Управляется электромотор, через реверсивный драйвер от тошибы TA8080K. В дополнение сделал отключение спустя 20 секунд работы мотора, во избежание постоянной подачи напряжения. При нажатии пиликает, как и выше по тексту.
Теперь к сути вопроса. Помогите разобраться с сохранением состояний, чтобы при повторной подаче питания все возвращалось к последним значениям. Создаю блоки записи, выбираю тип boolean, вход записи никула не "прилипает", вход начала записи по фронту соединил с входом кнопки. С чтением при инициализации вообще пока ничего не понимаю, как его заставить отдать данны именно при включении?
Хочу разобраться с EEPROM
Добавлено: 26 ноя 2015, 19:44
Strix
Попробуйте как на рисунке
Хочу разобраться с EEPROM
Добавлено: 26 ноя 2015, 21:26
Airis
В FLProg в EEPROM проще сохранят и проще вернуть назад аналоговые значение, будь это счетчик или чистое аналоговое значение. С перемeнными типа boоlean будет посложнее вернуть назад значение из EEPROM. Например, простое действие - сохранение состояние RS триггера в EEPROM с последующем использованием этого состояние после возобновление подачи электричество у меня получилось достаточно сложным.
Хочу разобраться с EEPROM
Добавлено: 27 ноя 2015, 14:04
AndreyK0
какговорится ничоси... спасибо за направление в нужную сторону
Хочу разобраться с EEPROM
Добавлено: 10 фев 2017, 07:22
CraCk
Какие будут идеи чтоб записать состояние кнопки в eeprom и получать переменную из eeprom без лишних извращений? А также пример использование двух кнопок. Одной вкл. второй откл.
Хочу разобраться с EEPROM
Добавлено: 10 фев 2017, 08:38
Vitez
Добавлено (10.02.2017, 08:38)
---------------------------------------------

Хочу разобраться с EEPROM
Добавлено: 10 фев 2017, 11:10
Boroda
Поделюсь опытом работы EEPROM и Modbus slave.
В начале программы в плате с условием читаем EEPROM и здесь же записываем данные в переменные Modbus, если это отложить на потом, то работает некорректно (Скада видит ноль). В качестве условия используется переменная типа bool = true, которая сбрасывается в этой же плате. Т.о. чтение из памяти происходит один раз при запуске программы.
Запись переменных в EEPROM лучше производить на отдельной плате с условием. В качестве условия генератор на 5/5секунд и Rtrig в основном цикле программы. Внутри платы запись происходит по изменению, таким образом увеличиваем ресурс памяти.
Приложу небольшой проект управления увлажнителем воздуха через Modbus. Flprog v2.3.1. Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса. Генераторы управляют считыванием данных с датчика, записью EEPROM. Данная структура позволяет легко расширять программу и главное - основной цикл работает очень быстро, что позволит без задержек работать с кнопками, частотными выходами счетчиков воды, электроэнергии и т.д. В общем в тех случаях, когда нужна неземедлительная реакция контроллера.
Хочу разобраться с EEPROM
Добавлено: 12 фев 2017, 20:11
CraCk
Vitez писал(а):Добавлено (10.02.2017, 08:38)---------------------------------------------
Запись в еепром в два слота, а чтение из 1-го слота? Зачем тогда записывать в 2-ва слота?
Boroda писал(а):если это отложить на потом, то работает некорректно (Скада видит ноль).
Вот это интересно. А можно плату без условий поставить на первое место, будет также адекватно загружать переменные из памяти в Modbus?
Boroda писал(а):Т.о. чтение из памяти происходит один раз при запуске программы.
А если программа работает а Modbus подключается в процессе работы программы, или данные в память записани, то считать можно только после рестарта программы на ардуине?
Неужели все так сложно с EEprom? только нужно записать состояние булиана и считывать его.
В С запись происходит
pusk=HIGH; EEPROM_write_byte(8,pusk)
а чтение
pusk=EEPROM_read_byte(8);
Тут кажысь flprog проигрывает.
Хочу разобраться с EEPROM
Добавлено: 12 фев 2017, 20:33
Boroda
1.
CraCk писал(а):А если программа работает а Modbus подключается в процессе работы программы, или данные в память записани, то считать можно только после рестарта программы на ардуине?
Вы приложенную программу смотрели?
2. Вот эту строку видели?
Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса.
3.
CraCk писал(а):А можно плату без условий поставить на первое место, будет также адекватно загружать переменные из памяти в Modbus?
Переменные из EEPROM должны выдергиваться сразу же после запуска контроллера, и лучше сразу выгружать их в переменные Модбас. "Без условия": а зачем Вам в каждом цикле выполнять команду Val_modbus = EEPROM.readInt, это же отнимает время. Проще же сделать Val_modbus = Val.
Хочу разобраться с EEPROM
Добавлено: 12 фев 2017, 20:53
Boroda
Возьмем такую схему, и вырежем эту часть:
Что получится: переменные hum и set считали данные из памяти. Далее они обнуляются данными из Модбас переменных. И скада, сделав запрос, получит ноль. Поэтому в модбас лучше сразу записывать при старте, чтоб потом глюки не вылавливать.
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 06:58
Max
Т.е. получается, если в проекте есть МодБас и работа с EEPROM с передачей-приемом переменных через МодБас и соответствующие операции сохранения, то лучше всего в самой первой плате сверху считывать, записывать и обмениваться переменными по МодБас?
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 08:17
Boroda
Max, если ваше устройство является Слейвом, то уставки (переменные, которые передаются туда/сюда readwrite) модбас должны быть присвоены сразу же при запуске программы. Переменные, которые передаются только в сторону скады (readonly) можно записывать в любом месте программы.
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 08:40
Max
Boroda писал(а):Max, если ваше устройство является Слейвом, то уставки (переменные, которые передаются туда/сюда readwrite) модбас должны быть присвоены сразу же при запуске программы. Переменные, которые передаются только в сторону скады (readonly) можно записывать в любом месте программы.
У меня как раз задействованы все регистры, как чтения так и записи, аналоговые, и булеановские. Передаются туда-сюда. Записываются в EEPROM, считываются.
Тормоза жуткие... Реакция на нажатие кнопки несколько секунд, а то и десяток секунд!
Попробую по принципу вашей логики перестроить проект.
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 09:36
Boroda
Max, самое главное - это из основного цикла программы выкинуть все лишнее, что не нужно выполнять каждый цикл. Обновление дисплея со всеми преобразованиями String только по необходимости. Все датчики разделить по платам с условием, а условие - генератор с RTrig в основном цикле.
Пример обновления дисплея:
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 11:34
Boroda
Max, вот программа считывания показаний с электросчетчика с импульсным выходом, температуры и внешней освещенности и выводом в ModBus. Пока в железе не тестировалось, но теоритически должно работать корректно.
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 11:54
Boroda
Хотя можно попробовать без промежуточных переменных работать.
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 12:27
Max
Boroda писал(а):Max, самое главное - это из основного цикла программы выкинуть все лишнее, что не нужно выполнять каждый цикл. Обновление дисплея со всеми преобразованиями String только по необходимости. Все датчики разделить по платам с условием, а условие - генератор с RTrig в основном цикле.
А Вашем примере переменная disp вообще чем управляет? Она даже с блоком дисплея не связана...
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 12:38
Boroda
Max, так проект в версии 2.3.1, условие на плате дисплея стоит.
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 13:19
Max
Boroda писал(а):Max, так проект в версии 2.3.1, условие на плате дисплея стоит.
Понял. Пользуюсь старой версией 2.1.1
Новая память сжирает...
Хочу разобраться с EEPROM
Добавлено: 13 фев 2017, 14:21
Boroda
Max, а что, если FLProg новый, а IDE Arduino старый? Где-то на форуме обсуждалось. Ведь это ИДЕ программы увеличивает.