FLProg
Вход на сайт
Логин:
Пароль:
Поиск
Мы в VK
...
Статистика
Воскресенье, 30.04.2017, 11:56
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » Хочу разобраться с EEPROM (Нуждаюсь в пояснениях)
Хочу разобраться с EEPROM
AndreyK0 Дата: Четверг, 26.11.2015, 14:06 | Сообщение # 1
Сержант
Группа: Проверенные
Сообщений: 30
Награды: 0
Репутация: 0
Статус: Offline
Приветствую!
Ни разу не программист, но хочу разобраться. Сделал макетку управления климатом в авто. Не совсем климат,  конечно... Итак логика такова:
Есть три тактовые кнопки
 - Первая на вкл/откл кондиционера, реализовал блоком ТТ триггера+звук нажатия на пассивный зуммер;
 - Вторая на вкл/откл обогрева заднего стекла, аналогично кондиционеру;
 - третья управление заслонкой - забор воздуха снаружи/циркуляция внутри салона. Управляется электромотор, через реверсивный драйвер от тошибы TA8080K. В дополнение сделал отключение спустя 20 секунд работы мотора, во избежание постоянной подачи напряжения. При нажатии пиликает, как и выше по тексту.
Теперь к сути вопроса. Помогите разобраться с сохранением состояний, чтобы при повторной подаче питания все возвращалось к последним значениям. Создаю блоки записи, выбираю тип boolean, вход записи никула не "прилипает", вход начала записи по фронту соединил с входом кнопки. С чтением при инициализации вообще пока ничего не понимаю, как его заставить отдать данны именно при включении?
 
Strix Дата: Четверг, 26.11.2015, 19:44 | Сообщение # 2
Рядовой
Группа: Проверенные
Сообщений: 27
Награды: 1
Репутация: 0
Статус: Offline
Попробуйте как на рисунке
Прикрепления: 0490552.bmp(126Kb)
 
Airis Дата: Четверг, 26.11.2015, 21:26 | Сообщение # 3
Майор
Группа: Проверенные
Сообщений: 156
Награды: 4
Репутация: 13
Статус: Offline
В FLProg в EEPROM проще сохранят  и проще вернуть назад аналоговые значение, будь это счетчик или чистое аналоговое значение. С перемeнными типа boоlean будет посложнее вернуть назад значение из EEPROM. Например, простое действие - сохранение состояние RS триггера в EEPROM с последующем использованием этого состояние после возобновление подачи электричество у меня получилось достаточно сложным.
Прикрепления: 0608676.png(9Kb)


Сообщение отредактировал Airis - Четверг, 26.11.2015, 21:29
 
AndreyK0 Дата: Пятница, 27.11.2015, 14:04 | Сообщение # 4
Сержант
Группа: Проверенные
Сообщений: 30
Награды: 0
Репутация: 0
Статус: Offline
какговорится ничоси... спасибо за направление в нужную сторону
 
CraCk Дата: Пятница, 10.02.2017, 07:22 | Сообщение # 5
Подполковник
Группа: Проверенные
Сообщений: 249
Награды: 2
Репутация: 3
Статус: Online
Какие будут идеи чтоб записать состояние кнопки в eeprom и получать переменную из eeprom без лишних извращений? А также пример использование двух кнопок. Одной вкл. второй откл.
 
Vitez Дата: Пятница, 10.02.2017, 08:38 | Сообщение # 6
Майор
Группа: Проверенные
Сообщений: 142
Награды: 4
Репутация: 1
Статус: Offline

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

 
Boroda Дата: Пятница, 10.02.2017, 11:10 | Сообщение # 7
Генерал-лейтенант
Группа: Проверенные
Сообщений: 765
Награды: 35
Репутация: 34
Статус: Offline
Поделюсь опытом работы EEPROM и Modbus slave.

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



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



Приложу небольшой проект управления увлажнителем воздуха через Modbus. Flprog v2.3.1. Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса. Генераторы управляют считыванием данных с датчика, записью EEPROM. Данная структура позволяет легко расширять программу и главное - основной цикл работает очень быстро, что позволит без задержек работать с кнопками, частотными выходами счетчиков воды, электроэнергии и т.д. В общем в тех случаях, когда нужна неземедлительная реакция контроллера.
Прикрепления: 0806134.jpg(23Kb) · 9778369.jpg(23Kb) · Test_am2302_1.flp(463Kb)
 
