Хочу разобраться с EEPROM

Использование внешней и внутренней EEPROM, а так-же SD card
AndreyK0
Рядовой
Сообщения: 30
Зарегистрирован: 04 ноя 2015, 18:01
Откуда: Белово

Хочу разобраться с EEPROM

Сообщение AndreyK0 »

Приветствую!
Ни разу не программист, но хочу разобраться. Сделал макетку управления климатом в авто. Не совсем климат,  конечно... Итак логика такова:
Есть три тактовые кнопки
 - Первая на вкл/откл кондиционера, реализовал блоком ТТ триггера+звук нажатия на пассивный зуммер;
 - Вторая на вкл/откл обогрева заднего стекла, аналогично кондиционеру;
 - третья управление заслонкой - забор воздуха снаружи/циркуляция внутри салона. Управляется электромотор, через реверсивный драйвер от тошибы TA8080K. В дополнение сделал отключение спустя 20 секунд работы мотора, во избежание постоянной подачи напряжения. При нажатии пиликает, как и выше по тексту.
Теперь к сути вопроса. Помогите разобраться с сохранением состояний, чтобы при повторной подаче питания все возвращалось к последним значениям. Создаю блоки записи, выбираю тип boolean, вход записи никула не "прилипает", вход начала записи по фронту соединил с входом кнопки. С чтением при инициализации вообще пока ничего не понимаю, как его заставить отдать данны именно при включении?
Strix
Рядовой
Сообщения: 25
Зарегистрирован: 06 сен 2015, 10:22
Откуда: Соликамск
Имя: Валерий

Хочу разобраться с EEPROM

Сообщение Strix »

Попробуйте как на рисунке
Airis
Сержант
Сообщения: 175
Зарегистрирован: 24 сен 2015, 07:27

Хочу разобраться с EEPROM

Сообщение Airis »

В FLProg в EEPROM проще сохранят  и проще вернуть назад аналоговые значение, будь это счетчик или чистое аналоговое значение. С перемeнными типа boоlean будет посложнее вернуть назад значение из EEPROM. Например, простое действие - сохранение состояние RS триггера в EEPROM с последующем использованием этого состояние после возобновление подачи электричество у меня получилось достаточно сложным.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Airis 26 ноя 2015, 21:29, всего редактировалось 1 раз.
AndreyK0
Рядовой
Сообщения: 30
Зарегистрирован: 04 ноя 2015, 18:01
Откуда: Белово

Хочу разобраться с EEPROM

Сообщение AndreyK0 »

какговорится ничоси... спасибо за направление в нужную сторону
CraCk
Лейтенант
Сообщения: 674
Зарегистрирован: 10 сен 2015, 21:51
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Хочу разобраться с EEPROM

Сообщение CraCk »

Какие будут идеи чтоб записать состояние кнопки в eeprom и получать переменную из eeprom без лишних извращений? А также пример использование двух кнопок. Одной вкл. второй откл.
Аватара пользователя
Vitez
Сержант
Сообщения: 212
Зарегистрирован: 08 ноя 2015, 14:32

Хочу разобраться с EEPROM

Сообщение Vitez »

Изображение

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

Хочу разобраться с EEPROM

Сообщение Boroda »

Поделюсь опытом работы EEPROM и Modbus slave.

В начале программы в плате с условием читаем EEPROM и здесь же записываем данные в переменные Modbus, если это отложить на потом, то работает некорректно (Скада видит ноль). В качестве условия используется переменная типа bool = true, которая сбрасывается в этой же плате. Т.о. чтение из памяти происходит один раз при запуске программы.



Запись переменных в EEPROM лучше производить на отдельной плате с условием. В качестве условия генератор на 5/5секунд и Rtrig в основном цикле программы. Внутри платы запись происходит по изменению, таким образом увеличиваем ресурс памяти.



Приложу небольшой проект управления увлажнителем воздуха через Modbus. Flprog v2.3.1. Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса. Генераторы управляют считыванием данных с датчика, записью EEPROM. Данная структура позволяет легко расширять программу и главное - основной цикл работает очень быстро, что позволит без задержек работать с кнопками, частотными выходами счетчиков воды, электроэнергии и т.д. В общем в тех случаях, когда нужна неземедлительная реакция контроллера.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
CraCk
Лейтенант
Сообщения: 674
Зарегистрирован: 10 сен 2015, 21:51
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Хочу разобраться с EEPROM

Сообщение 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 проигрывает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Хочу разобраться с EEPROM

