реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> DS18B20 - протекают ли конверсия температуры и чтение данных одновременно?
zheka
сообщение Jan 8 2016, 19:23
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



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

До этого с датчиками температуры DS18x работал пару раз и извлек для себя только то, что 9-ти битный режим - это точность 0.5 градуса, но зато 90 мсек для получения температуры, а 12-ти битный точность повыше, но время конверсии аж 750 мсек.
То есть если скорость критична, а точность неважна, 12-ти битный режим не подходит. В одном проекте 12-ти битный режим мне не подошел лишь потому, что в программе на экране часто обновляются данные и пауза в 750 мсек существенно заметна.
Меняя настройки и длительность паузы я случайно допустил ошибку и НЕ ПЕРЕВЕЛ датчик в 9 битный режим, а паузу уменьшил. К моему удивлению, данные на экране были верные.
То есть получается, что после того как мы дали команду на конверсию температуры, нам не обязательно ждать 750 мсек, датчик открыт для общения, просто данные в регистре чтения будут старые, так? А пока мы что-то делаем, датчик параллельно получает данные.

Я убрал задержку вообще. У меня в программе цикл - получение данных и вывод на экран. До 10 раз в секунду. То есть пока температура вычисляется, я безболезненно обращаюсь к датчику 7 раз и он 6 раз выдает мне одни и те же данные, и на 7-й раз - обновленные.

Я все правильно понял?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 8 2016, 20:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zheka @ Jan 8 2016, 22:23) *
Я все правильно понял?

Нет. Во время преобразования температуры линию DQ нужно подключить к питанию, даже при наличии активного питания датчика (не паразитного).
При высоких температурах (более 85C) видно, что линия DQ при отсутствии значительной подтяжки начинает "плыть к земле" и данные искажаются.
Например, датчик может начать выдавать максимальные показания 127C.
Разумеется, что при активной подтяжке DQ во время преобразования никакой обмен не может быть осуществлен.
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 8 2016, 20:28
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата(adnega @ Jan 8 2016, 23:13) *
Нет. Во время преобразования температуры линию DQ нужно подключить к питанию, даже при наличии активного питания датчика (не паразитного).
При высоких температурах (более 85C) видно, что линия DQ при отсутствии значительной подтяжки начинает "плыть к земле" и данные искажаются.
Например, датчик может начать выдавать максимальные показания 127C.
Разумеется, что при активной подтяжке DQ во время преобразования никакой обмен не может быть осуществлен.


Планиируемые температуры - комнатные и уличные. Я могу думать, что мне такая постановка датчика в позу не повредит?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 8 2016, 20:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zheka @ Jan 8 2016, 23:28) *
Планиируемые температуры - комнатные и уличные. Я могу думать, что мне такая постановка датчика в позу не повредит?

Вы какой ответ ждете?
Хотите, чтоб все работало без "глюков" - делайте в строгом соответствии с документацией.
При отступлении от документации датчик может начать вести себя как угодно.
Есть мнение, что следует подумать над архитектурой программы, чтоб ожидание ответа от датчика не влияло на все остальное - в этом случае все встанет на свои места, и не надо будет "перекладывать проблему с больной головы (программа) на здоровую (датчик)".
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 8 2016, 20:44
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата(adnega @ Jan 8 2016, 23:39) *
Вы какой ответ ждете?
Хотите, чтоб все работало без "глюков" - делайте в строгом соответствии с документацией.
При отступлении от документации датчик может начать вести себя как угодно.
Есть мнение, что следует подумать над архитектурой программы, чтоб ожидание ответа от датчика не влияло на все остальное - в этом случае все встанет на свои места, и не надо будет "перекладывать проблему с больной головы (программа) на здоровую (датчик)".


ОК, у меня уже выделен таймер "планировщик", который определяет, не пришло ли время сделать что-нибудь. Добавлю туда опрос датчика.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 8 2016, 21:12
Сообщение #6


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(zheka @ Jan 8 2016, 22:23) *
...зато 90 мсек для получения температуры, а 12-ти битный точность повыше, но время конверсии аж 750 мсек....


у этой группы датчика есть команды начать преобразование, стоп преобразование, либо непрерывно делать...
подумайте вот над чем. сколько битов АЦП нужно чтоб получить достаточную разрядность на весь диапазон температур?
Для однозначности ответа - возьмите ds1821 - у него 0,01 разрешение (намекает о том, что 12 бит маловато будет).
И сравните цены на предполагаемые ацп и сами датчики.
Размышления в студию.

Это вам подскажет, откуда 750 мкс взялось.
внутри датчика есть временные регистры - где он хранит результат сканирования. Вы можете и чаще получать эти данные,
но смысл уменьшается да и отвлекать мозги датчика от основной задачи вашим обменом - проверять судьбу.

удачи вам
(круглый)
ЗЫ
Влияние подтяжки линии данных на результат замечен не был, за последние 10 лет...
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 8 2016, 21:47
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(kolobok0 @ Jan 9 2016, 00:12) *
ЗЫ
Влияние подтяжки линии данных на результат замечен не был, за последние 10 лет...

