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

 
 
> DS18B20 + Mega помогите !, траблы с отрицательной температурой
belenkoff
сообщение Nov 7 2006, 10:44
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 7-11-06
Пользователь №: 22 039



Доброго времени суток!

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

void ShowTemp(void)
{
char i;
float temp;
isfloat=1;
temperature=ds18b20_temperature(&rom_code[0][0]);
if (temperature!=-9999)
{
if (temperature>=0) {
temp = temperature;
if (temperature>=1000) {isfloat =0; temp = temperature/10;} //
i=0;
while (temp>=10)
{
temp=temp-10;
i++;
};
if (i>9) i=0; //****

buff1[1]=i;
buff3[1]=i;
i=0;
while (temp>=1)
{
temp=temp-1;
i++;
};
buff1[2]=i;
buff3[2]=i;
i=0;
while (temp>=0.1)
{
temp=temp-0.1;
i++;
};
buff1[3]=i;
buff3[3]=i;
i=0;
while (temp>=0.01)
{
temp=temp-0.01;
i++;
};
buff1[4]=i;
buff3[4]=i;
}
else
{
isfloat=0;
temp = -temperature/10; // /10;
i=0;

while (temp>=10)
{
temp=temp-10;
i++;
};
buff1[1]=i;
buff3[1]=i;
i=0;
while (temp>=1)
{
temp=temp-1;
i++;
};
buff1[2]=i;
buff3[2]=i;
i=0;
while (temp>=0.1)
{
temp=temp-0.1;
i++;
};
buff1[3]=i;
buff3[3]=i;
i=0;
while (temp>=0.01)
{
temp=temp-0.01;
i++;
};
buff1[4]=i;
buff3[4]=i;
}
}
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VXDRV
сообщение Mar 12 2007, 00:39
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Дискретность 0,0625 если вы посмотрите DATA_SHEET. Предлагаю вариант вообще без float - (господин GM - может к этому шёл) полученные два байта приводите к INT с корекцией знака (знак запоминаете во флаге каком нибудь) и умножаете на 625 результат - long int
Например 0x01 - типа старший байт 0x40 младший - в общем 0x140 * 625=200000. Ставим запятую после двадцать на самом индикаторе затем рисуем "дробную" часть получаем 20,0000 С. Алгоритм вычисления десятков сотен и т.д. приведён постом выше.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 12 2007, 03:08
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Рома_С @ Mar 11 2007, 15:17) *
А если нужно чтобы температура отображалась сточностью -0,1 или даже -0,05 то как из float сделать стринг?

Не путайте представление с фиксированной точкой (0.05) и с плавающей (5*10^-2).
Цитата(VXDRV @ Mar 11 2007, 21:39) *
Дискретность 0,0625 если вы посмотрите DATA_SHEET. Предлагаю вариант вообще без float - (господин GM - может к этому шёл) полученные два байта приводите к INT с корекцией знака (знак запоминаете во флаге каком нибудь) и умножаете на 625 результат - long int

Может и шёл(:-), но больше сосредоточился на преобразовании. Всё правильно вы говорите, могу только развить вашу тему для лучшего понимания. В результате чтения датчика получается двухбайтное число вида YYYYY c ценой одного разряда 0.0625 градуса. Искомые градусы Цельсия получаются умножением YYYYY*0.0625 = YYYYY*625/10000=ZZZZZZZZ/10000. Естественно, деление на 10000 производить не обязательно, достаточно передвинуть запятую на четыре разряда влево. Соответственно, надо преобразовать в символьный вид не два байта, а четыре. Идеологию преобразования, на которой я заострял внимание, автор уже знает.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- belenkoff   DS18B20 + Mega помогите !   Nov 7 2006, 10:44
- - Igor26   Посмотрите здесь, может что-то прояснится... http:...   Nov 7 2006, 11:06
- - zltigo   Цитата(belenkoff @ Nov 7 2006, 12:44) ......   Nov 7 2006, 11:09
- - haker_fox   Скачайте этот исходник (под IAR) и проанализируйте...   Nov 7 2006, 11:18
|- - zltigo   Цитата(haker_fox @ Nov 7 2006, 13:18) про...   Nov 7 2006, 11:32
|- - haker_fox   Цитата(zltigo @ Nov 7 2006, 19:32) Цитата...   Nov 7 2006, 11:41
|- - belenkoff   Цитата(zltigo @ Nov 7 2006, 14:32) Цитата...   Nov 7 2006, 11:42
|- - zltigo   Цитата(belenkoff @ Nov 7 2006, 13:42) Я п...   Nov 7 2006, 12:15
- - belenkoff   Дык и пытаюсь думать, но за первую неделю в Сях ка...   Nov 7 2006, 13:12
|- - zltigo   Цитата(belenkoff @ Nov 7 2006, 15:12) Пер...   Nov 7 2006, 16:28
|- - OlegIvanov   [/quote] Причем тут C, если для начала с элементар...   Mar 12 2007, 08:37
- - freux   Та, та, белый, белый, совсем карячий! Поступи...   Nov 7 2006, 14:51
- - Laksus   А "непонятное значение" это как? _______...   Nov 8 2006, 08:41
- - Miron   Ну что вы ругаете человека Просто помогите на само...   Nov 8 2006, 08:58
- - belenkoff   Спасибо всем за помощь! void ShowTemp(void) ...   Nov 12 2006, 20:04
|- - zltigo   Цитата(belenkoff @ Nov 12 2006, 22:04) Мо...   Nov 12 2006, 20:56
|- - КСПшник   На самом деле здесь все просто. Температура читает...   Nov 13 2006, 08:40
|- - freux   Может приведенное ниже не столь красиво, ибо отсут...   Nov 13 2006, 10:57
- - Andy Great   Вопрос по той же конфигурации. Пытаюсь использоват...   Nov 13 2006, 11:29
|- - simsim   signed char tt; //ds18b20_select(0); //w1_search(0...   Mar 4 2007, 18:09
|- - =GM=   Цитата(simsim @ Mar 4 2007, 15:09) signed...   Mar 4 2007, 19:40
- - VXDRV   Решил наконец код привести - пример из Delphi (был...   Mar 5 2007, 12:40
|- - zltigo   Цитата(VXDRV @ Mar 5 2007, 11:40) Решил н...   Mar 5 2007, 13:20
||- - VXDRV   Цитата(zltigo @ Mar 5 2007, 13:20) Цитата...   Mar 5 2007, 17:55
|- - =GM=   Цитата(VXDRV @ Mar 5 2007, 09:40) Решил н...   Mar 5 2007, 19:41
|- - Naksojin   Я когда-то вот так делал.... unsigned char Check_...   Mar 6 2007, 18:52
- - umup   Для преобразования в формат с фиксированной запято...   Mar 6 2007, 19:27
- - Рома_С   Помогите мне пожалуйста, тоже проблемы с отрицател...   Mar 10 2007, 23:25
|- - =GM=   Цитата(Рома_С @ Mar 10 2007, 20:25) Помог...   Mar 11 2007, 01:22
- - Рома_С   А если нужно чтобы температура отображалась сточно...   Mar 11 2007, 18:17
|- - zltigo   Цитата(Рома_С @ Mar 11 2007, 17:17) А есл...   Mar 12 2007, 02:33
- - Рома_С   Свершилось чудо. E меня все получилось как я хотел...   Mar 13 2007, 19:48


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

 


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


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