Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Тепловычислитель

Пн апр 06, 2015 18:34:17

Доброго времени суток форумчане.
Подскажите, где можно прочитать или посмотреть полную информацию насчёт регистра входов. Задача вот в чём. Имеется кнопка, подключенная к DI-входу ардуино на базе ATMega328 или ATMega8. Как отследить нажатие кнопки во время выполнения программы? Т.е кнопка нажимается в тот момент, когда опрос входов уже выполнен и выполняется основная программа, функции и т.д. Прерывания не в счёт.
Конечно не совсем корректное сравнение, но у ПЛК Siemens S7-300 к примеру, есть так называемая область входов, куда записываются данные с регистра входов. Если во время выполнения программы в организационном блоке ОБ1(по типу main или loop) мы нажмём на кнопку, в дальнейшем, при отжатой кнопке и опросе входов мы сможем отследить изменение фронта на конкретном пине, т.е информация об изменении или не изменении фронта сохранится и будет доступна для анализа.
Есть ли такая аппаратная или иная возможность у АtMega8/328?

Re: Был ли сигнал на DI-входе???

Пн апр 06, 2015 19:43:21

У М328 PCINT позволяет фиксировать факт изменения уровня на любом цифровом выводе.
Но для кнопок обычно вполне достаточно делать опрос через короткие промежутки времени. Где-то здесь как раз была целая тема вроде "помогите опросить кнопку".

Все регистры в даташите.

Re: Был ли сигнал на DI-входе???

Вт апр 07, 2015 06:26:43

KlausBP писал(а):у ПЛК Siemens S7-300 к примеру, есть так называемая область входов

Ничто не мешает организовать такую область и в микроконтроллере. Равно как и область выходов. Не забываем, что у сименса есть и команда непосредственного чтения входа, прямо в теле программы.

Re: Был ли сигнал на DI-входе???

Чт апр 09, 2015 12:44:04

pyzhman писал(а):
KlausBP писал(а):у ПЛК Siemens S7-300 к примеру, есть так называемая область входов

Ничто не мешает организовать такую область и в микроконтроллере. Равно как и область выходов. Не забываем, что у сименса есть и команда непосредственного чтения входа, прямо в теле программы.


Конечно можно сделать! мешает только то, как это сделать?

Нашёл документ с Системами команд для АВР МК на ассемблере. Не нашёл команду, которая отвечает за выделение фронта. Опять таки про сименс, у которого есть команды FP/FN для выделения переднего и заднего фронтов.


-pyzhman- Вы наверное, говоря про чтение входов/выходов у ПЛК SIEMENS имели в виду команды A, O, X? Если мне не изменяет память, то сигнал на пине мы сможем увидеть только при первичном опрос, всё что далее, это чтение данных из области отображения процесса, а по факту на пине уже может быть 0 или 1 или ещё 100 единиц прийти.

Re: Был ли сигнал на DI-входе???

Пт апр 10, 2015 07:47:41

А, О это выход и вход. Да, всё верно, в начале цикла исполнения программы считываются входа и помещаются в область отображения входов. После исполнения цикла выхода помещаются в область отображения выходов. Естественно, за время цикла входа могут поменяться. Это особо оговаривается в документации. И разработчики программ порой прибегают к прямому чтению входа (если время цикла ну очень уж большое). Но Сименс к вашей задаче не клеится никаким боком.
KlausBP писал(а):Как отследить нажатие кнопки во время выполнения программы? Т.е кнопка нажимается в тот момент, когда опрос входов уже выполнен и выполняется основная программа, функции и т.д. Прерывания не в счёт.

Отследить можно только опрашивая. Либо прерыванием (а оно почему-то не в счёт) (прерывание же можно сделать не именно под вход, просто вход опрашивать периодически), либо прямым опросом.

Re: Помогите опросить кнопку

Пт апр 10, 2015 10:37:45

кнопку я к примеру привёл. По факту, есть расходомер, с которого Асинхронно будет приходить 0/1. Хочу сделать простенький тепловычислитель. Расход может меняться, в связи с этим, будет меняться скорость прихода сигнала от расходомера. Может возникнуть ситуация, что пока будет выполняться математика+вывод на дисплей, трансляция в сеть, может прийти сигнал от расходомера, мы его благополучно не увидим и расход получится не точным и далее все расчёты поползут.
А, О это не вход/выход это команды выполнения лог.операция И и ИЛИ.

Re: Помогите опросить кнопку

Пт апр 10, 2015 10:54:47

