DS18b20 мороз с разрешением 0,1 градуса

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1614
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение VNS »

[uquote="Mursik",url="/forum/viewtopic.php?p=4774552#p4774552"]А инверсия побитовая с добавлением единицы у меня почему то даёт не тот результат..[/uquote]
Всегда пользуюсь только таким алгоритмом и проблем не замечал. :) Как-то давно (когда под рукой был лабораторный термостат) проверял фирменные датчики на погрешность и влияние саморазогрева при минусовой температуре и на этом основании делал поправку в алгоритме при определённой температуре (в основном при минусе). Получалось довольно прилично увеличить точность показаний вплоть до минус 35. Вот данная таблица: показания с поправкой и напрямую с датчика. Период опроса датчика был 16 секунд (чтобы минимизировать саморазогрев).
Таблица v6.pdf
(183.04 КБ) 43 скачивания
Но с тех пор много воды утекло… оригинальные датчики теперь сильно дорого стоят, а клоны из Китая не отвечают заявленной погрешностью (в большинстве своём).
Да и оценить их погрешность теперь уже давно нет возможности. Соответствующие приборы остались на производстве, которые теперь не доступны. :roll:
Аватара пользователя
AlexS4
Друг Кота
Сообщения: 6646
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение AlexS4 »

а зачем 2 операции если достаточно 1 ??
для 8бит и 16бит это 0xFF-x и 0xFFFF-x
я выше писал ;)

другое дело если нет sub r,#nnnn (avr subi) операции но сходу не припомню актуальных процессоров где такая засада :)
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение akl »

[uquote="AlexS4",url="/forum/viewtopic.php?p=4775332#p4775332"]...для ... 16бит это ... 0xFFFF-x[/uquote]Это ошибка. Например
Изображение
0xFFFF-0xFFF8=0x0007. 0x0007*0x000A/0x0010=0x0004???
Если делать правильно
0x0000-0xFFF8=0x0008. 0x0008*0x000A/0x0010=0x0005
Вложения
DS18B20_-05.PNG
(9.46 КБ) 568 скачиваний
Аватара пользователя
Mursik
Мудрый кот
Сообщения: 1769
Зарегистрирован: Вт мар 28, 2023 21:17:15
Откуда: Universe

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Mursik »

В примерах "на просторах" обычно не отниманием это делается, а побитовой инверсией с прибавлением 1 к результату.
Вроде калькулятором совпадает..

~(0xFFF8) -> 0x0007
0x0007++ -> 0x008
I have a dream...¯\_(ツ)_/¯
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение akl »

Просто при кодировании инверсия с прибавлением 1 удобнее, а так это тоже самое, что вычитание из 0.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение HardWareMan »

[uquote="akl",url="/forum/viewtopic.php?p=4775556#p4775556"]Просто при кодировании инверсия с прибавлением 1 удобнее, а так это тоже самое, что вычитание из 0.[/uquote]
К сожалению, у AVR инструкция NEG работает только с регистром, который только 8 бит. Но зато есть 16 битный INC/DEC. Так что алгоритм XOR+INC самое быстрое, что есть на AVR.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 595
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Thinnnfor »

Прога которая работает , с минусами 0,1 что ещё нужно то ? Для CV AVR
На два датчика 18б20
работает из текстовика !

Код: Выделить всё

/*******************************************************
Date    : 24.09.2023
Chip type               : ATtiny26
AVR Core Clock frequency: 1,000000 MHz
*******************************************************/

#include <tiny26.h>
#include <delay.h>
#include <alcd.h>
#include <1wire.h>
#include <ds18b20.h>


unsigned char ee_code[2][9];  
signed int tem; 



           aaa (unsigned char dev)  // функция считывания t с датчика номер(dev) и вывод значения
                                 //  на лсд с отбросом незначащих нулей (до запятой)
                {          
                      tem=ds18b20_temperature(&ee_code[dev][0])*10; //считываем и умножаем на 10
                           
                       if (tem<0)      // если показание отрицательное
                      {
                            lcd_putsf("-");  //выводим "-" на лсд
                            tem=-tem;        //инвертируем показание 
                     
                      }
                 
                     if (tem<1260) {
                     

                                     if (tem>=1000) goto la1;
                                      if (tem>=100) goto la2;  // отброс незначащих нулей
                                       goto la3 ;             // тоже отброс незначащих нулей
                             la1:           lcd_putchar(tem/1000+48);      // сотни 
                             la2:           lcd_putchar(tem%1000/100+48);  // десятки
                             la3:           lcd_putchar((tem%100)/10+48);  // единицы
                                            lcd_putchar(44);              // запятая
                                            lcd_putchar(tem%10+48);      // десятые градуса
                                            lcd_putchar(176);            // градус °
                                            lcd_putsf("C ");            //C цельсия    
                                     }
                    else lcd_putsf("Err     ");// если t<126 выводим на лсд
                                                                    // иначе выводим "Err" (ошибка)
                      
                 }
