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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> датчик ds18s20 точность измерения и разрешение.
zheka
сообщение Mar 24 2006, 07:11
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Для этого датчика указано: +/- 0,5 и 9 бит соответственно.

Правильно ли я понял, что данный датчик может зафиксировать изменение температуры на 1/16 градуса, при этом абсолютное значение будет отличаться на 0,5 гр.С, или я губу раскатал?
Go to the top of the page
 
+Quote Post
Electrovoicer
сообщение Mar 24 2006, 08:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 337
Регистрация: 1-02-06
Пользователь №: 13 874



из практики абсолютная ошибка у него побольше 0.5С, а главная неприятная особенность, что он уплывает со временем. попадались экземпляры, уплывшие за год на 1.5С. а так да, разрешение сравнительно высокое


--------------------
"А я все помню, я был не пьяный!.." (С)Владимир Семенович
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 24 2006, 12:49
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Ну это можно откалибровать.
ТОгда такой вопрос - я думаю, что уплывание обусловлено физическими изменениями элементе. В таком случае при порче этого элемента не теряется ли чувствительность вообще? То есть при изменении на 1 градус датчик показывает изменение на 0,9...
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 25 2006, 19:08
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



На схемах вывод DQ соединен с плюсом питания через резистор.
А можно вместо него:

Код
DDRD=0x00;
PORTD=0xFF;


?

И еще вопрос - у меня датчик DS18b20 , в codevision пример на ds1820. Что надо поменять в программе?

Я поменял family_code с 0x10 на 0x28, согласно мануалу.
Резистор не подключал, а вставил код, как указано выше (ну нету под рукой резистора - магазины закрыты, до завтра не утерплю...).

пытаюсь определить устройство:
Код
devices=w1_search(0xf0,rom_code);
sprintf(s,"%u , DS1820\nDevice detected",devices);


Устройство не определяется.
Go to the top of the page
 
+Quote Post
zheka
сообщение Apr 8 2006, 03:02
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Не могу запустить датчик DS18B20.
Опишу картину.

Вначале я подключилдатчик к микроконтроллеру ATMega8 и перепробовал из нескольких примеров код инициализации датчика. Не работало.


Напомню сведения из DataSheet:
Прикрепленное изображение


То есть, надо подать импульс 480 мкс,подождать 15-60 мкс, после чего последует импульс от датчика длиной 60-240 мкс.
А мой контроллер не ловит этот импульс. Начинаю ковыряться, выясняю, что импульс от датчика есть, но следует ранее чем через 15 мкс.. и заканчивается ранее чем через 60 мкс.

Подключаю осциллограф. Вот картина (прошу обратить внимание - инвертирована по сравнению с даташитом):

Прикрепленное изображение

сразу же после тестового импульса появляется импульс датчика, очень короткий. То есть датчик отзывается, но как-то вяло.



Дай-ка думаю, попробую его опросить. Посылаю код 0XF0 - поиск ROM code - отвечает гад - один бит выдает в линию.
На остальные команды не реагирует.

Прикрепленное изображение





Еще один немаловажный момент - в даташите написано - что тестовый импульс от микроконтроллера должен быть не менее 480 мкс.
Вышеописанная осциллограмма наблюдается даже при 50 мкс.



Вот фрагменты программы:
Код
  #define DQW     PORTD.0
  #define DQR     PIND.0
  #define DQD     DDRD.0


///////////////////////////


    
unsigned char ow_reset(void)
{

unsigned char presence;
    DQW = 0;
        DQD = 1;  
    delay_us(500);
    DQD = 0;            
    delay_us(70);
    presence=DQD;      
    delay_us(450);    
    return(presence);


}    


void main ()
{
while (1)
{

    ow_reset();
    write_byte(0xF0);

    for(k = 0; k < 9; k++)
    {
        get[k] = read_byte();
    }


}
}


Подключаю так:

Прикрепленное изображение



Что посоветуете? Неисправность датчика? Не могу пока проверить - датчик один, а в магазинах обещают подвезти бог знает когда...
Go to the top of the page
 
+Quote Post
zheka
сообщение Apr 9 2006, 06:31
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Сорри, на схеме у 7805 не +5, а +9 вольт
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Apr 9 2006, 08:55
Сообщение #7


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



На первый взгляд у Вас все правильно. Вполне возможно, что неисправен сам датчик.
Go to the top of the page
 