Что мешает использовать прерывания?
KlausBP писал(а):А, О

В немецком (коим я пользовался) U и O. И не логического, а VKE. Ну да бог с ним, с Siemens'ом.

Re: Помогите опросить кнопку

Пт апр 10, 2015 11:30:46

Хочу сделать простенький тепловычислитель.
Тогда совершенно непонятно, как Вы собираетесь обходиться без прерываний и аппаратных "примочек". Ну поймаете Вы факт перехода, обработаете Вы его через определённое время, а как будете измерять время между импульсами ? На всяких delay_ms'ах ? Ваш расходомер будет показывать "погоду на Марсе", а не расход.

Re: Помогите опросить кнопку

Пт апр 10, 2015 11:42:21

KlausBP писал(а):будет выполняться математика+вывод на дисплей, трансляция в сеть

Курсач?
Аlex писал(а):Тогда совершенно непонятно

Тогда понятно.

Re: Помогите опросить кнопку

Пн апр 13, 2015 08:57:50

pyzhman писал(а):
KlausBP писал(а):будет выполняться математика+вывод на дисплей, трансляция в сеть

Курсач?

Нет. Для автоматизации отопления гаража. В гараже 2 системы выработки тепла:
1) Твердотопливная водогрейная печь аля Самовар;
2) Тепловентилятор с жидкостным теплообменником от 10-ки с двумя эл.котлами 2х2кВт+циркуляционный насос.
Системы будут увязаны в единую тепловую сеть, с возможностью перемещения или самостоятельной работы тепловентилятора.

Стоит задача посчитать реальную производительность водогрейной печи. Вот для этого и делаю тепловычислитель.

Re: Помогите опросить кнопку

Пн апр 13, 2015 09:40:45

Что же не так с прерываниями? Почему не хотите их задействовать?

Re: Тепловычислитель

Вт апр 14, 2015 18:58:41

Раз тему оформили в отдельную тему, буду задавать вопросы, но сначала, немного о том, о чём шла речь чуть выше.
На фото- водосчётчик с цифровым выходом. В шестерёнке, которая находится на валу, на который устанавливается стрелка показаний ЛИТРажа было просверлено отверстие, которое перекрывает световой поток оптопары. Сигнал с приёмника поступает на схему Опередления линии собранной давным-давно. Схему взята с сайта robozone.su а конкретно, вот ссылка : http://robozone.su/mrc28/15-modul-datchika-linii-na-osnove.html .


Далее. Тепловентилятор с жидкостным теплообменником(радиатор от 10-ки), двумя эл.котлами мощностью 2кВт каждый. Теплоноситель цирк.насос крутит по системе. Данная "установка" находится в стадии пусконаладки.
Изображение
Водогрейная печь аля САМОВАР. Работает в комплексе с тепловентилятором. Естественной циркуляции теплоносителя не закладывал, только принудительно цирк.насосом.
Изображение
Так вот задача стоит такая, что необходимо посчитать производительность водогрейной печи. Можно косвенный расчёт произвести, можно вообще не заморачиваться, но ведь это всё скучно :) Конечно, можно установить ВКТ7 к примеру и голову не греть, но это деньги и пара плат арудино будут скромно пылиться в коробке дожидаясь часа, когда их продадут или выкинут.
В общем, мне самому интересно собрать тепловычислитель, получить опыт и знания!
Т.к система закрытая, т.е нет отбора теплоносителя, значит можно обойтись одним расходомером. Температуру буду мерить на подача и обратке. Датчик температуры есть от Данфоса 0-10В выход, но думаю, обойтись без него.
Вся математика сводится к подстановке значений от вышеупомянутых датчиков: Qгв= Gгв *(tгв - tхв)/1000 = ... Гкал
Сразу скажу, что раньше занимался программированием, но уже давно не кодил, поэтому много забылось.
В данный момент думаю над логикой работы программы. Кстати в сети, только 2 статьи нашёл на тему самодельного тепловычислителя.
Что должен представлять из себя тепловычислитель.
Теститься программа будет под мега328, по факту будет мега8.
ЖК дисплей. В наличии двухстрочный по 8 вроде символов в строке.
Кнопки для навигации. Получается что будет небольшая операционная система.
На ЖК дисплее можно будет посмотреть часовой расход, возможно МГНОВЕННЫЙ, температуру подачи/обратки, суммарно выработанная энергия за сеанс(от затопки до погасания печи), опять таки мгновенная или часовая мощность.
Аппаратная часть есть, дело встало за программной. Работу думаю начать с разработки структурной схемы, что бы было понимание и наглядность для дальнейшего написания программы.
Жду ответов, если есть недочёты, поправляйте. Огромной помощью будет какая то "рыба" для программы.
Вложения
U2H3uzi2NO4.jpg
(148.13 KiB) Скачиваний: 1512
tvL3f9244EA.jpg
(138.83 KiB) Скачиваний: 1417
0tGUazkmjj4.jpg
(166.6 KiB) Скачиваний: 1079

