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

 
 
> уточните про 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
Ответов (1 - 12)
AndryG
сообщение Jun 25 2007, 06:55
Сообщение #2


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Причин может быть куча:
- не выдерживаете "время преобразования" между стартом преборазования и чтения температуры (результат преборазования)
- ошибки в преборазовании результата
- ошибки в выводе инфы

Попробуйте увеличить время преобразования и данные бросьте на терминал компа в их "первоначальном" виде - увидите, что глючит.

Для начала можно организовать шину на UART ... на gaw.ru есть хороший перевод аппноте для AVR ... там расписаны тайминги, скорости и т.д. Так Вы будете уверены, что тайминги верные.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jun 25 2007, 09:35
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(NikP @ Jun 25 2007, 12:14) *
Однако на индикатор
выводятся цифры, далекие от того что кажет
градусник на стенке . Показания стабильные
(т.е. цифры не "скачут"), однако при простом нагревании
датчика рукой цифра меняется странно: увеличивается,
уменьшается по очереди пока не установится.

У меня сейчас на столе стоит DS1820. Правде обмен с ним делается через СОМ порт компа посредством фирменного интерфейса. Как то мы принесли сразу четыре разных термометра и все они показывали разную температуру +-3 градуса. Кому верить - непонятно. Но думаю прибор точнее.
По поводу реакции на изменение температуры - она как и принято у температурных датчиков - замедленная, но строго направленная либо плавно увеличивается, либо плавно уменьшается. Скачки тут маловероятны. Скорее всего дело в конвертации результатов преобразования в процессоре - ведь данные по шине идут в цифре. Ошибки в передачи данных вызвали бы полный хаос, а у Вас более менее упорядочено, но только странновато smile.gif .


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
NikP
сообщение Jun 28 2007, 10:00
Сообщение #4


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

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



Большое спасибо всем откликнувшимся.
После попыток поработать с изменяемыми
временными параметрами еще раз посмотрел
на программу. Оказалось, что считывал данные
"наизнанку", т.е. при приеме с ds1820 первым
идет младший бит байта и т.д., а я умудрился
поставить его старшим - отсюда проблемы.
Приношу извинения за то, что отнял время
своей бестолковостью и невнимательностью.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jun 28 2007, 10:23
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(NikP @ Jun 28 2007, 17:00) *
Приношу извинения за то, что отнял время

спасибо за обратную связь - копим опыт...


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
sergeus
сообщение Dec 11 2007, 00:29
Сообщение #6


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Про ds1820 неплохо написано на http://www.radioded.ru . Очень хороший исходник c комментариями на ассемблере для AvrStudio http://radioded.ru/index.php?option=com_co...9&Itemid=33
Go to the top of the page
 
+Quote Post
adc
сообщение Dec 11 2007, 07:01
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Еще добавлю что DS1820 - снят с производства, в кристалле микросхемы DS18S20 устранены ошибки механизма преобразования, присущие компоненту DS1820. источн: http://www.elin.ru/1-Wire/?topic=components2
DS18B20 - аналог DS1820 , но без ошибок , разрядность результата 9-12 бит
DS18S20 - разрядность результата 9 бит. На практике простая замена DS18S20/DS1820 на DS18B20 без изменения кода программы не получится. См. таблицу в приложенном файле.
Удачи!

Сообщение отредактировал adc - Dec 11 2007, 07:04
Прикрепленные файлы
Прикрепленный файл  compatibility_ds1820_ds18b20.pdf ( 79.37 килобайт ) Кол-во скачиваний: 139
 


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
Tiny
сообщение Jul 14 2008, 20:36
Сообщение #8


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

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



Сделал на DS1820 термометр. В CodeVision для этого есть готовые функции. Программа получается давольно простая. Но дискретность 0,5 не устраивает. В даташите указана формула для вычисления температуры с дискретностью 0,1.
TEMPERATURE=TEMP_READ-0.25+(COUNT_PER_C - COUNT_REMAIN)/COUNT_PER_C
Нужно отбросить младший бит из измеренной температуры, и подставить в формулу данные из SCRATCHPAD ( 6-й, 7-й байты)

Правда, не знаю есть ли смысл ведь, если я не ошибаюсь точность 0,5. Решил попробывать.
В библиотеке ds1820.h есть
Цитата
extern struct __ds1820_scratch_pad_struct
{
unsigned char temp_lsb,temp_msb,
temp_high,temp_low,
res1,res2,
cnt_rem,cnt_c,
crc;
} __ds1820_scratch_pad;

Похоже это те самые данные, которые нужно обработать.

Кто-нибудь пробывал? Как это описать?

Сообщение отредактировал Tiny - Jul 14 2008, 20:37
Go to the top of the page
 
+Quote Post
Tiny
сообщение Jul 15 2008, 21:00
Сообщение #9


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

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



Так и не разобрался, как включить этот режим и нигде не нашел. Поставил DS18B20. У него разрядность 12бит. Выдает готовые значения с дискретностью 0,1Град. Только почему-то мне пришлось значение температуры умножить на 10. Иначе на индикаторе были только целые числа и дискретность 1Град.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Jul 21 2008, 01:58
Сообщение #10


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Ребята, а кто знает что за цифири прописаны на крпусе ds18b20
после/ниже маркировки - 0439С2281АЕ.
Если код, то цифр не хватает.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 21 2008, 04:18
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(domowoj @ Jul 21 2008, 04:58) *
Ребята, а кто знает что за цифири прописаны на крпусе ds18b20
после/ниже маркировки - 0439С2281АЕ.
Если код, то цифр не хватает.

Скорее первые четыре цифры означают время производства - 39-ая неделя 2004 года.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Tiny
сообщение Jul 29 2008, 16:45
Сообщение #12


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

Группа: Участник
Сообщений: 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
_Олег_
сообщение Aug 12 2008, 09:31
Сообщение #13


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

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



Цитата(Tiny @ Jul 15 2008, 00:36) *
Сделал на DS1820 термометр. В CodeVision для этого есть готовые функции. Программа получается давольно простая. Но дискретность 0,5 не устраивает. В даташите указана формула для вычисления температуры с дискретностью 0,1.
TEMPERATURE=TEMP_READ-0.25+(COUNT_PER_C - COUNT_REMAIN)/COUNT_PER_C
Нужно отбросить младший бит из измеренной температуры, и подставить в формулу данные из SCRATCHPAD ( 6-й, 7-й байты)

Правда, не знаю есть ли смысл ведь, если я не ошибаюсь точность 0,5. Решил попробывать.
В библиотеке ds1820.h есть

Похоже это те самые данные, которые нужно обработать.

Кто-нибудь пробывал? Как это описать?


Да, получается сделать шаг до 0,065 С, но почему-то при отрицательной температуре получается странное поведение, при увеличении температуры по формуле идет уменьшение. Ни как не получается разобраться, если интересно могу показать. При положительных температурах такого не наблюдается.

Сообщение отредактировал _Олег_ - Aug 12 2008, 09:33
Go to the top of the page
 
+Quote Post

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

 


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


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