roboforum.ru

Технический форум по робототехнике.

 

Разрешение DS1820

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Разрешение DS1820

Сообщение Maxiik » 24 июл 2012, 07:04

Доброго времени суток !!!
Подскажите пожалуйста как настроить разрешение DS1820.
В устройстве используется 3 датчика DS1820, в качестве управляющего элемента использую микроконтроллер ATmega8.
Программирую в CVavr. Проект прилагаю.
Мне нужна разрешающая способность 9 бит, чтобы измерять температуру с точностью до 0.5 градуса.
Зарание очень благодарен за помощь :friends:
Вложения
tr.c
Исходник программы на С++
(5.01 КиБ) Скачиваний: 99
Аватара пользователя
Maxiik
 
Сообщения: 262
Зарегистрирован: 28 сен 2009, 21:54
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович

Re: Разрешение DS1820

Сообщение Romikgy » 24 июл 2012, 13:33

по pdf http://www.micropik.com/PDF/ds1820.pdf вроде он меряет в 9-битном режиме и все ........
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 677
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Odessa.UA

Re: Разрешение DS1820

Сообщение citizen » 25 июл 2012, 01:17

Можно и с точностью 1/16 градуса - смотрите 4 страницу даташита.
Аватара пользователя
citizen
 
Сообщения: 315
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Разрешение DS1820

Сообщение Radist » 25 июл 2012, 12:27

это скорее не точность, а разрешающая способность. По факту эти битики колышатся как флаг на ветру.
Аватара пользователя
Radist
 
Сообщения: 2233
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Разрешение DS1820

Сообщение Maxiik » 25 июл 2012, 17:41

Смотрел я датащит... В ассемблере я не понимаю...
Сейчас пишу на С++ в CVavr
Проблема в том что я не могу найти как можно изменить разрешающую способность в CVavr. Какую функцию применить...
На просторах интернета нашёл вот такую функцию
ds18b20_init( 0, 30, 60, DS18B20_12BIT_RES )
Но у меня она в чистом виде не работает - компилятор выдаёт ошибку :x
У меня в программе подключется такой файл - #include <ds1820.h>
...а при использовании вышеуказаной функции в примере подключается файл #include <ds18b20.h>
***
В чём разница между #include <ds1820.h> и #include <ds18b20.h> ????
***
Вот ссылка на пример с вышеуказаной функцией
http://mega-avr.ucoz.ru/publ/ds18b20_connect_atmega8535/1-1-0-15
***
Может какую дополнительную библиотеку стоит подключить ???
***
Ещё странность заключается в том, что изначально я работал с одним датчиком DS1820, а потом решил научиться работать с несколькими датчиками и купил ещё два, но уже других датчика DS18b20+
Тот который был первым датчик - он изначально по умолчанию имел разрешающую способность 9 бит и выдавал с точностью до 0.5 градуса, а вот новые датчики изначально имеют разрешение 12 бит и выдают точность в 0.125 градуса. Из за разных значений функция выводит неверные цифры так как расчитана на точность в 0.5 градуса.
***
Зарание очень благодарен за помощь !!!
Аватара пользователя
Maxiik
 
Сообщения: 262
Зарегистрирован: 28 сен 2009, 21:54
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович

Re: Разрешение DS1820

Сообщение Romikgy » 25 июл 2012, 19:56

в configuration register записать 0x1f
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 677
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Odessa.UA

Re: Разрешение DS1820

Сообщение Maxiik » 26 июл 2012, 13:32

Прошу прощения, но у меня очень мало опыта и я ещё раз извиняюсь за, возможно, глупые вопросы.
А как записать в этот регистр значение ?
Может используя ассемблер ?
Вставить ассемблерные инструкции в код С++...?
Аватара пользователя
Maxiik
 
Сообщения: 262
Зарегистрирован: 28 сен 2009, 21:54
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович

Re: Разрешение DS1820

Сообщение Romikgy » 26 июл 2012, 15:06

Код: Выделить всёРазвернуть
unsigned char ds1820_set(unsigned char *addr,signed char temp_low,signed char temp_high,signed char config)
{
if (ds1820_select(addr)==0) return 0;
w1_write(0x4e);
w1_write(temp_high);
w1_write(temp_low);
w1_write(config);
return w1_init();
}
...
ds1820_set(adr,0,0,0x1f);

вроде так ... не проверял!
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 677
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Odessa.UA

Re: Разрешение DS1820

Сообщение Maxiik » 26 июл 2012, 15:31

Romikgy, спасибо большое за помощь !!!
Сейчас буду пробывать :)
Я попытался изменить функцию вывода и выяснил что погрешность измерения датчика 5 градусов - это нормально ?
Я использую 1 датчик DS1820 и два датчика DS18b20+
DS1820 - работает абсолютно точно и покупался в своё время за 170 рублей
DS18b20+ - работает с погрешностью примерно в 5 градусов и покупался за 70 рублей
Такая разница в цене из-за точности измерений ???
Аватара пользователя
Maxiik
 
Сообщения: 262
Зарегистрирован: 28 сен 2009, 21:54
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович

Re: Разрешение DS1820

Сообщение RootAdmin » 26 июл 2012, 15:48

5 градусов - не может быть. Я б проверил адреса, к тому же датчику обращаешься ли каждый раз.
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1674
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Разрешение DS1820

Сообщение Maxiik » 26 июл 2012, 16:57

не получается изменить разрешающую способность - целый день просидел - всё перепробывал :x
Погрешность 5 градусов - это точно !
Исправил пгрешность путём ввода поправки на 5 градусов.
Помимо погрешности эти датчики отличаются ещё инерционностью, тот который дорогой является точным и слабоинерционным (нагревается ровно и также остывает), а тот который дешовый нагревается тоже ровно, а вот остывает с заметным запаздыванием примерно 10 - 30 секунд.
***
Может быть в этом и есть отличие между ними и это является нормальным, или всётаки нет ???
Аватара пользователя
Maxiik
 
Сообщения: 262
Зарегистрирован: 28 сен 2009, 21:54
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович

Re: Разрешение DS1820

Сообщение Radist » 26 июл 2012, 22:21

Я работал с этими датчиками, правда на асемблере по таймингам из даташита. Датчики хорошие, погрешность была как в даташите. Так что это скорее программные косяки. Но Си я не знаю, помочь не могу. Посмотрите среди проектов по ссылке - там есть несколько по работе с этими датчиками.
http://www.530.ru/electronics/projects.php?do=all
Аватара пользователя
Radist
 
Сообщения: 2233
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Mail.ru counter