Остановка генератора на время опроса датчиков.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Остановка генератора на время опроса датчиков.
Происходит остановка генератора на время опроса датчиков.
Особенно проявляется с DHT22.
Проверял в версиях FLProg 2.1.1 и 2.3.
Добавлено (30.01.2017, 09:09)
---------------------------------------------
Так-же происходит остановка генератора в блоке "Меню" при использовании входов "+" и "-" с ускорением.
Особенно проявляется с DHT22.
Проверял в версиях FLProg 2.1.1 и 2.3.
Добавлено (30.01.2017, 09:09)
---------------------------------------------
Так-же происходит остановка генератора в блоке "Меню" при использовании входов "+" и "-" с ускорением.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
Ну это нормально, хоть генератор (ton/tof/симметр/ассиметр) и построен на внутреннем RealTime-счетчике, но обращение к блоку генератора, где сравнивается время, происходит только после того, как выполнится предыдущая часть программы. В данном случае медицина бессильна. Тут поможет только вручную код писать.
П.С. Я, например, делал опрос DS18B20 по одному биту в прерывании каждые 2мс, тут же показ очередного знакоместа динамической индикации, сканирование кнопок и расчет всех таймеров, применяемых в программе. Но это на ПИКе и программа текстом.
П.С. Я, например, делал опрос DS18B20 по одному биту в прерывании каждые 2мс, тут же показ очередного знакоместа динамической индикации, сканирование кнопок и расчет всех таймеров, применяемых в программе. Но это на ПИКе и программа текстом.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Остановка генератора на время опроса датчиков.
Для этого нужно отдельный блок на C для FLProg...
В стандартном варианте, конечно очень ограничивает возможности с использованием генераторов...
В стандартном варианте, конечно очень ограничивает возможности с использованием генераторов...
Последний раз редактировалось Siberian 30 янв 2017, 19:58, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
Для этого нужны блоки, заменяющие все кривые библиотеки и надо определьться со структурой программы, которая подойдет почти под все проекты. Но сами понимаете - это не реально.
Если для динамической индикации, RS485 Modbus, DS18B20, NEC-IR, кнопок, АЦП, ЦифрФильтров, часов реального времени без DS1307 (одновременно работающих) подойдет способ прерывания 2мс и кучи маленьких подпрограмм, срабатывающих по флагам, то для опроса DHT22 надо использовать ногу с аппаратным прерыванием или таймером в режиме захвата, иначе RS485 и динамическая индикация будут работать некорректно, т.к. придется отключать все прерывания.
Работу с граф. экранами от сотиков тоже надо разбивать на кусочки, начинаем заполнять, потом происходит прерывание по таймеру, далее надо пробежаться по всей программе и снова продолжить заполнять экран.
Все датчики должны опрашиваться последовательно по таймеру. Все тяжелые преобразования Int_to_string, деления/умножения и т.д. должны отрабатывать только по изменению этого ИНТа, а не в каждом цикле и вначале программы инициализироваться. Дисплеи должны обновляться раз в секунду (защита от помех) или только по изменению выводимых данных (у меня это завязано на факт нажатия кнопок меню </>/+/-). Динамическая индикация у меня работает с буфером, закинул в него данные и оно там само крутится. И никаких Delay в программе, даже на 100 мкс.
Если для динамической индикации, RS485 Modbus, DS18B20, NEC-IR, кнопок, АЦП, ЦифрФильтров, часов реального времени без DS1307 (одновременно работающих) подойдет способ прерывания 2мс и кучи маленьких подпрограмм, срабатывающих по флагам, то для опроса DHT22 надо использовать ногу с аппаратным прерыванием или таймером в режиме захвата, иначе RS485 и динамическая индикация будут работать некорректно, т.к. придется отключать все прерывания.
Работу с граф. экранами от сотиков тоже надо разбивать на кусочки, начинаем заполнять, потом происходит прерывание по таймеру, далее надо пробежаться по всей программе и снова продолжить заполнять экран.
Все датчики должны опрашиваться последовательно по таймеру. Все тяжелые преобразования Int_to_string, деления/умножения и т.д. должны отрабатывать только по изменению этого ИНТа, а не в каждом цикле и вначале программы инициализироваться. Дисплеи должны обновляться раз в секунду (защита от помех) или только по изменению выводимых данных (у меня это завязано на факт нажатия кнопок меню </>/+/-). Динамическая индикация у меня работает с буфером, закинул в него данные и оно там само крутится. И никаких Delay в программе, даже на 100 мкс.
Последний раз редактировалось Boroda 31 янв 2017, 10:18, всего редактировалось 1 раз.
Остановка генератора на время опроса датчиков.
Siberian, А Что вам нужен за генератор, который не должен останавливаться?Что он должен делать?
Просто я дела генератор импульсов на выходе (пине) и подсчет импульсов времени на прерываниях.
А так Boroda, сейчас программа выполняется последовательно и некоторые операции занимают очень много времени.
Кстати в некоторых библиотеках умудряются в коде использовать паузы на несколько секунд, в шоке был когда это первый раз увидел.
Обойти это можно так как он писал выше или перенести критически важные операции в параллельный процесс, который можно реализовать только на прерываниях.
Опешите суть конкретной проблемы, может смогу подсказать или помочь чем.
Просто я дела генератор импульсов на выходе (пине) и подсчет импульсов времени на прерываниях.
А так Boroda, сейчас программа выполняется последовательно и некоторые операции занимают очень много времени.
Кстати в некоторых библиотеках умудряются в коде использовать паузы на несколько секунд, в шоке был когда это первый раз увидел.
Обойти это можно так как он писал выше или перенести критически важные операции в параллельный процесс, который можно реализовать только на прерываниях.
Опешите суть конкретной проблемы, может смогу подсказать или помочь чем.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
Я тогда предлагал встроить в каждую плату "Условие выполнения". Выполнение платы по таймеру или по внешнему биту разрешения, который может подключаться к выходам лог. элементов в других платах. Но это не поддержали, мотивируя это тем, что есть ПользБлоки (ПБ). Но ПБ не поддерживают большинство датчиков, блоки EEPROM и т.д. (поддержка эта отключена, т.к. ПБ может использоваться несколько раз в программе).
Получился бы своеобразный диспетчер задач, как в RTOS, но с ручной настройкой.
Получился бы своеобразный диспетчер задач, как в RTOS, но с ручной настройкой.
Последний раз редактировалось Boroda 31 янв 2017, 13:03, всего редактировалось 1 раз.
Остановка генератора на время опроса датчиков.
Boroda, Здесь Автор писал
Сейчас займусь (пока пару дней есть). В свойствах платы появится настройка условия выполнения платы, возможно циклическое выполнение, но это я ещё не продумал.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
Остановка генератора на время опроса датчиков.
Уже готово. что будет - можно посмотреть здесь
Автор программы FLProg.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
Слимпер, о как, не заметил!
support, Спасибо огромное!
support, Спасибо огромное!
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Остановка генератора на время опроса датчиков.
Несколько плат с генератором.Слимпер писал(а):Siberian, А Что вам нужен за генератор, который не должен останавливаться?Что он должен делать?
Увеличение - уменьшение в менюшке, нарастание-убывание ШИМ, и т.д.
Проект большой, "костыли" не хочу вставлять...
-
- Лейтенант
- Сообщения: 361
- Зарегистрирован: 07 сен 2015, 23:53
Остановка генератора на время опроса датчиков.
А нельзя сделать один генератор, вывести с него сигнал на переменную, и в остальных платах пользоваться этой переменной?Siberian писал(а):Несколько плат с генератором.Увеличение - уменьшение в менюшке, нарастание-убывание ШИМ, и т.д.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Остановка генератора на время опроса датчиков.
Можно, путем деления-умножения, т.к. частота нужна разная.OlegAn1962 писал(а):А нельзя сделать один генератор, вывести с него сигнал на переменную, и в остальных платах пользоваться этой переменной?
Но всё дело в том, что тормозит хоть один, хоть пять генераторов одинаково. Остановка каждого по периоду опроса DHT22.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
Siberian, реже опрашивать. Или как-то для этого датчика прерывание по ножке порта использовать, а там уже запускать таймер и длительность импульсов считать. Сам такое не напишу, с Atmel плохо знаком.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Остановка генератора на время опроса датчиков.
Реже опрашивать не целесообразно...Boroda писал(а):Siberian, реже опрашивать.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
Ну смотря где система используется. Если в комнате стоит, то 15 минут за глаза. Если в санузле, то минуты хватит.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
Остановка генератора на время опроса датчиков.
Опрос DS18B20 занимает 0,4 секунды, и быстрее ни как. Так что почти половину времени контроллер будет заниматься опросом датчика. При необходимости частого опроса лучше использовать аналоговые датчики (например термосопротивление) с соответствующим масштабированием.Siberian писал(а):Период опроса не реже, чем раз в секунду.
Автор программы FLProg.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Остановка генератора на время опроса датчиков.
А лучше tl431 + lm35/235/335, TC1047 или mcp9700. Вполне адекватные датчики. Только цифровой фильтр надо ставить. И внимательнее читайте PDF, некоторые датчики терпеть не могут на своем выходе конденсаторы, особенно 0,1мкФ. А вот с влажностью, придется повозиться - все аналоговые датчики термозависимые.
Добавлено (01.02.2017, 11:29)
---------------------------------------------
Добавлено (01.02.2017, 11:29)
---------------------------------------------
Это кривая библиотека. Первый прогон цикла программы должен быть послан запрос на измерение температуры и запуститься таймер, далее продолжаем выполнять программу. Как секунда прошла (таймер все время проверяется в цикле программы) запускаем запрос на чтение температуры и читаем ее, и далее опять выполняем программу. В этом случае общение с датчиком будет занимать время до несколько сотен микросекунд (при динамической индикации это проявляется как еле заметная вспышка одного из разрядов). Если опрос датчика частый (1..5 секунд) можно сделать еще хитрее. Сначала посылаем запрос на чтение температуры, читаем ее, а потом сразу же запрос на измерение. Тоже займет мало времени (меньше милисекунды). Но тут будет эффект "запаздывания" температуры. Я пишу и читаю по одному биту в прерывании по таймеру 2мс и там же обсчитываю все таймера.support писал(а):Опрос DS18B20 занимает 0,4 секунды
Последний раз редактировалось Boroda 01 фев 2017, 11:42, всего редактировалось 1 раз.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Остановка генератора на время опроса датчиков.
Проблема именно с датчиком влажности, и как раз на время опроса датчика влажности и останавливается генератор...support писал(а): При необходимости частого опроса лучше использовать аналоговые датчики (например термосопротивление) с соответствующим масштабированием.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
Остановка генератора на время опроса датчиков.
Ну с DHT ситуация ещё хуже. Его опрос занимает 0.8 секунды. Попробуйте HTU-21. Он опрашивается намного быстрее, да и точнее он.
Автор программы FLProg.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость