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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Странное вычисление температуры, Проблема с отрицательными значениями
_Олег_
сообщение Aug 20 2008, 06:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Доброго всем времени суток. Такая проблема:
при вычислении температуры на ATmega162 с DS18S20 по формуле

TEMPERATURE= TEMP_READ - 0.25 + (COUNT_PER_C - COUNT_REMAIN)/COUNT_PER_C

получаю странные результаты в отрицательной области, а именно: при увеличении температуры по формуле получается уменьшение, а затем скачком повышение! В положительной области все нормально.

Вот таблица составленная из лога и исходник.

Спасибо за внимание, с уважением, Олег.
Прикрепленные файлы
Прикрепленный файл  v1.183.rar ( 93.94 килобайт ) Кол-во скачиваний: 45
 
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 20 2008, 07:32
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



А сам датчик исправен? С другим не пробовали?
А где таблица с логом?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 20 2008, 07:40
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(GDI @ Aug 20 2008, 11:32) *
А сам датчик исправен? С другим не пробовали?
А где таблица с логом?


Вообще-то только с одним датчиком пробовал, а таблица в архиве с исходником.
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 20 2008, 07:52
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



анализ.xls? И что там не то? Пометить как то надо неправильные строки, а если они там все неправильные, то надо добавить с обоих краев правильные значения. В общем ничего непосвященному непонятно.
Датчики эти иногда дохнут, причем проявляться это может по разному. Попробуйте все же другой сперва.
Компилятор какой, CodeVision, судя по инклюдам? Там функции работали правильно эти, по крайней мере раньше... давно я им не пользовался... smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 20 2008, 09:08
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(GDI @ Aug 20 2008, 11:52) *
анализ.xls? И что там не то? Пометить как то надо неправильные строки, а если они там все неправильные, то надо добавить с обоих краев правильные значения. В общем ничего непосвященному непонятно.
Датчики эти иногда дохнут, причем проявляться это может по разному. Попробуйте все же другой сперва.
Компилятор какой, CodeVision, судя по инклюдам? Там функции работали правильно эти, по крайней мере раньше... давно я им не пользовался... smile.gif


Вот, пояснил, надеюсь сейчас будет понятнее.

Сообщение отредактировал _Олег_ - Aug 20 2008, 09:10
Прикрепленные файлы
Прикрепленный файл  log.rar ( 4.79 килобайт ) Кол-во скачиваний: 65
 
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 20 2008, 10:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Да уж, если формула неправильная, то это к Максиму претензии, но может у вас изначально не те значения идут? заголовочник то от 1820, не знаю какие отличия от 18S20. А может вам вообще применить 18B20? Он сразу с шагом 0,0625 температуру выдает. А датчики вы калибровать собираетесь, иначе зачем вам шаг уменьшать, если у этих датчиков заводская точность 0,5 градуса?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 20 2008, 10:48
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(GDI @ Aug 20 2008, 14:19) *
Да уж, если формула неправильная, то это к Максиму претензии, но может у вас изначально не те значения идут? заголовочник то от 1820, не знаю какие отличия от 18S20. А может вам вообще применить 18B20? Он сразу с шагом 0,0625 температуру выдает. А датчики вы калибровать собираетесь, иначе зачем вам шаг уменьшать, если у этих датчиков заводская точность 0,5 градуса?


Спасибо, DS18B20 у меня есть, но я сначала хотел разобраться с DS18S20 smile.gif. Нет я не собирался калибровать.
Мне кажется самое сомнительное место здесь:
Код
//temp_m = 10000 * temp_l + 7500 - 10000 * cnt_r / count_c
temp_l = temp_l >> 1; //сдвигаем - эквивалентно отбрасывания младшего бит 0,5 С и /2


хотя я до этого сам дошел, не совсем понятно: делить на 2 нужно всю формулу или temp_l отбрасывая младший и /2. И еще непонятно, почему COUNT_PER_C всегда 16?

Сообщение отредактировал _Олег_ - Aug 20 2008, 10:49
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 20 2008, 11:29
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



При такой операции потеряется знаковый бит, нодо его сохранять отдельно.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 20 2008, 11:39
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(GDI @ Aug 20 2008, 15:29) *
При такой операции потеряется знаковый бит, нодо его сохранять отдельно.


но temp_l не содержит знака, это -
Код
temp_l = __ds1820_scratch_pad.temp_lsb;


а знак -
Код
t_msb = __ds1820_scratch_pad.temp_msb; //получаем знак температуры
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 20 2008, 11:54
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Да, только температура там в дополнительном коде записана и нельзя просто отбросить знаковые биты.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 20 2008, 12:00
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(GDI @ Aug 20 2008, 15:54) *
Да, только температура там в дополнительном коде записана и нельзя просто отбросить знаковые биты.


спасибо, попробую еще поэксперементировать.
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 20 2008, 12:33
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
я до этого сам дошел, не совсем понятно: делить на 2 нужно всю формулу или temp_l отбрасывая младший и /2

А зачем делить на 2? чтобы потерять лишний разряд? Храните всю температуру в signed short и операции с ним делайте и все будет нормально, и доп код автоматом учитываться будет(если сдвигом не пользоваться)
Хотя если не собираетесь калибровать , то зачем вообще все это?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2008, 13:05
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



В полку неучей прибыло sad.gif http://electronix.ru/forum/index.php?showt...=23218&st=0


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 20 2008, 15:00
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(zltigo @ Aug 20 2008, 17:05) *
В полку неучей прибыло sad.gif http://electronix.ru/forum/index.php?showt...=23218&st=0


Здорово, наверно, так ссылками кидаться smile.gif А по делу?
Там DS18B20, а не DS18S20 sad.gif и по поводу этой формулы ничего нет!

Видемо вы еще с той ветки не остыли smile.gif

Сообщение отредактировал _Олег_ - Aug 20 2008, 15:02
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2008, 15:11
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Олег_ @ Aug 20 2008, 17:00) *
и по поводу этой формулы ничего нет!

В том и дело, что даже владение арифметикой на 0, а подавай "формулы", которые тоже понять знания арифметики нужны. Замкнутый круг..
Цитата
Там DS18B20, а не DS18S20

Ужас сделать из 9bit 12bit слабо?
if( id[0] == DS18S20_ID )
{ // 9 -> 12 bit if 18S20
meas <<= 3;
}
Далее по тексту....
Цитата
Видемо вы еще с той ветки не остыли smile.gif

Кипячусь я не так. А это просто горькая констатация факта уровня образования...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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