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

|
Прочитал в форуме об использовании ds1820, у народа все хорошо и быстро получается, решил попробовать. Получилась непонятка. Для простоты и кратости взял для пересчета в температуру TEMP_LSB*0.5 . Однако на индикатор выводятся цифры, далекие от того что кажет градусник на стенке . Показания стабильные (т.е. цифры не "скачут"), однако при простом нагревании датчика рукой цифра меняется странно: увеличивается, уменьшается по очереди пока не установится. Непонятно- то ли с программой не то, то ли датчик барахлит. Подтягивающий резистор сначала стоял как рекомендован 4,7 к, затем пробовал 1 к, 100к (как было у одного участника форума) не помогает. Голову сломал - причины не вижу. Поделитесь мыслями, кому не жалко. Заранее благодарен.
Микросхема SiLsbs C8051F320. Питание от внешнего источника (не паразитное). Операция чтения бита организована так: Вывод на шину "0" Задержка 5мкс Вывод 1 - "5 вольт" Задержка 5мкс Чтение состояния шины
|
|
|
|
|
Jun 25 2007, 09:35
|

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

|
Цитата(NikP @ Jun 25 2007, 12:14)  Однако на индикатор выводятся цифры, далекие от того что кажет градусник на стенке . Показания стабильные (т.е. цифры не "скачут"), однако при простом нагревании датчика рукой цифра меняется странно: увеличивается, уменьшается по очереди пока не установится. У меня сейчас на столе стоит DS1820. Правде обмен с ним делается через СОМ порт компа посредством фирменного интерфейса. Как то мы принесли сразу четыре разных термометра и все они показывали разную температуру +-3 градуса. Кому верить - непонятно. Но думаю прибор точнее. По поводу реакции на изменение температуры - она как и принято у температурных датчиков - замедленная, но строго направленная либо плавно увеличивается, либо плавно уменьшается. Скачки тут маловероятны. Скорее всего дело в конвертации результатов преобразования в процессоре - ведь данные по шине идут в цифре. Ошибки в передачи данных вызвали бы полный хаос, а у Вас более менее упорядочено, но только странновато  .
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jun 28 2007, 10:23
|

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

|
Цитата(NikP @ Jun 28 2007, 17:00)  Приношу извинения за то, что отнял время спасибо за обратную связь - копим опыт...
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Dec 11 2007, 07:01
|

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

|
Еще добавлю что DS1820 - снят с производства, в кристалле микросхемы DS18S20 устранены ошибки механизма преобразования, присущие компоненту DS1820. источн: http://www.elin.ru/1-Wire/?topic=components2DS18B20 - аналог DS1820 , но без ошибок , разрядность результата 9-12 бит DS18S20 - разрядность результата 9 бит. На практике простая замена DS18S20/DS1820 на DS18B20 без изменения кода программы не получится. См. таблицу в приложенном файле. Удачи!
Сообщение отредактировал adc - Dec 11 2007, 07:04
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Jul 14 2008, 20:36
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jul 29 2008, 16:45
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Aug 12 2008, 09:31
|

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