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

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

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

#1

Сообщение AndreyK0 » 26.11.2015{, 14:06}

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

Strix
Рядовой
Сообщения: 25
Зарегистрирован: 06.09.2015{, 10:22}
Репутация: 0
Откуда: Соликамск
Имя: Валерий

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

#2

Сообщение Strix » 26.11.2015{, 19:44}

Попробуйте как на рисунке

Airis
Сержант
Сообщения: 175
Зарегистрирован: 24.09.2015{, 07:27}
Репутация: 0

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

#3

Сообщение Airis » 26.11.2015{, 21:26}

В FLProg в EEPROM проще сохранят  и проще вернуть назад аналоговые значение, будь это счетчик или чистое аналоговое значение. С перемeнными типа boоlean будет посложнее вернуть назад значение из EEPROM. Например, простое действие - сохранение состояние RS триггера в EEPROM с последующем использованием этого состояние после возобновление подачи электричество у меня получилось достаточно сложным.
Вложения
0608676.png
Последний раз редактировалось Airis 26.11.2015{, 21:29}, всего редактировалось 1 раз.

AndreyK0
Рядовой
Сообщения: 30
Зарегистрирован: 04.11.2015{, 18:01}
Репутация: 0
Откуда: Белово

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

#4

Сообщение AndreyK0 » 27.11.2015{, 14:04}

какговорится ничоси... спасибо за направление в нужную сторону

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

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

#5

Сообщение CraCk » 10.02.2017{, 07:22}

Какие будут идеи чтоб записать состояние кнопки в eeprom и получать переменную из eeprom без лишних извращений? А также пример использование двух кнопок. Одной вкл. второй откл.

Аватара пользователя
Vitez
Сержант
Сообщения: 211
Зарегистрирован: 08.11.2015{, 14:32}
Репутация: 4

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

#6

Сообщение Vitez » 10.02.2017{, 08:38}

Изображение

Добавлено (10.02.2017, 08:38)
---------------------------------------------
Изображение

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#7

Сообщение Boroda » 10.02.2017{, 11:10}

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

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



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



Приложу небольшой проект управления увлажнителем воздуха через Modbus. Flprog v2.3.1. Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса. Генераторы управляют считыванием данных с датчика, записью EEPROM. Данная структура позволяет легко расширять программу и главное - основной цикл работает очень быстро, что позволит без задержек работать с кнопками, частотными выходами счетчиков воды, электроэнергии и т.д. В общем в тех случаях, когда нужна неземедлительная реакция контроллера.
Вложения
Test_am2302_1.flp
(463.29 КБ) 94 скачивания
9778369.jpg
0806134.jpg

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

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

#8

Сообщение CraCk » 12.02.2017{, 20:11}

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 проигрывает.
Вложения
8511668.jpg

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#9

Сообщение Boroda » 12.02.2017{, 20:33}

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

2. Вот эту строку видели?
Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса.
3.
CraCk писал(а):А можно плату без условий поставить на первое место, будет также адекватно загружать переменные из памяти в Modbus?
Переменные из EEPROM должны выдергиваться сразу же после запуска контроллера, и лучше сразу выгружать их в переменные Модбас. "Без условия": а зачем Вам в каждом цикле выполнять команду Val_modbus = EEPROM.readInt, это же отнимает время. Проще же сделать Val_modbus = Val.
Последний раз редактировалось Boroda 12.02.2017{, 21:02}, всего редактировалось 1 раз.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#10

Сообщение Boroda » 12.02.2017{, 20:53}

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


Что получится: переменные hum и set считали данные из памяти. Далее они обнуляются данными из Модбас переменных. И скада, сделав запрос, получит ноль. Поэтому в модбас лучше сразу записывать при старте, чтоб потом глюки не вылавливать.
Вложения
6648460.jpg

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#11

Сообщение Max » 13.02.2017{, 06:58}

Т.е. получается, если в проекте есть МодБас и работа с  EEPROM с передачей-приемом переменных через МодБас и соответствующие операции сохранения, то лучше всего в самой первой плате сверху считывать, записывать и обмениваться переменными по МодБас?

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#12

Сообщение Boroda » 13.02.2017{, 08:17}

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

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#13

Сообщение Max » 13.02.2017{, 08:40}

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

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

Попробую по принципу вашей логики перестроить проект.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#14

Сообщение Boroda » 13.02.2017{, 09:36}

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

Пример обновления дисплея:
Вложения
4595411.png
Последний раз редактировалось Boroda 13.02.2017{, 09:36}, всего редактировалось 1 раз.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#15

Сообщение Boroda » 13.02.2017{, 11:34}

Max, вот программа считывания показаний с электросчетчика с импульсным выходом, температуры и внешней освещенности и выводом в ModBus. Пока в железе не тестировалось, но теоритически должно работать корректно.
Вложения
Wth_term_7219_m.flp
(947.63 КБ) 92 скачивания

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#16

Сообщение Boroda » 13.02.2017{, 11:54}

Хотя можно попробовать без промежуточных переменных работать.
Вложения
4603980.flp
(940.99 КБ) 85 скачиваний

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#17

Сообщение Max » 13.02.2017{, 12:27}

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

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#18

Сообщение Boroda » 13.02.2017{, 12:38}

Max, так проект в версии 2.3.1, условие на плате дисплея стоит.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#19

Сообщение Max » 13.02.2017{, 13:19}

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

Новая память сжирает...

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

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

#20

Сообщение Boroda » 13.02.2017{, 14:21}

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

Ответить

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