4 штуки DS18B20, 4 их адреса надо читать каждый луп?
- Войдите на сайт для отправки комментариев
Поставил 4 сенсора на 4 пина с тем, чтобы сенсоры были взаимозаменяемы и можно было бы их использовать не все сразу.
В сетапе узнаю их адреса сторочками if ( !ds.search(addr1...4)) {}, делаю запрос на измерение температуры.
В лупе с интервалом 850 мсек считываю показатели датчиков и в конце лупа снова делаю запрос на измерение температуры. Все работает. При изъятии одного (или нескольких) датчиков выдаются нули, что и требовалось. Однако при попытке поменять датчики местами на месте ранее изъятого (и вставленного другого) сенсора температура не измеряется (по-прежнему 0). Вышел из положения: перед повторным запросом на измерение температуры (в конце лупа) вставил блок из повторного запроса адресов датчиков (if ( !ds.search(addr1...4)) {}). Теперь датчики можно "на ходу" изымать, менять местами, подключать и т.д.
То есть, своего добился, но мучает чисто академический интерес: верно ли такое решение или я вошел в программирование "с кувалдой"? Заранее прошу простить: многого еще пока не знаю, порой, тыкаюсь как слепой котёнок...
Если ты их на разные пины ставишь, их адреса тебе пабарабану. Читай их сам, используя команду Skip ROM
Библиотеку от далласа тока выкинь сначала
Библиотеку от далласа тока выкинь сначала
Выкинул сразу :)
Если ты их на разные пины ставишь, их адреса тебе пабарабану. Читай их сам, используя команду Skip ROM
Скип РОМ изучу, спасибо. Понимаю, что по барабану, но без блока запроса адресов температура не измерялась. Покопаюсь еще.
То есть, своего добился, но мучает чисто академический интерес: верно ли такое решение или я вошел в программирование "с кувалдой"?
Ничего ты не добился. Если у тебя датчик отвалиццо (и буит паказывать нули) как у тебя контроллер себя поведёт? При условии, что я знаю, чем ты занимаешься... возможен махонький бах )))
По поводу одного датчика на пене - Дет прав, S_Rom и вперёд.
Мой тебе совет, считай контрольку ОБЯЗАТЕЛЬНО!!! И в обработчике датчиков обязательно проверяй отклик и контрольку и выставляй флаг ошибки приёма!!! Проверяется "кувалдой" - тупо выдёргиваешь датчик или замыкаешь на + - ногу выхода DQ.
Можешь сделать усреднение, допустим 4 измерения делишь в среднее арифметическое, это немного сгладит скачки при ошибках считывания.
Ничего ты не добился. Если у тебя датчик отвалиццо (и буит паказывать нули) как у тебя контроллер себя поведёт? При условии, что я знаю, чем ты занимаешься... возможен махонький бах )))
По поводу одного датчика на пене - Дет прав, S_Rom и вперёд.
Мой тебе совет, считай контрольку ОБЯЗАТЕЛЬНО!!! И в обработчике датчиков обязательно проверяй отклик и контрольку и выставляй флаг ошибки приёма!!! Проверяется "кувалдой" - тупо выдёргиваешь датчик или замыкаешь на + - ногу выхода DQ.
Можешь сделать усреднение, допустим 4 измерения делишь в среднее арифметическое, это немного сгладит скачки при ошибках считывания.
Ситуация с отвалившимся датчиком предусмотрена программно, тут "все схвачено" и контролируется. И контролька и отклик и флаг присутствует (до этого я уже допёр, все сделано, так что "бах" по возможности исключен :)). Задача как раз и была в том, чтобы:
1. Датчики можно было вытаскивать, вставлять и менять "на ходу
2. Выход из строя или обрыв датчика регистрировался и система об ентом алярмила.
Скетч с запросом адресов датчиков работает нормально (погонял и так и этак), без запроса - нет измерения температуры. Со скипромом буду еще разбираться. Вот если б кто фрагмент кода со скиромом привел в качестве примера, только с комментами - у меня дело бы быстрее пошло (ну не программист я, а хоцца...)
1. Датчики можно было вытаскивать, вставлять и менять "на ходу
2. Выход из строя или обрыв датчика регистрировался и система об ентом алярмила.
1. в своё время я это делал так: в самом датчике есть EEPROM на 1 или 2 байта (не помню), вот я их и использовал в качестве номера датчика. На ходу менять "сходу" не получится, нужно было прописывать через меню настройки. Хотя, наверно и возможно, но у меня все датчики висели на одном пине. Со S_Rom вообще адресация не нужна.
2. Ниразу не смог "ушатать" ниодного датчика. Обрывов и КЗ то-же вроде не было. Просто один раз пропало питание и с датчика(ов) и они все стали выдавать нули. Вотт тогда у меня чуть не закипело в баке, но успел, выключил. После переделал опрос датчиков с фиксацией присутствия (контролька прокатывала) на шине и усё стало нормально.
Пишу в основном на С или Asm и в основном стараюсь сделать собственные процедуры обработки, т.е. готовые не использую, "подглядываю" код и пишу свои. И тебе советую писать именно своё - быстро придёт понимание, почему оно работает "нитаккакнуно" )))
Просто один раз пропало питание и с датчика(ов) и они все стали выдавать нули. Вотт тогда у меня чуть не закипело в баке, но успел, выключил. После переделал опрос датчиков с фиксацией присутствия (контролька прокатывала) на шине и усё стало нормально.
Ну, я думаю, что в реальных процессах можно защиту от "чистого" нуля сделать, например отслеживая его появление последовательно несколько раз.
А про датчики - я с Вами согласен, еще ни разу не вышли из строя. Изначально бракованные были.
Ну, я думаю, что в реальных процессах можно защиту от "чистого" нуля сделать, например отслеживая его появление последовательно несколько раз.
Какрас вот на этом "казусе" я первый раз и попал...
Короче, сделал я термостат на тиньке восьмилапой, успешно его "погонял" , запихал в корпус от БП и забыл. А тут нежданно наступила зима. Температура в гараже меньше 0 градусов. Ну, пришел, поставил, включил (он у меня в обычном холодильнике стоит) и забыл. На следующий день прихожу - нифига не греет. Стал разбираться... уотт какрас на 0 градусов он и затупил. Добавил механизм отслеживания ответа от датчика и всё встало на свои места.
Кстати, Дет тоже глюк описывал, шо типа меньше минус 30 или около датчики тоже "ниалё" - вот это я не проверял.
Короче, сделал я термостат на тиньке восьмилапой, успешно его "погонял" , запихал в корпус от БП и забыл. А тут нежданно наступила зима. Температура в гараже меньше 0 градусов. Ну, пришел, поставил, включил (он у меня в обычном холодильнике стоит) и забыл. На следующий день прихожу - нифига не греет. Стал разбираться... уотт какрас на 0 градусов он и затупил. Добавил механизм отслеживания ответа от датчика и всё встало на свои места.
Кстати, Дет тоже глюк описывал, шо типа меньше минус 30 или около датчики тоже "ниалё" - вот это я не проверял.
Не, ну если без десятых считывать, то это возможно.
А минус 30- дык покупайте датчики DS, а не их китайский аналог - ГЫ.
И тебе советую писать именно своё - быстро придёт понимание, почему оно работает "нитаккакнуно" )))
Многое я уже пишу сам. Многое не копирую, а разбираю (особенно хорошо, если есть комментарии). И уже потом только пишу. Причем, стараюсь на первых этапах использовать переменные не из примера, а собственные: так проще подвязывать то, что написано к тому, что ты сам хочешь. Много пока не понимаю и не знаю. Не моя профессия, а погрузиться с головой (как хотелось бы) не позволяет дефицит времени. Поэтому выше и попросил, если кто может дать пример со скипромом, чтоб не тупо копировать, а понять.
Поэтому выше и попросил, если кто может дать пример со скипромом, чтоб не тупо копировать, а понять.
На самоплясном форуме (я там с тобой переписывался) есть ПРЕКРАСНЫЙ ГОТОВЫЙ открытый скетч со всеми процедурами, которые тебе понадобятся. Что мешает его скачать и разобрать по "винтикам" ???
С удивлением узнал из #5что оказывается есть люди не проверяющие CRC. Тут двух мнений быть не может, контроль строго обязателен. Про поиск датчика перед опросом - недавно была тема где чел жаловался на редкие, но не устранимые, отказы такого подхода. На шине этой еще есть способ обнаруживать факт наличия подключенного датчика без адреса' можно на это опирается перед поиском.
Кстати, Дет тоже глюк описывал, шо типа меньше минус 30 или около датчики тоже "ниалё" - вот это я не проверял.
меньше -38. т.е -39 на экранчике я никада не видел, видел 85 или -127 (на разных даччиках). Причом, если 85 - то CRC была ОК, а если -127 то нет.
Причом, если 85 - то CRC была ОК, а если -127 то нет.
Да, но и при НУЛЯХ CRC, как нистранно, тоже ОК. )))
щас морозики нечаянно нагрянут, сниму мультик про DS3231 за окном, замерзший экранчик и неверную CRC. :)
DS3231S, DS3231SN в корпусе SOP16 или DS3231MZ в корпусе SOP8?
DS3231S, DS3231SN в корпусе SOP16 --- энти долго мучал, проблем нет ни с температурой, ни со временем.
DS3231MZ в корпусе SOP8 --- таких ещё не мучал.
DS3231S, DS3231SN в корпусе SOP16 --- энти долго мучал, проблем нет ни с температурой, ни со временем.
DS3231MZ в корпусе SOP8 --- таких ещё не мучал.
DS3231MZ купил в 2х разных магазинах на али, убегают безбожно, температура на одних 16 градусов на других 49, это из одной партии.
Но если смотреть mouser или gigikey то стоимость одного чипа DS3231MZ 800руб :-( жаба душит, видимо буду использовать DS3231S, DS3231SN в корпусе SOP16. Работают стабильно более 2х лет.
На самоплясном форуме (я там с тобой переписывался) есть ПРЕКРАСНЫЙ ГОТОВЫЙ открытый скетч со всеми процедурами, которые тебе понадобятся. Что мешает его скачать и разобрать по "винтикам" ???
Самоплясный форум - это не ХД ли? Тогда там под другим ником?
С удивлением узнал из #5что оказывается есть люди не проверяющие CRC. Тут двух мнений быть не может, контроль строго обязателен. Про поиск датчика перед опросом - недавно была тема где чел жаловался на редкие, но не устранимые, отказы такого подхода. На шине этой еще есть способ обнаруживать факт наличия подключенного датчика без адреса' можно на это опирается перед поиском.
вот замутил меленький эксперимент, как раз CRC не проверяю пост 1 строка 200