Работа с датчиком DS18B20

Обсуждаем цифровые устройства...
Ответить
Davydov
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт авг 16, 2012 21:34:24

Работа с датчиком DS18B20

Сообщение Davydov »

Доброго всем времени суток!

Разбираюсь с датчиком температуры DS18B20, читаю материалы в сети.
Поясните:
1. Как я понимаю, вся работа с датчиком производится путём перевода шины в "0" на определенный временной интервал.
2. Как происходит чтение температуры в 9-ти битовом формате?
3. В каком формате датчик предоставляет температуру МК.

Необходимо собрать термостат на DS18B20 и Atmega16, а с 1wire шиной никогда дела не имел.

Спасибо! :beer:
Если бы это было так, это бы еще ничего. Если бы ничего, то так бы оно и было. Но так как это не так, так оно и не эдак. Такова логика вещей. (с)
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Работа с датчиком DS18B20

Сообщение uk8amk »

1. Грубо говоря именно так.
2. Через команду чтения scratchpad. Причём читается всегда в 12-битном формате. Если преобразование происходит при меньшем разрешении, то младшие разряды просто не следует принимать во внимание. Разрешение программируется через конфигурационный регистр.
3. В дополнительном коде(до 2).
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Работа с датчиком DS18B20

Сообщение Z_h_e »

Не важно на какую точность измерения настроен датчик Вы должны получить от него дамп памяти, и не обязательно весь если не проверяете целостность данных.
СпойлерИзображение

Данные о температуре хранятся в этих регистрах дампа, обыкновенный двоичный формат с фиксированной запятой.
СпойлерИзображение
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Работа с датчиком DS18B20

Сообщение Chip115 »

Привет! Сам только сегодня раскурил и получил данные от датчика.
В даташите есть диаграммы. Вот согласно им и дергаешь пином. Есть такое понятие как time slot. Все времена приведены на диаграмме и в таблице.
Что бы прочитать температуру, сначала нужно сказать датчику "эй ты, измерь температуру!", а потом "эй, ты, покажи, что измерил!"
Примерно так!

Код: Выделить всё

     test = u8Presence ();
     vOWWriteBiyte (SKIP_ROM);    // отправили 0хСС
     vOWWriteBiyte (CONVERT_T);  // отправили 0х44 (сказали измерять)
     
     test = u8Presence ();
     vOWWriteBit (SKIP_ROM);                  // отправили 0хСС
     vOWWriteBit (READ_SCRATCHPAD);    // отправили 0хBE (сказали что сча будем читать решистры
// чтение данных   
     temp = u8OWReadBytes ();     // ну а тут таймслот чтения регистров.

Если интересует только температура (2 байта), то вычитываешь их и в конце отправляешь Presence. Первым лезет младший бит.
Как можешь заметить, любое обращение к датчику начинается с Presence ();
Это вот эта фиговина.
Изображение
Проваливаешь шину от 480 мкс до 960 мкс, переводишь работу пина на "вход" (про паузу между таймслотами не забудь) и читаешь. Если пришел нуль, то на шине кто-то висит и можешь работать дальше, иначе будет единица. Тоды пиши ошибку, мол датчик не исправен или не подключен.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Ответить

Вернуться в «Цифровая техника»