|
DS18B20 - протекают ли конверсия температуры и чтение данных одновременно? |
|
|
|
Jan 8 2016, 19:23
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Господа, хочу подтвердить или опровергнуть свою догадку. Хотя конечно работающее устройство ее подтверждает само по себе, но я боюсь подвоха.
До этого с датчиками температуры DS18x работал пару раз и извлек для себя только то, что 9-ти битный режим - это точность 0.5 градуса, но зато 90 мсек для получения температуры, а 12-ти битный точность повыше, но время конверсии аж 750 мсек. То есть если скорость критична, а точность неважна, 12-ти битный режим не подходит. В одном проекте 12-ти битный режим мне не подошел лишь потому, что в программе на экране часто обновляются данные и пауза в 750 мсек существенно заметна. Меняя настройки и длительность паузы я случайно допустил ошибку и НЕ ПЕРЕВЕЛ датчик в 9 битный режим, а паузу уменьшил. К моему удивлению, данные на экране были верные. То есть получается, что после того как мы дали команду на конверсию температуры, нам не обязательно ждать 750 мсек, датчик открыт для общения, просто данные в регистре чтения будут старые, так? А пока мы что-то делаем, датчик параллельно получает данные.
Я убрал задержку вообще. У меня в программе цикл - получение данных и вывод на экран. До 10 раз в секунду. То есть пока температура вычисляется, я безболезненно обращаюсь к датчику 7 раз и он 6 раз выдает мне одни и те же данные, и на 7-й раз - обновленные.
Я все правильно понял?
|
|
|
|
|
Jan 8 2016, 20:13
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(zheka @ Jan 8 2016, 22:23)  Я все правильно понял? Нет. Во время преобразования температуры линию DQ нужно подключить к питанию, даже при наличии активного питания датчика (не паразитного). При высоких температурах (более 85C) видно, что линия DQ при отсутствии значительной подтяжки начинает "плыть к земле" и данные искажаются. Например, датчик может начать выдавать максимальные показания 127C. Разумеется, что при активной подтяжке DQ во время преобразования никакой обмен не может быть осуществлен.
|
|
|
|
|
Jan 8 2016, 20:39
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(zheka @ Jan 8 2016, 23:28)  Планиируемые температуры - комнатные и уличные. Я могу думать, что мне такая постановка датчика в позу не повредит? Вы какой ответ ждете? Хотите, чтоб все работало без "глюков" - делайте в строгом соответствии с документацией. При отступлении от документации датчик может начать вести себя как угодно. Есть мнение, что следует подумать над архитектурой программы, чтоб ожидание ответа от датчика не влияло на все остальное - в этом случае все встанет на свои места, и не надо будет "перекладывать проблему с больной головы (программа) на здоровую (датчик)".
|
|
|
|
|
Jan 8 2016, 21:12
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(zheka @ Jan 8 2016, 22:23)  ...зато 90 мсек для получения температуры, а 12-ти битный точность повыше, но время конверсии аж 750 мсек.... у этой группы датчика есть команды начать преобразование, стоп преобразование, либо непрерывно делать... подумайте вот над чем. сколько битов АЦП нужно чтоб получить достаточную разрядность на весь диапазон температур? Для однозначности ответа - возьмите ds1821 - у него 0,01 разрешение (намекает о том, что 12 бит маловато будет). И сравните цены на предполагаемые ацп и сами датчики. Размышления в студию. Это вам подскажет, откуда 750 мкс взялось. внутри датчика есть временные регистры - где он хранит результат сканирования. Вы можете и чаще получать эти данные, но смысл уменьшается да и отвлекать мозги датчика от основной задачи вашим обменом - проверять судьбу. удачи вам (круглый) ЗЫ Влияние подтяжки линии данных на результат замечен не был, за последние 10 лет...
|
|
|
|
|
Jan 9 2016, 04:15
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(adnega @ Jan 9 2016, 00:47)  С меня условия постановки эксперимента... я правильно понимаю, что 1) если включить три датчика серии ds18xx на разные пины 2) с нормальным питанием(без паразитного) 3) в отсутствии сканирования у одного ножку данных подтягивать к плюсу(резистором?) 4) у второго(в отсутствии сканирования) к минусу(резистором или коротить?) 5) у третьего(в отсутствии сканирования) бросить в воздухе(тут вот ложняк возможен - но думаю прокатит. инициализация приведёт в чувства) 6) засунуть все три в 100 градусов то показания будут различны, на более чем погрешность значения? я всё прально повторил Вашу мысль? с уважением (круглый)
|
|
|
|
|
Jan 9 2016, 08:17
|
Гуру
     
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 9 2016, 08:38
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 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 (круглый)
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|