|
DS18B20 + Mega помогите !, траблы с отрицательной температурой |
|
|
|
Nov 7 2006, 10:44
|
Группа: Новичок
Сообщений: 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; } } }
|
|
|
|
|
 |
Ответов
|
Mar 10 2007, 23:25
|
Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699

|
Помогите мне пожалуйста, тоже проблемы с отрицательной температурой правда только пробовал я это в Proteuse 6,9 SP3, пока нет возможности попробовать на реальных термодатчиках в протеусе он мне как бы измеряет отрицательную температуру но показывает вместо -1 число 4095, вместо -2 число 4094, вместо -3 число 4093 и так далие. В чем же дело, все это я сделал из примера в CodeVision для ds18b20, или это Протеус глючит, или это я так глючу  . Как мне сделать, чтобы минусовая температура отображалась как надо в десятичном виде, и как можно отобразить на дисплее hd44780 температуру в двоичном виде ибо значение температуры в ds18b20 занимает два байта. Как это все сделать в CodeVision. Заранее спасибо.
Сообщение отредактировал Рома_С - Mar 10 2007, 23:27
|
|
|
|
|
Mar 11 2007, 01:22
|

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, или это Протеус глючит, или это я так глючу  . Как мне сделать, чтобы минусовая температура отображалась как надо в десятичном виде, и как можно отобразить на дисплее 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. Последний остаток даст вам количество единиц в числе.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|