Официальный сайт компании Arduino по адресу arduino.cc
Прошу помощи по организации программы.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Обращаюсь к уважаемым гуру с вопросом оборганизации программы. Она состоит из трех блоков и вот то, что она должна выполнять:
I блок: Настройка и реализация нагрева ТЭНов
Энкодер1: вывод А на прерывании INT0
вывод В на pin4
Кнопка1: на прерывании INT1
Последовательность:
Нажатие 1 переход к настройке значения паспортной мощности ТЭНа
Вращение настройка значения паспортной мощности ТЭНа
Нажатие 2 фиксация значения паспортной мощности ТЭНа
переход к настройке значения подаваемой мощности
Вращение настройка значения подаваемой мощности
Нажатие 3 фиксация значения подаваемой мощности
расчет необходимых параметров
выполнение рассчитанных параметров
Нажание 4 переход на «Нажатие 1»
II блок: Настройка и реализация термостата
Энкодер2: вывод А на прерывании INT2
вывод В на pin16
Кнопка2: на прерывании INT3
Последовательность:
С запуска программы постоянно идет измерение температуры датчиком ds18b20 (one_wire.h)
Нажатие 1 значение температуры отсечки уравнивается с текущей температурой
переход к настройке значения температуры отсечки
Вращение настройка значения температуры отсечки
Нажатие 2 фиксация значения температуры отсечки
расчет необходимых параметров
выполнение работы термостата на основе рассчитанных параметров
Нажание 3 переход на «Нажатие 1»
III блок: Настройка клапана отбора
Энкодер3: вывод А на прерывании INT4
вывод В на pin17
Кнопка3: на прерывании INT5
Последовательность:
Нажатие 1 переход к настройке параметров работы клапана
Вращение настройка параметров работы клапана
Нажатие 2 фиксация параметров работы клапана
расчет необходимых параметров
выполнение рассчитанных параметров
Нажание 3 переход на «Нажатие 1»
Плата Ардуино Мега 2560. Программирование отдельных элементов (операции с переменными, рассчеты, индикация и реализация) я напишу сам (полагаю, что хватит ума, но если не хватит, то буду мучить вопросами). Прошу помощи в общей организации программы, то есть, какие фрагменты куда засовывать (что - в луп, что - в отдельные функции и т.д.). Основная задача - сделать так, чтобы на фоне работы термометра все действия энкодером и кнопок и их выполнения не задерживались в связи с латенцией термодатчиков ds18b20.
Заранее спасибо за помощь!
очень слово красивое.... так бы и повторял! ;))))
очень слово красивое.... так бы и повторял! ;))))
А что тут такого? Латенция - задержка всего лишь....
http://forum.homedistiller.ru/index.php?topic=118518.0
http://forum.homedistiller.ru/index.php?topic=118519.0
Уважаемый, а нахрена Вам прерывания? Вы хотя-бы себе объясните. Ради скорости? - Это на ТэНах - не смешите мои тапки. Ради экономии злектоэнергии? Идите на ТэНах.
А так, да, красиво написали...
Уважаемый, а нахрена Вам прерывания? Вы хотя-бы себе объясните. Ради скорости? - Это на ТэНах - не смешите мои тапки. Ради экономии злектоэнергии? Идите на ТэНах.
А так, да, красиво написали...
Прежде чем смеяться - ты хоть прочитал внимательно. Причем здест ТЭНы?
Человек хочет использовать прерырывания для работы с энкодерами. Можно обсуждать плюсы и минусы такого подхода, но
- ТЭНы тут не причем
- Смешного ничего нет
Энкодеров стало меньше. Общий делириум остался тем же. Что мешает первым нажатием выбирать параметр для изменения? Всё равно эти события очень редкие, а текущие параметры отображаются? Я помню что вы любите ручку на каждый параметр, но всё ж это микроконтроллер, надо как то в будущее смотреть. Вы ж ужались с восьми до трёх.
Вы ж ужались с восьми до трёх.
Ужался конечно, но тут как раз удачное совпадение: три блока - три энкодера с кнопками. Как раз 6 пинов внешних прерываний. Почему нет? Сводить все к одному энкодеру не буду точно: продолжаю считать ползание по меню данью чистой скаредностью по отношению к финансам. При это придется платить неудобством.
А может просто написать работу с датчиком без латенции?
КАК ЭТО СДЕЛАТЬ???!!! Или я совсем ох...ел как тот кот Баюн или куда деться от промежутка времени между запросом на термодатчик и его ответом (эти саму примерно 800 мсек)?
Я помню что вы любите ручку на каждый параметр, но всё ж это микроконтроллер
А что плохого в этой любви? Просто, наглядно и оперативно. Не надо ползать по меню как вошь по сковородке. Я сейчас с успехом использую именно в таком режиме связь "ПК-Ардуино-автоматика". Все отлично работает, все наглядно (на мониторе 19" все параметры как на ладони). Но вот захотелось "все-про-все" возложить чисто на Ардуино. Да, в программировании его я пока слаб, но учусь. В том числе, на конкретных задачах. В чем "белая горячка"?
1) Дать DS-ке команду на конвертацию;
2) 800мс грабить корованы;
3) Считать результат с датчика:
4) Profit!
Асам, спасибо. Я на этом форуме уж лет 5 наверное, прочитал все (наверное), в том числе и эти ссылки. Подобного там, кстати в разы больше. Но многое мне не подходит идеологически (скажем так). В конце концов, могу я попробовать реализовать собственные хотелки под собственное понимание процесса?
А может просто написать работу с датчиком без латенции?
КАК ЭТО СДЕЛАТЬ???!!! Или я совсем ох...ел как тот кот Баюн или куда деться от промежутка времени между запросом на термодатчик и его ответом (эти самые примерно 800 мсек)?
1) Дать DS-ке команду на конвертацию;
2) 800мс грабить корованы;
3) Считать результат с датчика:
4) Profit!
Я примерно так это себе и представляю: в промежутке между запросом и чтением вытворять свои безобразия. Но вот с использованием этого промежутка как раз пробел в квалификации.
Я бы предложил делать через квонокод. Но к сожалению все равно бесполезно.
Я примерно так это себе и представляю: в промежутке между запросом и чтением вытворять свои безобразия. Но вот с использованием этого промежутка как раз пробел в квалификации.
Вам же не надо мерять температуру 10 раз в секунду? Предположим у нас температура измеряется мнгновенно. Тогда алгоритм, обычно выглядит так.
1 Меряем температуру
2 Делаем что-нибудь с этой температурой
3 Делаем что-нибудь еще
4 Возвращаемся к п1
В случае задержки с измерением сделать по-простому можно так:
0 Запускаем измерение Т и запоминам время (millis)
1 Ждем в цикле пока не пройдет 800mS (читаем millis)
1.1 Cчитываем температуру
1.2 Запускаем измерение Т и запоминам время (millis)
2 Делаем что-нибудь с этой температурой
3 Делаем что-нибудь еще
4 Возвращаемся к п1
Прежде чем смеяться - ты хоть прочитал внимательно. Причем здест ТЭНы?
Человек хочет использовать прерырывания для работы с энкодерами. Можно обсуждать плюсы и минусы такого подхода, но
- ТЭНы тут не причем
- Смешного ничего нет
Зря Вы меня одергиваете, уважаемый. А что такого сурьезного с энкодареми? Человек чуть дольше покрутит - да и хрен с ним. Тем более, что тормозящий фактор программы - даллас.
Зря Вы меня одергиваете, уважаемый. А что такого сурьезного с энкодареми? Человек чуть дольше покрутит - да и хрен с ним. Тем более, что тормозящий фактор программы - даллас.
А нефиг над человеком смеяться если ничего сам не понимаешь.
Что бы энкодер нормально работал с ним надо работать или по прерыванию или опрашивать часто (скажем не реже чем в миллисекунду) и регулярно. Иначе пользоваться им становится от неудобно до мучительно.
Простой опрос в лупе работает только для примитивных скетчей, с коими ты, по всей видимости, и имел дело если вообще работал с энкодерами. Елси же скетч навороченный, то приходится опрос вешать на таймер, что те-же прерывания, только в профиль.
А нефиг над человеком смеяться если ничего сам не понимаешь.
Что бы энкодер нормально работал с ним надо работать или по прерыванию или опрашивать часто (скажем не реже чем в миллисекунду) и регулярно. Иначе пользоваться им становится от неудобно до мучительно.
Простой опрос в лупе работает только для примитивных скетчей, с коими ты, по всей видимости, и имел дело если вообще работал с энкодерами. Елси же скетч навороченный, то приходится опрос вешать на таймер, что те-же прерывания, только в профиль.
Мы, уважаемый, с Вами на брудершафт не пили... Да, для энкодеров не писал и теперь понимаю, что это зло - кнопки лучше и надежнее.
Мы, уважаемый, с Вами на брудершафт не пили...
Можно подумать ты с Megawollt пил - http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/schitat-eeprom#comment-418181
И меня нах посылать отсутствие совместной пьянке тебе тоже не помешало - http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/schitat-eeprom#comment-418181
Так что не надо меня учить как и к кому обращаться. В конце концов я тебя просто старше. Так что тыкать имею моральное право.
В конце концов я тебя просто старше. Так что тыкать имею моральное право.
Не фак, а вдруг просто младьше - тогда имеете обязанность сказать ВЫ. Хотя к богу, обычно, обращаются на ты - я это буду так понимать :)
ой как мило!
1. мы в сети, тут принято "ты", как основная форма. Остальное определяется традициями площадки.
2. Асам сильно грамотнее оппонента, это даёт ему дополнительные права.
3. Нехера нести чушь! Энкодеры по возможности нужно вешать на прерывания.
4. Даллас ни каким боком не приводит к задержкам. Это уже стопицот раз обсуждалось на форуме. кидаешь запрос на все датчики и взводишь таймер. через секунду вычитываешь их.
Asam, Вы пишете такую последовательность:
0 Запускаем измерение Т и запоминам время (millis)
1 Ждем в цикле пока не пройдет 800mS (читаем millis)
1.1 Cчитываем температуру
1.2 Запускаем измерение Т и запоминам время (millis)
2 Делаем что-нибудь с этой температурой
3 Делаем что-нибудь еще
4 Возвращаемся к п1
У меня как раз с такой последовательностью и была затыка, связанная с задержкой. Получается, что пока не датчик "не отыграет" полный цикл "получил вопрос-дал ответ" (пункты 0->1.1)? программа ни на что не отвечает и ничего не делает. Я бы предположил поместить "все-все-все-про все" сразу после запроса к датчикам, а считывать их данные через 800мсек по millis. Но тут вопрос: разрешается ли подвать запрос на датчик, не получив ответа?
Sonologist, датчик тут непричем. Вы пользуетесь библиотекой в самом её простом применении - с блокирующим чтением. Изучите её получше и получите ответы на стотыщмильенов вопросов.
О... блее... самоплясники появилисо на форуме... )))
Ну... за дурдуину !!! Ух, хорошо пошла !!!
Кароче, смотри как это сделано у меня:
На любом таймере делаешь счётчик в 1/2 секунды - это врема для обновления LCD.
2 * 1/2 секунды = 1 секунде - это время для датчиков 18B20. Их у меня 10 штук реализовано, используются не все.
Как выше писали - даёшь команду датчикам на измерение и выполняешь что-то своё, ничего не ждёшь, позже забираешь с датчиков температуру.
Энкодер...... я их не люблю, у меня джойстики любимые...
Как я опрашиваю джойстик: на любом таймере делаешь счётчик, в моём случае счётчик переполняется около 30 раз в секунду. Привязываешь АППАРАТНО переполнение счётчика к событию ADC в режиме FreeRunning. Получается, что у меня ~~ 30 раз в секунду аппаратно запускается ADC конвертер.В обработчике прерывания ADC сохраняешь текущее значение ADC , меняешь канал ADC и так далее по кругу. По итогу оси X и Y опрашиваются ~~ 15 раз в секунду. Кнопка джойстика опрашивается в обработчике таймера 30 раз в секунду. Заметь!!! я НИКОГО не жду !!!
Далее... раз в секунду выставляется ГЛОБАЛЬНЫЙфлаг обновления системы, что это:
Перерасчёт ПИД регулаторов на новые значения и запоминание расчётных составляющих.
Обновление буфера вывода на дисплей.
Обновление температуры 18B20
И тд...
Самое важное - обновляю раз в минуту в EEPROM-е текущее состояние программы, чтобы если был скачёк по напряжению иль глюк - программа ВОЗОБНОВИЛА своё состояние АПОСЛЯ глюка !!!
Естественно, вычдог АППАРАТНО взведён на 8 секунд и БДИТ всИхда !!!
Вкратце, у меня сделано так... )))
Вижу, MNI, ваши псевдоталанты сверстникам не кажутся достойными обсуждения - приходится пятикласснику в детский сад (по его мнению) ходить чтобы похвалиться. Ну и обосрать всех присутствующих заодно чтоб.
Друзья, спасибо за помощь. Похоже, справился с задачей отвязаться от задержки термодатчика. Вот этот пробный код работает адекватно. Больше чем уверен, что там полно ляпов с программистской точки зрения, не пинайте. Важно, что и температуру кажет и настройку температуры отсечки отображает и энкодер с кнопкой ри латенции не зависят. Можно было бы обойтись только 1-Wire.h, но DallasTemperature.h присобачена на будущее для использования нескольких датчиков.
PS: Если по незнанию тонкостей что-то криминально напортачено, то ткните, пожалуйста носом.
Ну за 20-ть то лет программирования (не часто, это больше хобби) можно хоть чему-то научиться... правильно ???
И... псевдоталантливый ты наш... я щас вообще полностью автомат делаю и с заторником и с мешалкой и с ректификационной колонной в одном флаконе на 50 литров... пока... дальше посмотрим.
Я`б тебе "рекомендовал" для начала ценники на эти "игрушки" посмотреть, а уж потом про пятиклассников "пейсать" )))
Не правильно.
Во первых, уж если хочется использовать DallasTemperature то надо вызвать
sensor_rc.setWaitForConversion(FALSE)
Что бы вызов requestTemperatures() был неблокирующим.
Во вторых, все остальное тоже не совсем так.
Но я уже спать хочу. Так что надеюсь другие помогут.
Друзья, спасибо за помощь. Похоже, справился с задачей отвязаться от задержки термодатчика. Вот этот пробный код работает адекватно. Больше чем уверен, что там полно ляпов с программистской точки зрения, не пинайте. Важно, что и температуру кажет и настройку температуры отсечки отображает и энкодер с кнопкой ри латенции не зависят. Можно было бы обойтись только 1-Wire.h, но DallasTemperature.h присобачена на будущее для использования нескольких датчиков.
Здесь про эти датчики, воз и маленькая тележка. И библиотека, для нескольких, ну совсем не нужна. OneWire достаточно. В той теме, на первой странице ниже, есть и на миллис функция.
Понты всегда дороже денег. Особенно когда никто не проверяет - тряси мешалкой сколько хошь. Хоть про 50 литров пиши, хоть про "20 языков выше университетского уровня".
А может просто написать работу с датчиком без латенции?
КАК ЭТО СДЕЛАТЬ???!!! Или я совсем ох...ел как тот кот Баюн или куда деться от промежутка времени между запросом на термодатчик и его ответом (эти самые примерно 800 мсек)?
Сама по себе библиотека DallasTemperature.h - хреновая по другим причина, не связанным с задержкой. Поэтому, грамотнее писать ручками, без неё.
Но, если никак, то и сей можно писать без задержек. Это 100500 раз обсуждалось, я уже устал пример давать как это сделать.
PS: Если по незнанию тонкостей что-то криминально напортачено, то ткните, пожалуйста носом.
Тыкалка НОМЕР ОДЫН!!! И только ОДНА тыкалка!!!
Если в твоём так-сказать "афтомате" разорвать/замкнуть на землю или 5 Вольт шину 1-W ... КАГ отреагирует на сиё "чудо" твой код ???
Понты всегда дороже денег. Особенно когда никто не проверяет - тряси мешалкой сколько хошь. Хоть про 50 литров пиши, хоть про "20 языков выше университетского уровня".
Какие понты? Тыачом?
Хочешь реально поработать головой? Давай поработаем вместе. Тока это будет STM32 и С++ и ниадного светодиода)))
Чё, сдюжишь? Телефон свой закинь мне в личку.
Конечно думал. Понравилось, и подумал еще два раза! ;))
Женя! Именно поэтому в сети и было изначально принято "ты", а "вы" считалось демонстрацией отстраненности или неприязни.
Что до меня, так я же рассказывал как-то, что я матшкольник 80-ых. Сообщество совершенно фрондерское. В школе были не только математики и физики, конечно были и обычные мразотные совковые училки, самоутверждающиеся за счет нас. Тогда и было придумано обращаться друг к другу на "Вы" и по отчеству. ;))) На училок типа литературы/истории/аглицкого - действовало убийственно!
С этой привычкой я прожил много лет. Мне до сих пор сложно "тыкать", но я считаю это правильным и принуждаю себя.
Как-то так.
Хочешь реально поработать головой? Давай поработаем вместе. Тока это будет STM32 и С++ и ниадного светодиода)))
Чё, сдюжишь? Телефон свой закинь мне в личку.
Сколько за работу головой платить станешь? Только это будет Windows Server Failover Cluster, например. Или Zabbix, а не вот эти пятидолларовые микросхемки.
а не вот эти пятидолларовые микросхемки.
Умнож 5 долларов на 100 и будет пиццот )))
Не, я серьёзно, на STM32 4-й серии нужно будет "поработать". Телефон в ЛС закинь, я всё объясню.
Ты ещё ставку не озвучил, а уже пытаешься на уши присесть. Не особо серьёзно что-то. Телефонных спамеров мне хватает и без того.
Или Zabbix, а не вот эти пятидолларовые микросхемки.
Ладно, я всё понял. Настроить бесплатный сервак на бесплатной ОС и кичиться 5-ю баксами за микросхему |))
Каг гриццо... слифф защитан ))) Пака... линуксоид... )))))))))))))))
Всё, забредил болезный про бесплатное.
Ставку-то назовёшь, мастер ректификациии, стреляющий телефоны по ЛС? Или это так, обычная брехня была?
Ставку-то назовёшь
мастер ректификациии
стреляющий телефоны по ЛС?
Или это так, обычная брехня была?
Два сухарика, возьми тот, что посередине.
Ректификацию может делать даже школьнег, термодинамика там рулит )))
Если у тебя нет телефона - поставь с десяток Debian-ов или Mint-ов, может и хватит на дедушкофон ))) SQL подучи, это подороже будет )))
Это так, спросил, посмотрел на ответ, офигел и забыл.
ps: явафигестаких пассажирофф )))
Ректификацию может делать даже школьнег, термодинамика там рулит )))
Отсюда, попрошу, поподробнее. В этом году собираюсь заняться алхимией...
Отсюда, попрошу, поподробнее. В этом году собираюсь заняться алхимией...
А что вы узнать хотите?
Как школьнегу стать алхимегом :)
Как школьнегу стать алхимегом :)
В этом году собираюсь заняться алхимией...
Дених сначала накапи, алхимег :))
Дених сначала накапи, алхимег :))
Зачем?
Колонна минимум 50т.р. стоит.
Это , блее, ни патьбаксофф :))) как у 41... ))))
Колонна минимум 50т.р. стоит.
ну, колонну можно и самому соорудить. В разы дешевле. Если, конечно, слово "ректификация" вычитал не в википедии...