Сообщение Boroda »

1.
CraCk писал(а):А если программа работает а Modbus подключается в процессе работы программы, или данные в память записани, то считать можно только после рестарта программы на ардуине?
Вы приложенную программу смотрели?

2. Вот эту строку видели?
Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса.
3.
CraCk писал(а):А можно плату без условий поставить на первое место, будет также адекватно загружать переменные из памяти в Modbus?
Переменные из EEPROM должны выдергиваться сразу же после запуска контроллера, и лучше сразу выгружать их в переменные Модбас. "Без условия": а зачем Вам в каждом цикле выполнять команду Val_modbus = EEPROM.readInt, это же отнимает время. Проще же сделать Val_modbus = Val.
Последний раз редактировалось Boroda 12 фев 2017, 21:02, всего редактировалось 1 раз.
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Хочу разобраться с EEPROM

Сообщение Boroda »

Возьмем такую схему, и вырежем эту часть:


Что получится: переменные hum и set считали данные из памяти. Далее они обнуляются данными из Модбас переменных. И скада, сделав запрос, получит ноль. Поэтому в модбас лучше сразу записывать при старте, чтоб потом глюки не вылавливать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06 сен 2015, 13:12
Откуда: Тюмень-Баку
Имя: Максим

Хочу разобраться с EEPROM

Сообщение Max »

Т.е. получается, если в проекте есть МодБас и работа с  EEPROM с передачей-приемом переменных через МодБас и соответствующие операции сохранения, то лучше всего в самой первой плате сверху считывать, записывать и обмениваться переменными по МодБас?
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Хочу разобраться с EEPROM

Сообщение Boroda »

Max, если ваше устройство является Слейвом, то уставки (переменные, которые передаются туда/сюда readwrite) модбас должны быть присвоены сразу же при запуске программы. Переменные, которые передаются только в сторону скады (readonly) можно записывать в любом месте программы.
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06 сен 2015, 13:12
Откуда: Тюмень-Баку
Имя: Максим

Хочу разобраться с EEPROM

Сообщение Max »

Boroda писал(а):Max, если ваше устройство является Слейвом, то уставки (переменные, которые передаются туда/сюда readwrite) модбас должны быть присвоены сразу же при запуске программы. Переменные, которые передаются только в сторону скады (readonly) можно записывать в любом месте программы.
У меня как раз задействованы все регистры, как чтения так и записи, аналоговые, и булеановские. Передаются туда-сюда. Записываются в EEPROM, считываются.

Тормоза жуткие... Реакция на нажатие кнопки несколько секунд, а то и десяток секунд!

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

Хочу разобраться с EEPROM

Сообщение Boroda »

Max, самое главное - это из основного цикла программы выкинуть все лишнее, что не нужно выполнять каждый цикл. Обновление дисплея со всеми преобразованиями String только по необходимости. Все датчики разделить по платам с условием, а условие - генератор с RTrig в основном цикле.

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

Хочу разобраться с EEPROM

Сообщение Boroda »

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

Хочу разобраться с EEPROM

Сообщение Boroda »

Хотя можно попробовать без промежуточных переменных работать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06 сен 2015, 13:12
Откуда: Тюмень-Баку
Имя: Максим

Хочу разобраться с EEPROM

Сообщение Max »

Boroda писал(а):Max, самое главное - это из основного цикла программы выкинуть все лишнее, что не нужно выполнять каждый цикл. Обновление дисплея со всеми преобразованиями String только по необходимости. Все датчики разделить по платам с условием, а условие - генератор с RTrig в основном цикле.
А Вашем примере переменная disp вообще чем управляет? Она даже с блоком дисплея не связана...
Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01 май 2016, 01:04
Откуда: Коломна
Имя: Станислав
Контактная информация:

Хочу разобраться с EEPROM

Сообщение Boroda »

Max, так проект в версии 2.3.1, условие на плате дисплея стоит.
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06 сен 2015, 13:12
Откуда: Тюмень-Баку
Имя: Максим

Хочу разобраться с EEPROM

Сообщение Max »

Boroda писал(а):Max, так проект в версии 2.3.1, условие на плате дисплея стоит.
Понял. Пользуюсь старой версией 2.1.1

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

Хочу разобраться с EEPROM

Сообщение Boroda »

Max, а что, если FLProg новый, а IDE Arduino старый? Где-то на форуме обсуждалось. Ведь это ИДЕ программы увеличивает.
Ответить

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

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

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