Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Ну математику то не нае@ёшь :)
Просто приводите целое значение, принятое с датчика, к типу с плавающей точкой и тупо делите на 16.0. И всё.
Этот алгоритм не изменится от установленной битности. От неё просто будет зависеть разрешение температуры и время преобразования.
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: Всё по DS18(B/S)20.

Сообщение wellcom »

Аlex писал(а):Ну математику то не нае@ёшь :)
Просто приводите целое значение, принятое с датчика, к типу с плавающей точкой и тупо делите на 16.0. И всё.

мда, математику я профукал в свое время... ((
Что же выходит, при любом разрешении 9,10,11,12, бит полученное число всего лишь нужно разделить 16.0. В таком случае битность по сути влияет только на время преобразования датчиком данных Т.
БОЛЬШОЕ КОТЯЧЬЕ СПАСИБО! :beer: , жаль нет смайлика с колбасой ))

и да, заметил, если брать целое значение (без сдвига) и /16,0, то показания постоянно плавают в пределах 0,1 гр. С , это и есть тот 0 разряд который нада игнорить в моем 11 разр. разрешении, что б показания были более стабильны. Выбор за нами!
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
vipien
Прорезались зубы
Сообщения: 211
Зарегистрирован: Вт сен 11, 2012 20:21:37

Датчик ds18xx

Сообщение vipien »

Здравствуйте! Кто знает, подскажите чем ds1821 отличается от ds1821+ По datasheet ничего толкового не нашел :(
Аватара пользователя
alexradio1103
Друг Кота
Сообщения: 11291
Зарегистрирован: Пт авг 14, 2015 14:25:02
Откуда: Одесса - мама

Re: Датчик ds18xx

Сообщение alexradio1103 »

Тут тоже не понятно?
:write: http://www.platan.ru/shem/pdf/str42-45sx.pdf
90% времени уходит на отыскание неисправности,остальное - ждать когда нагреется паяльник! :)
Аватара пользователя
vipien
Прорезались зубы
Сообщения: 211
Зарегистрирован: Вт сен 11, 2012 20:21:37

Re: Датчик ds18xx

Сообщение vipien »

alexradio1103 писал(а):Тут тоже не понятно?
:write: http://www.platan.ru/shem/pdf/str42-45sx.pdf

Это тоже читал. Там в основном расписано как датчик перевести в режим термостата. Меня интересует именно в чем разница ds1821 и ds1821+
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Датчик ds18xx

Сообщение BOB51 »

DS1821.pdf
(455.09 КБ) 308 скачиваний

Страница 2
ORDER INFORMATION
....
"Note: A “+” symbol will also be marked on the package.
+ Denotes lead-free package.
..."
8)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Всё по DS18(B/S)20.

Сообщение BOB51 »

Максим немного "обновил" линейку ds-ок парой новых зверяток:
MAX31820.pdf
(1.02 МБ) 209 скачиваний

MAX31820PAR.pdf
(959.8 КБ) 161 скачивание

:tea:
Это информационка - чтоб нового названия не шарахались и были готовы к потреблению...
:roll:
Последний раз редактировалось BOB51 Сб ноя 19, 2016 23:07:42, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

и в чем фишка? мне показалось - 1 в 1 DS18B20... или я что-то пропустил?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Из того, что я заметил - пониженное напряжение питания.
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Re: Всё по DS18(B/S)20.

Сообщение levaclaus »

если я вместо ds18s20 подключаю ds18b20, то к какому виду нужно привести принятые данные?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

levaclaus писал(а):к какому виду нужно привести принятые данные?
загадочный вопрос...
данные вы получаете в виде дополнительного кода в долях градуса, по умолчанию - в 1/16-ых долях градуса. т.е. если вам нужно просто целое число градусов, надо полученный результат поделить на 16. если делить в формате float, то получится правильное дробное число градусов.

какой перевод данных имеете в виду вы?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Всё по DS18(B/S)20.

Сообщение eduardo »

Пацаны,кто знает,пожалста подскажите как правильно формировать временные интервалы для чтения температуры с 2-х DS18B20.. У меня иногда проскакивает -99%С ,т.е -9999(функция чтения при ошибке возвращает это значение). Вывожу на 2 4-х разрядных 7-ми сегментника. В Протеусе вроде всё в норме,а в железе -99 вылазит. Я так понимаю,что программа не вовремя читает результаты преобразования. Повозился с этим изрядно. Ранее вывод на индикаторы тактировался от 0-го таймера--выскакивало чаще. Переделал на 1й таймер --выскакивает реже,но... ВЫСКАКИВАЕТ И ВСЁ ТУТ!!!... :o Прога писана в CV AVR для меги8,калибровка тактовой частоты внутренняя на 8 МГц. Используется библиотека ds18b20.h.