void main(void)
{

// RS - PORTA Bit 2
// RD - PORTB Bit 7
// EN - PORTA Bit 3
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7

lcd_init(16);
w1_init();
w1_search(0xf0,ee_code);  // считываем номера датчиков и помещаем в массив ee_code
lcd_putsf("Chan.1=");
lcd_gotoxy(0,1);
lcd_putsf("Chan.2=");



while (1)
      {
    lcd_gotoxy(7,0);  
    aaa(0);        //выводим значение температуры 1-го датчика           
    lcd_gotoxy(7,1);
    aaa(1);        //выводим значение температуры 2-го датчика 
      
      }
}
Добавлено after 3 minutes 16 seconds:
10 строк кода ... и всё работает :)

Добавлено after 24 minutes 46 seconds:
Изображение

Добавлено after 5 minutes 55 seconds:
Размеры чуть более спичечного коробка , автономность 4 суток без подсветки .

Добавлено after 5 minutes 7 seconds:
Заряд , разряд контроль естественно
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение kolobok0 »

[uquote="Mursik",url="/forum/viewtopic.php?p=4774766#p4774766"]...с флоат воевать :?[/uquote]

нет там флоатов, от слова совсем. там всё целочисленно. Хоть 0,1 (DS18xxx, кроме DS1821); хоть 0,01 (DS1821) разрешение - пофигу.

(круглый)

ЗЫЗЫ
Кстати если кто-либо Вам скажет что там существует разогрев - не верьте, это всё не умение их приготавливать. Разогрев в пределах десятых градуса там (при самом частом опросе, порядка 800мс).
Последний раз редактировалось kolobok0 Вс дек 28, 2025 23:34:21, всего редактировалось 1 раз.
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 595
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Thinnnfor »

Если датчик находится в незамкнутой среде .. то как он может само разогреваться ?
Zelenyj111
Родился
Сообщения: 13
Зарегистрирован: Пт янв 05, 2024 13:43:29

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Zelenyj111 »

[uquote="Thinnnfor",url="/forum/viewtopic.php?p=4775966#p4775966"]Если датчик находится в незамкнутой среде .. то как он может само разогреваться ?[/uquote]

Тепловое сопротивление кристалл—среда создает разницу температур. Чем больше сопротивление и чем больше тепловыделение, чем больше разница. Если бы это была изолированная среда, то температура росла бы бесконечно.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение HardWareMan »

[uquote="kolobok0",url="/forum/viewtopic.php?p=4775920#p4775920"][uquote="Mursik",url="/forum/viewtopic.php?p=4774766#p4774766"]...с флоат воевать :?[/uquote]

нет там флоатов, от слова совсем. там всё целочисленно. Хоть 0,1 (DS18xxx, кроме DS1821); хоть 0,01 (DS1821) разрешение - пофигу.[/uquote]
Помимо Float Point есть ещё и Fixed Point.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Novice user »

[uquote="kolobok0",url="/forum/viewtopic.php?p=4775920#p4775920"]Разогрев в пределах десятых градуса там (при самом частом опросе, порядка 800мс).[/uquote]
Больше!
Как то собрал термометр,опрос каждую секунду,вытянул датчик проводами на улицу,а там мороз градусов -25-и на яндексе и на гисметео -25,а мой термометр -20...-19 показывал,долго не мог понять почему,потом просто отключил питание термометра минут на 10,включил-показывает боле менее точно и постепенно пошла температура медленно вверх,снова -20 где то,когда сделал опрос раз в минуту стало нормально.
Zelenyj111
Родился
Сообщения: 13
Зарегистрирован: Пт янв 05, 2024 13:43:29

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Zelenyj111 »

Все потребленное чипом электричество превращается в тепло!
Я использовал LPS22HB (давление+температура) с опросом раз в секунду. При тестировании в комнатных условиях секунд за 10 температура в показаниях поднималась на 1-2 градуса. Отсюда важна разводка, чтобы тепловые потоки через ноги (а у них меньше тепловое сопротивление, чем у корпуса) сообщалось с полигонами (хотя бы для шин питания) и через них сообщалось со средой, а дорожки к датчику должны быть длинные, чтобы уменьшить подвод тепла от остальной электроники.