Re: Тепловычислитель

Вт апр 14, 2015 19:12:30

Я думаю вы можете эту задачу даже тупо в лоб решить - нет у вас каких то аццки долгих процессов, опрашивайте в цикле, считайте миллисекунды между импульсами, а на дисплее обновляйте информацию каждую 100ю итерацию или типа того (во время вывода на дисплей, возможно, иногда будет теряться импульс). Зря вы прерываний опасаетесь, на той же "арудине" оно запиливается одной строкой в коде + функция обработки (которую в любом случае писать).

Re: Тепловычислитель

Вт апр 14, 2015 19:24:11

Morroc писал(а): Зря вы прерываний опасаетесь, на той же "арудине" оно запиливается одной строкой в коде + функция обработки (которую в любом случае писать).


На самом деле, я их не опасаюсь, я с ними просто в своё время не работал :) Думаю, сложностей не возникнет.

Re: Тепловычислитель

Вт апр 14, 2015 19:24:43

И сразу вопрос! Сигнал от расходомера подключим на пин с прерываниями int0 к примеру. Что будет с дисплеем в момент прихода импульса? Допустим, я буду просматривать инфрмацию-температуру на подаче интересно узнать. Брожу по менюшке и тут бац и прерывание сработало. Экран зависнет с последними значениями или вообще погаснет? Как я понял и предполагаю, будет зависание той информации, которая была до прерывания.

Re: Тепловычислитель

Ср апр 15, 2015 08:11:35

Да ничего с ним не будет. У него же собственный буфер. В него информацию можно хоть раз в год записывать, она будет постоянно на нём "висеть".
Да и даже если бы было необходимо постоянное обновление, ничего бы не случилось. Вся обработка по INT сведётся лишь к записи значения таймера в переменную, с последующим его обнулением. Это максимум пару десятков тактов.
Если все эти процессы "долгие", то можно вообще не париться с внешним прерыванием. Заведите обработчик прерываний на 1 миллисекунду, в нём опрашивайте вход со счётчика на изменение (ловите фронт). Далее заведите переменную, которая будет считать эти миллисекундные интервалы между фронтами. Как фронт пришёл - сохранили значение этой переменной, обнулили её и выставили флаг. Флаг потом спокойненько в основной программе обработали и сделали все необходимые вычисления.
Если дискретности в 1 мс будет мало, можно сделать системные тики по 0.1 мс, думаю, этого будет вполне достаточно.

Re: Тепловычислитель

Пт апр 24, 2015 21:57:35

Экран зависнет с последними значениями или вообще погаснет?


Да, зависнет с последними значениями. Зависнет на десяток микросекунд, или даже меньше, пока обрабатывается прерывание. Я, например, не заметил бы задержку в 10 мкс... :)))

Если серьезно, в правильно написанной программе прерывания отрабатывают настолько быстро, что человек заметить их эффекта на отзывчивость UI не в состоянии.

Re: Тепловычислитель

Вт сен 12, 2017 10:14:52

А какой вообще планируется приблизительный класс точности вычисления тепла? Ведь погрешность вычисления (это просто математика) будет зависеть от погрешности измерения расхода и от погрешности измерения температур. Причём, чем больше погрешность измерения температур, тем больше погрешность вычисления тепла при малой разнице между температурами. Ну и вертушка имеет большую погрешность на малых расходах с очень нелинейной характеристикой. Также желательно обеспечить достаточную длину прямого участка перед расходомером по потоку для минимизации разных турбулентностей. Исходя из фактического наличия больших погрешностей измеряемых величин нет смысла переживать о пропуске некоторых импульсов от расходомера.

Re: Тепловычислитель

Вт сен 12, 2017 10:28:34

У меня очень долго валялся Эльф, как раз для такой системы. Отдал уже. Раньше бы тему эту увидел, отдал бы за :beer: . Ну сейчас его нет.

Пропускать импульсы ни в коем случае нельзя. Закладывание в проект базовых ошибок - порочный подход.

Если ТС тема еще интересна, кое-какие замечания по реализации я бы указал.
Ответить