Страница 49 из 59
Re: Всё по DS18(B/S)20.
Добавлено: Чт окт 20, 2016 20:14:57
Аlex
Ну математику то не нае@ёшь

Просто приводите целое значение, принятое с датчика, к типу с плавающей точкой и тупо делите на 16.0. И всё.
Этот алгоритм не изменится от установленной битности. От неё просто будет зависеть разрешение температуры и время преобразования.
Re: Всё по DS18(B/S)20.
Добавлено: Чт окт 20, 2016 20:21:14
wellcom
Аlex писал(а):Ну математику то не нае@ёшь

Просто приводите целое значение, принятое с датчика, к типу с плавающей точкой и тупо делите на 16.0. И всё.
мда, математику я профукал в свое время... ((
Что же выходит, при любом разрешении 9,10,11,12, бит полученное число всего лишь нужно разделить 16.0. В таком случае битность по сути влияет только на время преобразования датчиком данных Т.
БОЛЬШОЕ КОТЯЧЬЕ СПАСИБО!

, жаль нет смайлика с колбасой ))
и да, заметил, если брать целое значение (без сдвига) и /16,0, то показания постоянно плавают в пределах 0,1 гр. С , это и есть тот 0 разряд который нада игнорить в моем 11 разр. разрешении, что б показания были более стабильны. Выбор за нами!
Датчик ds18xx
Добавлено: Пн окт 24, 2016 15:51:00
vipien
Здравствуйте! Кто знает, подскажите чем ds1821 отличается от ds1821+ По datasheet ничего толкового не нашел

Re: Датчик ds18xx
Добавлено: Пн окт 24, 2016 15:54:02
alexradio1103
Re: Датчик ds18xx
Добавлено: Пн окт 24, 2016 16:20:28
vipien
Это тоже читал. Там в основном расписано как датчик перевести в режим термостата. Меня интересует именно в чем разница ds1821 и ds1821
+
Re: Датчик ds18xx
Добавлено: Пн окт 31, 2016 12:04:37
BOB51
Страница 2
ORDER INFORMATION
....
"Note: A “+” symbol will also be marked on the package.
+ Denotes lead-free package.
..."

Re: Всё по DS18(B/S)20.
Добавлено: Сб ноя 19, 2016 19:35:14
BOB51
Максим немного "обновил" линейку ds-ок парой новых зверяток:

Это информационка - чтоб нового названия не шарахались и были готовы к потреблению...

Re: Всё по DS18(B/S)20.
Добавлено: Сб ноя 19, 2016 19:43:18
ARV
и в чем фишка? мне показалось - 1 в 1 DS18B20... или я что-то пропустил?
Re: Всё по DS18(B/S)20.
Добавлено: Сб ноя 19, 2016 22:16:13
Аlex
Из того, что я заметил - пониженное напряжение питания.
Re: Всё по DS18(B/S)20.
Добавлено: Пн янв 02, 2017 12:09:22
levaclaus
если я вместо ds18s20 подключаю ds18b20, то к какому виду нужно привести принятые данные?
Re: Всё по DS18(B/S)20.
Добавлено: Пн янв 02, 2017 16:39:49
ARV
levaclaus писал(а):к какому виду нужно привести принятые данные?
загадочный вопрос...
данные вы получаете в виде дополнительного кода в долях градуса, по умолчанию - в 1/16-ых долях градуса. т.е. если вам нужно просто целое число градусов, надо полученный результат поделить на 16. если делить в формате float, то получится правильное дробное число градусов.
какой перевод данных имеете в виду вы?
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 01:10:24
eduardo
Пацаны,кто знает,пожалста подскажите как правильно формировать временные интервалы для чтения температуры с 2-х DS18B20.. У меня иногда проскакивает -99%С ,т.е -9999(функция чтения при ошибке возвращает это значение). Вывожу на 2 4-х разрядных 7-ми сегментника. В Протеусе вроде всё в норме,а в железе -99 вылазит. Я так понимаю,что программа не вовремя читает результаты преобразования. Повозился с этим изрядно. Ранее вывод на индикаторы тактировался от 0-го таймера--выскакивало чаще. Переделал на 1й таймер --выскакивает реже,но... ВЫСКАКИВАЕТ И ВСЁ ТУТ!!!...

