Микроконтроллеры | Библиотека для DS1621 - разрешение 0.1 °С |
|
---|---|---|
Не знал, куда кинуть - то ли в Удачный опыт, то ли сюда - но тут ближе к теме. Столкнулся с необходимостью измерения температуры с высоким разрешением, решил использовать упомянутый в теме датчик. Нижеприведенная библиотека позволяет читать данные с дополнительных регистров датчика (в соответсвии с datasheet на него) и вычислять температуру с высоким разрешением. Функция возвращает значение температуры(целое число), умноженное на 10 (сотые доли не округляются, а отбрасываются). Т.е. при температуре 37.5 °С функция вернет 375. Написано для CodeVision. Буду рад, если кому-то пригодится. Заголовочный файл: /* 1621.h */ /* */ #ifndef _1621_INCLUDED_ #include <i2c.h> #pragma used+ void ds1621_init(void); #pragma used- #endif /* end of file */ Библиотечный файл:
1621.lib /* ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ */ while ((ds1621_get_status(chip) & 0x80)==0); Впрочем, читать регистр статуса можно и самостоятельно, без библиотеки, void ds1621_init(void) i2c_start(); void ds1621_start(void) int ds1621_read() //читаем count_per_c //читаем count_remain //читаем старший байт температуры b=read_temp-0.25+(cpc-cr)/cpc; //вычисляем температуру return b*10; /* end of file */ PS: Как есть может работать только с одним датчиком (с нулевым адресом). Но добавить передачу адреса датчика не так уж и сложно. |
|
|
Спасибо! Сохранил в закрома (или в анналы ), когда-нибудь наверняка пригодится |
|
|
DS1621 точность если не ошибаюсь 0,5 градуса с погрешностью (плюс минус 1) снимать с него десятые доли бездумно, все равно неправильно будет ))) |
|
|
Если ввести внешнюю поправку (калибровку), думаю, будет все в порядке. Там наверняка разброс параметров такой, а относительное изменение точности по диапазону в процессе работы небольшое. |
|
|
В моем случае было важно отслеживать относительное изменение температуры (для правильной работы алгоритма регулирования) С уважением, Николай. |
|
|
Николай Брагин: b=read_temp-0.25+(cpc-cr)/cpc; //вычисляем температуру |
|
|
Честно говоря, не озадачивался. Так как использовал форматированный вывод, и в последовательный порт, и на LCD. |
|
|
Понимаю, что уже не нужно ... но может кто поиском себе найдет. При 12 битовой точности получаем температуру в 0,0625 градусах, что бы получить с точностью до десятых нам нужно умножить полученное число на 0,625 . ds_data/2 + ds_data/8 = (4*ds_data)/8 + ds_data/8 = ds_data * 5/8 = ds_data*0.625 Если используете другое расширение, то нужно подобрать другие сдвиги - пробовал - получается. Если работает с отр. температурами, то нужно запоминать и восстанавливать знак (+/-) числа. |
|
|
AndryG: |
|
|
Здорово! Спасибо за ссылку! |
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |