Страница 1 из 1

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

Добавлено: Пн янв 26, 2015 15:20:37
Davydov
Доброго всем времени суток!

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

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

Спасибо! :beer:

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

Добавлено: Пн янв 26, 2015 18:15:51
uk8amk
1. Грубо говоря именно так.
2. Через команду чтения scratchpad. Причём читается всегда в 12-битном формате. Если преобразование происходит при меньшем разрешении, то младшие разряды просто не следует принимать во внимание. Разрешение программируется через конфигурационный регистр.
3. В дополнительном коде(до 2).

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

Добавлено: Пн янв 26, 2015 18:16:19
Z_h_e
Не важно на какую точность измерения настроен датчик Вы должны получить от него дамп памяти, и не обязательно весь если не проверяете целостность данных.
СпойлерИзображение
Данные о температуре хранятся в этих регистрах дампа, обыкновенный двоичный формат с фиксированной запятой.
СпойлерИзображение

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

Добавлено: Ср фев 25, 2015 16:47:03
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 мкс, переводишь работу пина на "вход" (про паузу между таймслотами не забудь) и читаешь. Если пришел нуль, то на шине кто-то висит и можешь работать дальше, иначе будет единица. Тоды пиши ошибку, мол датчик не исправен или не подключен.