Хочу разобраться с EEPROM
Хочу разобраться с EEPROM
Приветствую!
Ни разу не программист, но хочу разобраться. Сделал макетку управления климатом в авто. Не совсем климат, конечно... Итак логика такова:
Есть три тактовые кнопки
- Первая на вкл/откл кондиционера, реализовал блоком ТТ триггера+звук нажатия на пассивный зуммер;
- Вторая на вкл/откл обогрева заднего стекла, аналогично кондиционеру;
- третья управление заслонкой - забор воздуха снаружи/циркуляция внутри салона. Управляется электромотор, через реверсивный драйвер от тошибы TA8080K. В дополнение сделал отключение спустя 20 секунд работы мотора, во избежание постоянной подачи напряжения. При нажатии пиликает, как и выше по тексту.
Теперь к сути вопроса. Помогите разобраться с сохранением состояний, чтобы при повторной подаче питания все возвращалось к последним значениям. Создаю блоки записи, выбираю тип boolean, вход записи никула не "прилипает", вход начала записи по фронту соединил с входом кнопки. С чтением при инициализации вообще пока ничего не понимаю, как его заставить отдать данны именно при включении?
Ни разу не программист, но хочу разобраться. Сделал макетку управления климатом в авто. Не совсем климат, конечно... Итак логика такова:
Есть три тактовые кнопки
- Первая на вкл/откл кондиционера, реализовал блоком ТТ триггера+звук нажатия на пассивный зуммер;
- Вторая на вкл/откл обогрева заднего стекла, аналогично кондиционеру;
- третья управление заслонкой - забор воздуха снаружи/циркуляция внутри салона. Управляется электромотор, через реверсивный драйвер от тошибы TA8080K. В дополнение сделал отключение спустя 20 секунд работы мотора, во избежание постоянной подачи напряжения. При нажатии пиликает, как и выше по тексту.
Теперь к сути вопроса. Помогите разобраться с сохранением состояний, чтобы при повторной подаче питания все возвращалось к последним значениям. Создаю блоки записи, выбираю тип boolean, вход записи никула не "прилипает", вход начала записи по фронту соединил с входом кнопки. С чтением при инициализации вообще пока ничего не понимаю, как его заставить отдать данны именно при включении?
Хочу разобраться с EEPROM
В FLProg в EEPROM проще сохранят и проще вернуть назад аналоговые значение, будь это счетчик или чистое аналоговое значение. С перемeнными типа boоlean будет посложнее вернуть назад значение из EEPROM. Например, простое действие - сохранение состояние RS триггера в EEPROM с последующем использованием этого состояние после возобновление подачи электричество у меня получилось достаточно сложным.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Airis 26 ноя 2015, 21:29, всего редактировалось 1 раз.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Хочу разобраться с EEPROM
Какие будут идеи чтоб записать состояние кнопки в eeprom и получать переменную из eeprom без лишних извращений? А также пример использование двух кнопок. Одной вкл. второй откл.
Хочу разобраться с EEPROM

Добавлено (10.02.2017, 08:38)
---------------------------------------------

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