С меня условия постановки эксперимента, чтоб вы смогли повторить и убедится.
Или подсказать мне, где я ошибаюсь))
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 9 2016, 04:15
Сообщение #8


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(adnega @ Jan 9 2016, 00:47) *
С меня условия постановки эксперимента...


я правильно понимаю, что
1) если включить три датчика серии ds18xx на разные пины
2) с нормальным питанием(без паразитного)
3) в отсутствии сканирования у одного ножку данных подтягивать к плюсу(резистором?)
4) у второго(в отсутствии сканирования) к минусу(резистором или коротить?)
5) у третьего(в отсутствии сканирования) бросить в воздухе(тут вот ложняк возможен - но думаю прокатит. инициализация приведёт в чувства)
6) засунуть все три в 100 градусов

то показания будут различны, на более чем погрешность значения?

я всё прально повторил Вашу мысль?
с уважением
(круглый)
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 9 2016, 08:17
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



что за хрень....
Пытался настроить датчик, уменьшить разрешение
Код
       DS_RESULT=One_Wire_Reset(One_Wire_Pin);
    One_Wire_Write_Byte(One_Wire_Skip_ROM,One_Wire_Pin);
    One_Wire_Write_Byte(DS18B20_WRITE_STRATCHPAD_CMD,One_Wire_Pin);
    One_Wire_Write_Byte(0x00,One_Wire_Pin);
    One_Wire_Write_Byte(0x00,One_Wire_Pin);
    One_Wire_Write_Byte(0x1F,One_Wire_Pin);
    
/*    
    DS_RESULT=One_Wire_Reset(One_Wire_Pin);
    One_Wire_Write_Byte(One_Wire_Skip_ROM,One_Wire_Pin);
    One_Wire_Write_Byte(DS18B20_COPY_STRATCHPAD_CMD,One_Wire_Pin);
    */
    

        One_Wire_Write_Byte(One_Wire_Skip_ROM,One_Wire_Pin);
    One_Wire_Write_Byte(DS18B20_READ_STRATCHPAD_CMD,One_Wire_Pin);
    
    readbuf[0]=One_Wire_Read_Byte(One_Wire_Pin);
    readbuf[1]=One_Wire_Read_Byte(One_Wire_Pin);
    readbuf[2]=One_Wire_Read_Byte(One_Wire_Pin);
    readbuf[3]=One_Wire_Read_Byte(One_Wire_Pin);
    readbuf[4]=One_Wire_Read_Byte(One_Wire_Pin);


Я писал в конфигурационный регистр 0x1F (R0=0, R1=0), после этого читал данные из регистра, там действительно был 0x1F. Но датчик выдает информацию в 16-ти битном формате. Как это понимать?

Скажите, формат данных DS1820 отличается от формата DS18B20 настроенного на 9 бит?
И еще - никак не могу найти толковых разяснений, как получать отрицательные значения температуры? Как понять что это отрицательная температура, я знаю, а как получить число...

Сообщение отредактировал zheka - Jan 9 2016, 08:48
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 9 2016, 08:38
Сообщение #10


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(zheka @ Jan 9 2016, 11:17) *
...Как понять что это отрицательная температура, я знаю, а как получить число...


вы получаете стандартное отрицательное число как дополнение до нуля.
из даташита:

+125°C = 0111 1101 = 7Dh
+ 85°C = 0101 0101 = 55h
+ 25°C = 0001 1001 = 19h
0°C = 0000 0000 = 00h
- 1°C = 1111 1111 = FFh
- 25°C = 1110 0111 = E7h
- 55°C = 1100 1001 = C9h

(круглый)
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 9 2016, 08:52
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



................
разобрался с 9-ти битным пересчетом

Сообщение отредактировал zheka - Jan 9 2016, 10:18
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 9 2016, 10:12
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zheka @ Jan 9 2016, 11:52) *
Если дополнение до нуля, то (FF-E7 )/ 2 должно давать 25. А получается другое.
Как из E7 получить 25 ?

-E7 = 0 - E7 = FF + 1 - E7 = FF - E7 + 1 = 18 + 1 = 19hex => 25dec
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 9 2016, 10:24
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Погодите... а мой даташит другое говорит
Цитата
–25°C 11111111 11001110 FFCEh


То есть не E7, а CE....
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 9 2016, 10:40
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zheka @ Jan 9 2016, 13:24) *
То есть не E7, а CE....

-FFCE = 0 - FFCE = FFFF + 1 - FFCE = FFFF - FFCE + 1 = 31 + 1 = 32hex => 50dec => 50 / 2 => 25.0C
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 9 2016, 11:33
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Спасибо, разобрался, адаптировал и под 12-ти и под 9-ти битный формат. Это в теории, когда вместо содержимого регистра подсовывается определенное число.
Когда же запустил все это на практике выяснилось (может я и ошибаюсь, но датчик ведет себя именно так), что когда включаешь 9-ти битный режим, температура кодируется все-равно по 12-ти битному формату, но шаг изменения показаний действительно 0,5 градуса. То есть 9 бит в DS1820 и DS18B20 это не одно и то же?
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016