На картинке пример, как НЕ НАДО делать: все скучковано, LDO размещен вплотную.
Изображение

А вот пример тестовой платы от ST: одинокий чип, все в земляных полигонах и тонкие длинные дорожки для коммуникации. Даже блокировочный конденсатор отнесен в сторону.
Изображение
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение vem566 »

Чет уже 2 страницы. Сколько читал тему, так и не понял, в чем проблема.
Читаем даташит и все предельно ясно. 4 последних бита - дробная часть, -1 при отрицательном значении.
Сразу нарвался на саморазогрев. Периодичность считывания больше минуты и проблема решена.
Как говорил мой первый учитель по программированию:- "Были бы данные, а сделать с ними можно все, что угодно!".
А что с ними нужно сделать, подробно в даташите.
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 589
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение linux_rulezz »

Для измерения температуры главного зеркала БТА я вот такие платки разработал (картинка).
Естественно, там не убогие DS18, у которых точность ±лапоть, а TSYS01.
Правда, когда эти датчики перемонтировали на "старое новое зеркало" в 2019 году, узнал, что существуют еще более точные, причем, немного дешевле (эти в 2014 году стоили около 710р за штуку, купили 100 датчиков).

Использование же DS18 осложняется еще огромным корпусом: если его использовать для примерного измерения температуры жидкости или чего-то еще с хорошей теплоемкостью и теплопроводностью, то ОК. А вот для газов не годится, т.к. придется его опрашивать очень-очень редко, иначе из-за саморазогрева фигню будет показывать, сколько ни старайся.
Для воздуха же нужно что-то очень мелкое, надежней всего - самые примитивные платиновые TRD, а то и вообще медные NTC… У NTC, кстати, после калибровки тоже точность примерно ±0.5℃ получается, как и у DS18.

Всяким "крутым цифровым" тоже верить не стоит: они даже в одной и той же серии умудряются врать, выходя за пределы, гарантированные даташитом.

В общем, таки для измерения температуры воздуха с точностью 0.5÷1% я бы посоветовал взять самые обычные платиновые TRD, они совсем недорогие: рублей по 300 на алике. И корпус миниатюрный, своей теплопроводностью не будет сказываться. Да и включать источник тока можно только на момент измерения.
Windows must die!
Аватара пользователя
Mursik
Мудрый кот
Сообщения: 1769
Зарегистрирован: Вт мар 28, 2023 21:17:15
Откуда: Universe

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Mursik »

[uquote="linux_rulezz",url="/forum/viewtopic.php?p=4776097#p4776097"]В общем, таки для измерения температуры воздуха с точностью 0.5÷1% я бы посоветовал взять самые обычные платиновые TRD, они совсем недорогие: рублей по 300 на алике. И корпус миниатюрный, своей теплопроводностью не будет сказываться.[/uquote]

На запрос TRD на Алике вываливает куча каких то запчастей на Тойоту. Если под платиновыми имеются в виду PT100, то на том же Алике они таки есть в ассортименте и не дорого, но размер в половину кацелярского карандаша миниатюрным как то язык не поворачивается... :?
I have a dream...¯\_(ツ)_/¯
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 595
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Thinnnfor »

Я не знаю ,где у вас там нагрев ......
погода сейчас на моём термометре , и в инете ...конечно не десятые градуса .. но и не единицы

Изображение Изображение

Добавлено after 11 minutes 45 seconds:
И да , датчик постоянно под питанием . Как то так !

Добавлено after 2 minutes 42 seconds:
И датчик с али экспрес
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 589
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение linux_rulezz »

Windows must die!
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 595
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение Thinnnfor »

Для PT100 всё намного сложнее

Добавлено after 3 minutes 25 seconds:
Тут есть аналоговый драйвер , и я его делал.
https://dzen.ru/a/Y9DrUOmsOTVF6Tv8
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 589
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: DS18b20 мороз с разрешением 0,1 градуса

Сообщение linux_rulezz »

Ничего сложного. Для точности в 0.5% достаточно встроенного АЦП. Только для использования в делителе нужно брать pt100, на pt100 слишком большой саморазогрев будет.
Windows must die!
Ответить

Вернуться в «Разные вопросы по МК»