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

 
 
> 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
Ответов
Рома_С
сообщение Mar 10 2007, 23:25
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699



Помогите мне пожалуйста, тоже проблемы с отрицательной температурой правда только пробовал я это в Proteuse 6,9 SP3, пока нет возможности попробовать на реальных термодатчиках в протеусе он мне как бы измеряет отрицательную температуру но показывает вместо -1 число 4095, вместо -2 число 4094, вместо -3 число 4093 и так далие. В чем же дело, все это я сделал из примера в CodeVision для ds18b20, или это Протеус глючит, или это я так глючу smile.gif . Как мне сделать, чтобы минусовая температура отображалась как надо в десятичном виде, и как можно отобразить на дисплее hd44780 температуру в двоичном виде ибо значение температуры в ds18b20 занимает два байта. Как это все сделать в CodeVision.

Заранее спасибо.

Сообщение отредактировал Рома_С - Mar 10 2007, 23:27
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 11 2007, 01:22
Сообщение #3


Ambidexter
*****

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



Цитата(Рома_С @ Mar 10 2007, 20:25) *
Помогите мне пожалуйста, тоже проблемы с отрицательной температурой правда только пробовал я это в Proteuse 6,9 SP3, пока нет возможности попробовать на реальных термодатчиках в протеусе он мне как бы измеряет отрицательную температуру но показывает вместо -1 число 4095, вместо -2 число 4094, вместо -3 число 4093 и так далие. В чем же дело, все это я сделал из примера в CodeVision для ds18b20, или это Протеус глючит, или это я так глючу smile.gif . Как мне сделать, чтобы минусовая температура отображалась как надо в десятичном виде, и как можно отобразить на дисплее hd44780 температуру в двоичном виде ибо значение температуры в ds18b20 занимает два байта. Как это все сделать в CodeVision.

Так и должно быть, никто никого не глючит. Минус единица (-1) представлена в дополнительном коде. Чтобы получить положительное число, надо проинвертировать каждый бит и к результату добавить 1.
Для -1 будет так: 4095=0xFFF, инв(0хFFF)+1=1. Для -2 будет так: 4094=0xFFE, инв(0хFFE)+1=2. И т.д.

Отсюда следует простой алгоритм: проверяете 11 бит числа, если он равен 1, значит число отрицательное. Получаете дополнение, это одна команда NEG Rx.

Преобразование в символьную форму можно осуществить разными путями. Один из них следующий. Поскольку весь диапазон 16-битных чисел со знаком лежит от -32768 до +32767, то надо определить 5 цифр. Старшая цифра, десятков тысяч может быть 0, 1, 2 или 3. Вычитаете из числа значение 10000 столько раз, чтобы число стало меньше 10000. Количество вычитаний вам даст цифру десятков тысяч. Затем из остатка вычитаете 1000 подобным образом, затем 100 и 10. Последний остаток даст вам количество единиц в числе.


--------------------
Делай сразу хорошо, плохо само получится
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 11 2007, 18:17
|- - zltigo   Цитата(Рома_С @ Mar 11 2007, 17:17) А есл...   Mar 12 2007, 02:33
- - VXDRV   Дискретность 0,0625 если вы посмотрите DATA_SHEET....   Mar 12 2007, 00:39
|- - =GM=   Цитата(Рома_С @ Mar 11 2007, 15:17) А есл...   Mar 12 2007, 03:08
- - Рома_С   Свершилось чудо. E меня все получилось как я хотел...   Mar 13 2007, 19:48


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

 


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


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