+Quote Post
ogogogogogogogog...
сообщение Apr 16 2006, 13:27
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 13-04-06
Пользователь №: 16 093



Хм.. а у меня другая проблема:

Купил я датчик DS18b20 - снимаю с него показания программой, написанной под DS1820 - все без проблем.

Скачиваю из интернета код-пример под DS18b20 - запускаю...
В общем форматирование строки согласно примерам из CodeVision, а именно:

printf("t%u=%+.3f\xf8C\n\r",i+1, ds18b20_temperature(&rom_codes[i++][0]));

или

sprintf(lcd_buffer,"t%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));

выводит буквенно-цифровой бред на экран. И на изменение температуры показания на экране никак не реагируют.

Ставлю старый формат, как для DS1820 - sprintf(s,"t%u=%c%i.%u\xdfC",i,j,temp/10,temp%10); температуру показывает в 10 раз меньшую, но зато она хотя бы изменяется на экране.


Как правильно отформатировать строку?

Сообщение отредактировал ogogogogogogogogogo - Apr 16 2006, 13:28
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Apr 16 2006, 16:10
Сообщение #9


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Никогда не заморачивался с функцией sprintf в мегах... По-моему много проще написать свою функцию вывода чисел.
Go to the top of the page
 
+Quote Post
ogogogogogogogog...
сообщение Apr 16 2006, 16:16
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 13-04-06
Пользователь №: 16 093



Простите, мне проще работать с тем, что уже есть. Я вывожу результат на индикатор.

Вот код из ds18b20.lib:

Код
float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
}


То есть возвращает она вот чего: return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask

Как это переварить?
sprintf(s,"%f", temp) не выводит ничего.
Go to the top of the page
 
+Quote Post
Miron
сообщение Apr 17 2006, 08:23
Сообщение #11


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

Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574



У ds18b20 не 9 бит а от 9 до 12 выбирается это регистром конфигурации в самом датчике
по умолчанию 12 бит
точность разделена на пределы по температуре -10 до +70 ----- 0,5 гр.С
за этим диапазоном погрешность растет аш до 2 градусов
разрешения от него действительно можно получить 1/16

кстати в последних DataSheet про точтость указывают только предел где 0,5 гр.С
Go to the top of the page
 
+Quote Post
Miron
сообщение Apr 17 2006, 09:59
Сообщение #12


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

Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574



Похоже что у вас звенит задний фронт
посмотрите подробней схему включения
не забыли насчет подтягивающего резистора?
может у вас паразитная емкость где стдит
Такое обычно бывает на длинных линиях

Звон убирается схемкой драйвера линии
за счет более пологоо фронта
Go to the top of the page
 
+Quote Post
Miron
сообщение Apr 17 2006, 10:17
Сообщение #13


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

Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574



Что то я сразу внивание не обратил у вас на осцоллограмме импульс
сброса почему то 1 а он то должен быть 0

линия всегда должна находится в 1

посмотрите внимательно DS
импульс 480 мкс выдается 0
потом вы поднимаете на линии 1
ждете 15-60 мкс
и читаете импульс присутствия
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Apr 17 2006, 16:40
Сообщение #14


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Цитата
у вас на осцоллограмме импульс
сброса почему то 1 а он то должен быть 0

Автор же предупредил, что осциллограмма инверитрована.
Цитата
Похоже что у вас звенит задний фронт

Тоже врядли - слишком большой сигнал (да и задержка до него слишком большая).
Go to the top of the page
 
+Quote Post
ogogogogogogogog...
сообщение Apr 17 2006, 18:26
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 13-04-06
Пользователь №: 16 093



А по-моему у него та же проблема, что и у меня была - с кварцем. Все на вид правильно, однако стоит проверить , соответствуют ли временные задержки указанным. Если zheka не опытней, чем я, то он наверняка тоже CKSEL не прошил.

А вот у меня другие проблемы. У же говорил, что код-пример из CodeVision Выдает буквенно-цифровой бред. Вот я выдрал код функции, измеряющей температуру:
Код
float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
}


Что-то я не вижу там обработки заявленного __ds18b20_scratch_pad.temp_msb (старшего байта). Нет его (temp_msb) упоминания и во всех других файлах имеющих отношение к демо-проекту. Может я не прав, конечно... Но если прав - объясните, как доработать функцию, чтобы она полностью обрабатывала ответ датчика.

Сообщение отредактировал ogogogogogogogogogo - Apr 17 2006, 18:32
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 02:09
Рейтинг@Mail.ru


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