Прога писана в CV AVR для меги8,калибровка тактовой частоты внутренняя на 8 МГц. Используется библиотека ds18b20.h.
P.S. Для нормального отображения в Протеусе в файле prj. надо РАСкоментировать строки: "для индикаторов без ключей", а строки :"для индикаторов с ключами" наоборот ЗАкоментировать.В железе катоды индикатров подключены через ключи на полевиках ,а в Протеусе транзисторные ключи у меня почему-то не работают.
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 09:07:32
oleg110592
имхо "виновата" родная библиотека 1wire CV - там сделаны задержки программно, прерывания индикации нарушают длительность этих задержек.
Решение проблемы:
1) использовать свою "хитрую" библиотеку 1wire
2) использовать для индикации внешний драйвер, например STLED316
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 10:13:57
ARV
eduardo писал(а):У меня иногда проскакивает -99%С ,т.е -9999(функция чтения при ошибке возвращает это значение)
в этой фразе содержится подсказка, как следует поступать ПРАВИЛЬНО.
следует анализировать результат функции и НЕ ОБНОВЛЯТЬ показания при ошибке, т.е. оставлять старые, корректные показания. это не решит проблему с кривоватым 1-wire, но для термометра полностью решит проблему с индикацией.
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 10:23:49
oleg110592
извиняюсь не увидел сразу:
Код: Выделить всё
w1_write(0x44);//команда начать преобразование
delay_us(800); //задержка для завершения преобразования
w1_write(0xbe);//команда чтение памяти датчика
temp1=ds18b20_temperature(&rom_code[0][0]); // читаем данные с 1-го датчика
temp2=ds18b20_temperature(&rom_code[1][0]); // читаем данные со 2-го датчика
наверное надо вместо delay_us(800) написать delay_ms(800)
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 12:58:27
eduardo
Во блин!!...Спасибо за пинок.. И я не увидел

Изменил на милисекунды и... ничего не дало

А вот возвращать переменным в случае ошибки старое значение--идея замечательная,только как её реализовать--не пойму

И ещё одно: когда температура отрицательная,ошибка вылазит чаще..
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 13:03:27
Аlex
eduardo писал(а):только как её реализовать--не пойму
А что там может быть непонятного ? Проверяем на ошибку, если есть - игнорируем результат измерения.
Для обнаружения ошибки, лучше всего заюзать проверку CRC.
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 15:26:32
levaclaus
На хабре нашел такой код. То есть если откинуть 4 младших бита из LSB то не имеет разницы 9бит или 12 бит работает датчик? В смысле можно отдельно работать с дробной частью
Код: Выделить всё
signed char ds18b20_temperature(void)
{
unsigned char LSB,MSB;
w1_init();
w1_write(0xCC);
w1_write(0xBE);
LSB=w1_read();
MSB=w1_read();
w1_init();
w1_write(0xCC);
w1_write(0x44);
return ((MSB<<4)&0xf0) | ((LSB>>4)&0x0f);
}
void ds_init(void)
{
w1_init();
w1_write(0x4e);
w1_write(0x64); //100
w1_write(0xD8);
w1_write(0x1f);
// w1_write(0x48);
delay_ms(15);
}
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 15:32:04
Аlex
В 18B20 младшие 4 бита - дробное значение температуры. И без разницы, какое разрешение установлено. 4 бита - это 16. Отсюда, чтобы получить реальную температуру, значение нужно делить на 16.
У 18(S)20 дробное значение - всего один младший бит. По этому мы делим только на 2, что является разрешением в 1/2 градуса.
Re: Всё по DS18(B/S)20.
Добавлено: Сб янв 07, 2017 16:01:22
ARV
зачем работать с температурой побайтно? датчик выдает два байта, которые имеют формат стандартного int для микроконтроллеров, т.е. это уже число со знаком. поместить эти 2 байта в int - это и вся проблема! а потом надо вспомнить о том, в каких долях градуса это число показывает температуру: DS18B20 по умолчанию выдает в 16-ых долях градуса, т.е. как бы в 16 раз больше, чем на самом деле (надо поделить на 16), а DS18S20 - в половинках градуса, т.е. в 2 раза больше (поделить на 2).
вот и все!
Код: Выделить всё
unsigned char buf[9]; // в этот буфер надо получить содержимое scratchpad-памяти датчика
// обязательно все 9 байт, чтобы подсчитать CRC - далее работать только если CRC корректна!
int *temperature = buf; // вот таким нехитрым способом мы имеем доступ к int-значению из буфера
// когда буфер получен и CRC корректна, вот так получаем КОРРЕКТНУЮ температуру в целых градусах:
temp = *temperature / 16; // для DS18B20
// а вот так можно получить float с долями градуса:
float temp_float = *temperature / 16.0;
и никакой мороки...