CraCk Дата: Воскресенье, 12.02.2017, 20:11 | Сообщение # 8
Подполковник
Группа: Проверенные
Сообщений: 249
Награды: 2
Репутация: 3
Статус: Online
Цитата 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(10Kb)
 
Boroda Дата: Воскресенье, 12.02.2017, 20:33 | Сообщение # 9
Генерал-лейтенант
Группа: Проверенные
Сообщений: 765
Награды: 35
Репутация: 34
Статус: Offline
1.
Цитата CraCk ()
А если программа работает а Modbus подключается в процессе работы программы, или данные в память записани, то считать можно только после рестарта программы на ардуине?

Вы приложенную программу смотрели?

2. Вот эту строку видели?
Цитата
Основной цикл программы представляет собой набор генераторов и переприсвоения переменных модбаса.

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


Сообщение отредактировал Boroda - Воскресенье, 12.02.2017, 21:02
 
Boroda Дата: Воскресенье, 12.02.2017, 20:53 | Сообщение # 10
Генерал-лейтенант
Группа: Проверенные
Сообщений: 765
Награды: 35
Репутация: 34
Статус: Offline
Возьмем такую схему, и вырежем эту часть:


Что получится: переменные hum и set считали данные из памяти. Далее они обнуляются данными из Модбас переменных. И скада, сделав запрос, получит ноль. Поэтому в модбас лучше сразу записывать при старте, чтоб потом глюки не вылавливать.
Прикрепления: 6648460.jpg(59Kb)
 
Max Дата: Понедельник, 13.02.2017, 06:58 | Сообщение # 11
Гуру
Группа: Проверенные
Сообщений: 586
Награды: 15
Репутация: 4
Статус: Offline
Т.е. получается, если в проекте есть МодБас и работа с  EEPROM с передачей-приемом переменных через МодБас и соответствующие операции сохранения, то лучше всего в самой первой плате сверху считывать, записывать и обмениваться переменными по МодБас?
 
Boroda Дата: Понедельник, 13.02.2017, 08:17 | Сообщение # 12
Генерал-лейтенант
Группа: Проверенные
Сообщений: 765
Награды: 35
Репутация: 34
Статус: Offline
Max, если ваше устройство является Слейвом, то уставки (переменные, которые передаются туда/сюда readwrite) модбас должны быть присвоены сразу же при запуске программы. Переменные, которые передаются только в сторону скады (readonly) можно записывать в любом месте программы.
 
Max Дата: Понедельник, 13.02.2017, 08:40 | Сообщение # 13
Гуру
Группа: Проверенные
Сообщений: 586
Награды: 15
Репутация: 4
Статус: Offline
Цитата Boroda ()
Max, если ваше устройство является Слейвом, то уставки (переменные, которые передаются туда/сюда readwrite) модбас должны быть присвоены сразу же при запуске программы. Переменные, которые передаются только в сторону скады (readonly) можно записывать в любом месте программы.

У меня как раз задействованы все регистры, как чтения так и записи, аналоговые, и булеановские. Передаются туда-сюда. Записываются в EEPROM, считываются.

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

Попробую по принципу вашей логики перестроить проект.
 
Boroda Дата: Понедельник, 13.02.2017, 09:36 | Сообщение # 14
Генерал-лейтенант
Группа: Проверенные
Сообщений: 765
Награды: 35
Репутация: 34
Статус: Offline
Max, самое главное - это из основного цикла программы выкинуть все лишнее, что не нужно выполнять каждый цикл. Обновление дисплея со всеми преобразованиями String только по необходимости. Все датчики разделить по платам с условием, а условие - генератор с RTrig в основном цикле.

Пример обновления дисплея:
Прикрепления: 4595411.png(31Kb)


Сообщение отредактировал Boroda - Понедельник, 13.02.2017, 09:36
 
Boroda Дата: Понедельник, 13.02.2017, 11:34 | Сообщение # 15
Генерал-лейтенант
Группа: Проверенные
Сообщений: 765
Награды: 35
Репутация: 34
Статус: Offline
Max, вот программа считывания показаний с электросчетчика с импульсным выходом, температуры и внешней освещенности и выводом в ModBus. Пока в железе не тестировалось, но теоритически должно работать корректно.
Прикрепления: Wth_term_7219_m.flp(948Kb)
 
Форум » Основной » Спросить у знатоков » Хочу разобраться с EEPROM (Нуждаюсь в пояснениях)
Страница 1 из 212»
Поиск:

FLProg © 2017
Яндекс.Метрика