|
ds18b20 меряет не более 85 градусов |
|
|
|
 |
Ответов
|
Feb 6 2008, 08:21
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Итак по порядку: - время опроса увеличивал вдвое, результат тот же. Пробовал уменьшать, тогда действительно, иногда датчик не успевал померять температуру и выводил 85 градусов. Но здесь имеет случай, когда он или не успевает померять значения температуры выше 85,56 градусов, или имеет место сброс датчика. - питание паразитное, на шине 4 датчика. Работа с ними осуществляется следующим образом: команда преоьбразования температуры для всех датчиков, потом считывание температуры по очереди со всех датчиков, используя адресацию. т.е когда отвечает один датчик остальные молчат. Было бы понятно, если бы температура выше 85 градусов лежала в другом байте, но это не так. Целые значения температуры лежат в двух младших байтах. Вот привожу кусок кода, где я преобразую считанные данные в температуру:
void out_curent_temp (byte i) { byte buf1, buf2, znak; int TEMPERATURE; float buf3=0; //********************************************************* buf1 = sens[i][0]; buf2 = sens[i][1]; buf1 = (buf1 >> 4); buf2 = (buf2 << 4); TEMPERATURE = buf1|buf2; znak=sens[i][1]; znak&=0xF0; if(znak!=0) TEMPERATURE=~TEMPERATURE; TEMPERATURE=TEMPERATURE*10; //********************************************************* buf1 = sens[i][6]; buf2 = sens[i][7]; buf3=0.25+(float)(buf2-buf1)/buf2; TEMPERATURE=TEMPERATURE+(byte)(buf3*10); Out_digit_LCD(2, 2, TEMPERATURE); }Умножение на 10 делаю для удобства реализации вывода чисел с плавающей запятой, чтобы использовать только целочисленные типы. Цитата(MTh @ Feb 6 2008, 10:13)  Меряет, причем на УРА! Первый результат, даже если дать комманду на преобразование всегда будет 85 градусов. Т.е. грубо говоря, надо дать команду на конвертацию, подождать а потом снова выдать команду. Тогда уже будет реальная температура. А чем это можно объяснить?
|
|
|
|
|
Feb 6 2008, 09:17
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
Цитата(masterpc @ Feb 6 2008, 11:21)  А чем это можно объяснить? Если я все правильно понимаю, так задумано производителем... Зачем - вопрос... В любом случае практика показывает, что со второго чтения данные идут верные. Я использовал в своих проектах в сумме около 10 DS18B20 и каждый, на первой конвертации и считывании давал температуру 85 градусов. Цитата(masterpc @ Feb 6 2008, 11:21)  Было бы понятно, если бы температура выше 85 градусов лежала в другом байте, но это не так. Целые значения температуры лежат в двух младших байтах. Вообще-то для температуры там отведено два байта всего... Старшая тетрада старшего байта отвечает за знак, младшая старшего байта и старшая младшего байта за целую часть, младшая младшего байта за дробную часть... Компилятор какой используешь? В CV AVR есть готовые библиотеки... правда там есть неудобство... Я на асме писал работу с B20 - никаких проблем не было, кроме собственных кривых рук и первоначального непонимания некоторых моментов.  Цитата - время опроса увеличивал вдвое, результат тот же. Пробовал уменьшать, тогда действительно, иногда датчик не успевал померять температуру и выводил 85 градусов. Но здесь имеет случай, когда он или не успевает померять значения температуры выше 85,56 градусов, или имеет место сброс датчика. Время опроса?? Наверное имеется ввиду время конвертации? Оно четко прописано в даташите и зависит от установленного разрешения. Я же говорил о том, что надо дать команду на конвертацию, подождать (750 мСек максимум), потом снова дать команду на конвертацию опять подождать (те же 750 мСек) и только тогда, считав данные, Вы должны получить реальную температуру.
Сообщение отредактировал MTh - Feb 6 2008, 09:20
|
|
|
|
|
Feb 6 2008, 09:19
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Странно... Ну у меня чуть не так, у меня меряет причем все датчики, но не более 85,5 градусов. Я попробую как Вы мне посоветовали, правда не хочется ждать два раза по 750 мсек, тем более, что первый прибор, который я сделал использует такие же датчики, только там не паразитное питание и на шине только один датчик. так вот там такого вообще не наблюдалось... Я пишу в ИАРе.
Сообщение отредактировал masterpc - Feb 6 2008, 09:24
|
|
|
|
|
Feb 6 2008, 09:22
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
Цитата(masterpc @ Feb 6 2008, 12:19)  Странно... Ну у меня чуть не так, у меня меряет причем все датчики, но не более 85,5 градусов. Я попробую как Вы мне посоветовали, только еще вопрос - какую паузу выдерживать между командами конвертации? Я пишу в ИАРе. см выше ))) А насчет того что не меряет выше... протокол сам реализовывал или готовый использовал?
|
|
|
|
|
Feb 6 2008, 09:27
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Цитата(MTh @ Feb 6 2008, 11:22)  см выше )))
А насчет того что не меряет выше... протокол сам реализовывал или готовый использовал? Использовал готовый. Прикол в том, что есть два датчика которые меряюют как раз правильно, свыше 100 градусов.
|
|
|
|
|
Feb 6 2008, 09:37
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Цитата(MTh @ Feb 6 2008, 11:31)  Прошу прощения (первый пост читал невнимательно). Тогда дело точно не в протоколе. Скорее всего в железе... попробуй поменять датчики. И проверь маркировку... Те датчики, которые в макете меряют не более 85,на приборе который описан выше меряют нормально  Цитата(zltigo @ Feb 6 2008, 11:32)  Ничего подобного. К чему вся эта бодяга с "отвечает"??? Это число. Просто 12 (или 9bit ) число. Не надо никаких разборок - просто умножте это число на шаг измерения температуры. Для получения в например, десятых градуса - соответственно результат поделите и округлите. И бога ради никаких float - ну совсем ни к чему они  P.S. Приведенный исходник читать не стал - там что-то уж совсем, извините  , умопомрачительное. Ну согласен, что дробную часть вычисляю дедовским способом для датчика 1820 которые уже сняты с производства, тем не менее это тоже верный способ. Я выводил на индикатор два младших байта полученные с датчика, нагревал датчик до температуры свыше 85 градусов и в результате каждый раз я получал значение 0х55. Так причем тут алгоритм преобразования?
Сообщение отредактировал masterpc - Feb 6 2008, 09:44
|
|
|
|
Сообщений в этой теме
masterpc ds18b20 меряет не более 85 градусов Feb 5 2008, 14:17 GrayCat Цитата(masterpc @ Feb 5 2008, 16:17) Може... Feb 5 2008, 20:11 yung Цитата(masterpc @ Feb 5 2008, 17:17) Всем... Feb 6 2008, 06:05 GrayCat Цитата(yung @ Feb 6 2008, 08:05) Может, с... Feb 6 2008, 06:45 MTh Меряет, причем на УРА!
Первый результат, даже ... Feb 6 2008, 08:13       zltigo Цитата(masterpc @ Feb 6 2008, 12:37) Ну с... Feb 6 2008, 10:04        masterpc Цитата(zltigo @ Feb 6 2008, 12:04) Только... Feb 6 2008, 10:11         zltigo Цитата(masterpc @ Feb 6 2008, 13:11) не д... Feb 6 2008, 10:20          masterpc Цитата(zltigo @ Feb 6 2008, 12:20) И дейс... Feb 6 2008, 10:24           zltigo Цитата(masterpc @ Feb 6 2008, 13:24) Сейч... Feb 6 2008, 10:44  zltigo Цитата(MTh @ Feb 6 2008, 12:17) каждый, н... Feb 6 2008, 09:32 masterpc Большое спасибо!!! Обязательно попробу... Feb 6 2008, 10:52 masterpc Разобрался с причиной - неправильно было организо... Feb 6 2008, 12:56 GrayCat Цитата(masterpc @ Feb 6 2008, 14:56) Разо... Feb 6 2008, 22:33 MTh Цитата(masterpc @ Feb 6 2008, 15:56) Разо... Feb 8 2008, 09:04  masterpc Цитата(MTh @ Feb 8 2008, 11:04) А можно п... Feb 8 2008, 12:40 Krik99 У меня в протэусе всё работает, а на железе датчик... May 17 2008, 16:10 masterpc Может с такотовой частотой процика связано? В прот... May 17 2008, 19:39 Kass Цитата(Krik99 @ May 17 2008, 19:10) датчи... May 24 2008, 21:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|