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

 
 
> уточните про ds1820
NikP
сообщение Jun 25 2007, 05:14
Сообщение #1


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

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Прочитал в форуме об использовании ds1820,
у народа все хорошо и быстро получается, решил
попробовать. Получилась непонятка.

Для простоты и кратости взял для пересчета в
температуру TEMP_LSB*0.5 . Однако на индикатор
выводятся цифры, далекие от того что кажет
градусник на стенке . Показания стабильные
(т.е. цифры не "скачут"), однако при простом нагревании
датчика рукой цифра меняется странно: увеличивается,
уменьшается по очереди пока не установится. Непонятно- то ли с программой
не то, то ли датчик барахлит. Подтягивающий резистор сначала стоял
как рекомендован 4,7 к, затем пробовал 1 к, 100к (как было у одного
участника форума) не помогает. Голову сломал - причины не вижу.
Поделитесь мыслями, кому не жалко.
Заранее благодарен.

Микросхема SiLsbs C8051F320. Питание от внешнего источника
(не паразитное). Операция чтения бита
организована так:

Вывод на шину "0"
Задержка 5мкс
Вывод 1 - "5 вольт"
Задержка 5мкс
Чтение состояния шины
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tiny
сообщение Jul 29 2008, 16:45
Сообщение #2


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

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



Люди, кто знает, насколько точен DS18B20?
Я сравнивал показания с спиртовыми термометрами, но у них самих огромный разброс. Поместил в один корпус датчик и ртутный термометр - данные отличаются на пару градусов. Если поместить градусник в отверстие корпуса, так чтобы ртутный кончик был внутри, а большая часть с наружи, то показания сближаются.
По данным у него точность должна быть не хуже 0,5 градуса. Кому верить? Как проверить? Пока я программно вычел из полученных данных 2 градуса, но это не выход. Как-то же они используются. Может его калибровать нужно?
Использую готовые функции CodeVision

Цитата
#asm("cli");
TEMPR=ds18b20_temperature(&rom_code[0][0]);
#asm("sei");
J='+';
PORTA.0 = 1; //отключен минус
if (TEMPR<0)
{
J='-';
TEMPR=-TEMPR;
PORTA.0 = 0; //включить '-'
};

REZULT = TEMPR*10-20; //Показать температуру
//Умножить на 10 тк. в indilat() отбросятся дробные части
//-20 т.к по ртутным градусникам получалась ошибка на 2гр
indikat(); //функция разложения числа на 3 цыфры для динамической индикации

Функция динамической индикации отбросит дробную часть, поэтому я умножил резултат на 10. Получаю температуру 372. После 2-го 7-сегментного индикатора светится запятая. Врезултате индицируется 37,2
Go to the top of the page
 
+Quote Post



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

 


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


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