Свежие обсуждения
Микроконтроллеры

датчики DS18B20

1 10 21

Сергей К:
В моем примере
Судя по тому, что некоторые "вешают" по пять 1-Wire на один МК (кстати, ещё один из методов "борьбы" с адресацией датчиков, каждому датчику - по 1-Wire ), так делать можно, но зачем пренебрегать безопасностью, если есть свободный вывод ОС?

не вижу смысла
Смысл - обычный, разгрузить основную программу. Кроме того, ИМХО, временнЫе задержки (основу 1-Wire) удобней и точнее сформировать таймерами. И чего их экономить, когда оных аж три штуки?

по очереди, подключать остальные
Только надо не забывать отключать предыдущие. Именно этот алгоритм я выше и описАл.
Команда выдачи ID называется "Read ROM" и представляет байт 33h,
а та чуднАя команда, про которую я говорил выше, называется "Search ROM" (байт 0F0h), и как она работает, мне лично неведомо.

 

Gregory: как она работает, мне лично неведомо
В даташите ж всё описано...

 

Gregory: Только надо не забывать отключать предыдущие
естественно.

Gregory: если есть свободный вывод ОС
ну если есть - то конечно. Но как тогда читать? Две ножки задействовать?

Gregory: удобней и точнее сформировать таймерами
а нужна ли чам такая точность? пару мкс туда пару сюда , там ведь диаппазон "от" и "до" дан.

Gregory: И чего их экономить, когда оных аж три штуки?
а в моем МК все три заняты Первый выполняет роль RTC, второй работает с ИК приемником. Третий... уже и не помню, что делает ( ), но я его на ШИМ хотел пристроить...

но в общем... это дело вкуса и доступных ресурсов

 

Сергей К:
Но как тогда читать?
Так, а в чём проблема? Настраиваем на вход, и считываем.

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

это дело вкуса и доступных ресурсов
На этом и порешим.

 

smg123: Датчик DS18B20 возвращает температуру с фиксированной запятой, 4 знака после запятой.
Таким образом для получения температуры с точностью 0.1 градуса нам нужно возвращаемое значение умножить на 0.625

Я не понял. Имеется в виду погрешность 0,1 гр. ? Это как же? В даташите указано, что погрешность 0,5 град. И что, можно элементарно получить точность выше указанной в даташите? И если это можно сделать так легко, то почему это уже не реализоавали в самом датчике на заводе? При этом не увеличивается время опроса, как при увеличении разрядности.
Или вы имеете в виду дискретность? Так дискретность вроди достигается изменением разрядности. От куда взялось это умножение? Я установил разрядность 10, т.к. при погрешности 0,5 дискретность выше 0,25 особо не нужна.

 

Gregory: как понять, какой именно датчик ответил?
Как всегда искал в инете одно, нашёл другое. У автора есть алгоритм поиска 8 датчиков на одной шине на асме: http://frank.bol.ucla.edu/2313Temper8.htm

choroh: Я не понял. ...погрешность, точность, дискретность, разрядность...
Смешались в кучу кони, люди...(с)
Погрешность датчика и точность измерения (преобразования в двоичный код) - две большие разницы, как говорят в Одессе.

 

smg123:
на асме
У него АВР...

 

тут главное алгоритм. Там есть ссылка на Application Note 162, должно быть упоминание об алгоритме поиска (см. GetROMS в тексте)

 

Сергей К: Там есть ссылка...
Что за ссылку Вы привели? 162 апноут находится здесь или здесь.
А ещё есть 187 апноут по поиску устройств на шине 1-wire.

 

smg123: Смешались в кучу кони, люди...(с)
Погрешность датчика и точность измерения (преобразования в двоичный код) - две большие разницы, как говорят в Одессе.

Не знаю, где там кони. Погрешность - это величина ошибки результата. Дискретность - это шаг, с которым происходит измерение. Разрядность - это количество бит обрабатываемого сигнала. Вопрос стоит, как измерить температуру приближенно к истинному значению. И если есть возможность улучшить результат путем умножения полученного значения на некое число, то почему это не сделала производитель?