P.S. Для нормального отображения в Протеусе в файле prj. надо РАСкоментировать строки: "для индикаторов без ключей", а строки :"для индикаторов с ключами" наоборот ЗАкоментировать.В железе катоды индикатров подключены через ключи на полевиках ,а в Протеусе транзисторные ключи у меня почему-то не работают.
Вложения
термо 8.rar
(319.23 КБ) 175 скачиваний
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Всё по DS18(B/S)20.

Сообщение oleg110592 »

имхо "виновата" родная библиотека 1wire CV - там сделаны задержки программно, прерывания индикации нарушают длительность этих задержек.
Решение проблемы:
1) использовать свою "хитрую" библиотеку 1wire
2) использовать для индикации внешний драйвер, например STLED316
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

eduardo писал(а):У меня иногда проскакивает -99%С ,т.е -9999(функция чтения при ошибке возвращает это значение)
в этой фразе содержится подсказка, как следует поступать ПРАВИЛЬНО.

следует анализировать результат функции и НЕ ОБНОВЛЯТЬ показания при ошибке, т.е. оставлять старые, корректные показания. это не решит проблему с кривоватым 1-wire, но для термометра полностью решит проблему с индикацией.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Всё по DS18(B/S)20.

Сообщение oleg110592 »

извиняюсь не увидел сразу:

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

    w1_write(0x44);//команда начать преобразование
    delay_us(800); //задержка для завершения преобразования
    w1_write(0xbe);//команда чтение памяти датчика
    temp1=ds18b20_temperature(&rom_code[0][0]); // читаем данные с 1-го датчика   
    temp2=ds18b20_temperature(&rom_code[1][0]); // читаем данные со 2-го датчика

наверное надо вместо delay_us(800) написать delay_ms(800)
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Всё по DS18(B/S)20.

Сообщение eduardo »

Во блин!!...Спасибо за пинок.. И я не увидел :facepalm: Изменил на милисекунды и... ничего не дало :cry: А вот возвращать переменным в случае ошибки старое значение--идея замечательная,только как её реализовать--не пойму :dont_know: И ещё одно: когда температура отрицательная,ошибка вылазит чаще..
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

eduardo писал(а):только как её реализовать--не пойму
А что там может быть непонятного ? Проверяем на ошибку, если есть - игнорируем результат измерения.
Для обнаружения ошибки, лучше всего заюзать проверку CRC.
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Re: Всё по DS18(B/S)20.

Сообщение levaclaus »

На хабре нашел такой код. То есть если откинуть 4 младших бита из LSB то не имеет разницы 9бит или 12 бит работает датчик? В смысле можно отдельно работать с дробной частью

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

signed char ds18b20_temperature(void)
    {
    unsigned char LSB,MSB;
    w1_init();   
    w1_write(0xCC);
    w1_write(0xBE);
    LSB=w1_read();   
    MSB=w1_read();
    w1_init();   
    w1_write(0xCC);
    w1_write(0x44);
    return ((MSB<<4)&0xf0) | ((LSB>>4)&0x0f);
    }
   
void ds_init(void)
    {
    w1_init();
    w1_write(0x4e);   
    w1_write(0x64); //100
    w1_write(0xD8);
    w1_write(0x1f);
   // w1_write(0x48);
    delay_ms(15);
    }
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

В 18B20 младшие 4 бита - дробное значение температуры. И без разницы, какое разрешение установлено. 4 бита - это 16. Отсюда, чтобы получить реальную температуру, значение нужно делить на 16.
У 18(S)20 дробное значение - всего один младший бит. По этому мы делим только на 2, что является разрешением в 1/2 градуса.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

зачем работать с температурой побайтно? датчик выдает два байта, которые имеют формат стандартного int для микроконтроллеров, т.е. это уже число со знаком. поместить эти 2 байта в int - это и вся проблема! а потом надо вспомнить о том, в каких долях градуса это число показывает температуру: DS18B20 по умолчанию выдает в 16-ых долях градуса, т.е. как бы в 16 раз больше, чем на самом деле (надо поделить на 16), а DS18S20 - в половинках градуса, т.е. в 2 раза больше (поделить на 2).

вот и все!

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

unsigned char buf[9]; // в этот буфер надо получить содержимое scratchpad-памяти датчика
// обязательно все 9 байт, чтобы подсчитать CRC - далее работать только если CRC корректна!
int *temperature = buf; // вот таким нехитрым способом мы имеем доступ к int-значению из буфера

// когда буфер получен и CRC корректна, вот так получаем КОРРЕКТНУЮ температуру в целых градусах:
temp = *temperature / 16; // для DS18B20

// а вот так можно получить float с долями градуса:
float temp_float = *temperature / 16.0;


и никакой мороки...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «Периферия»