DS1820 - датчик температуры...
Сейчас выпускается более совершенный аналог: DS18S20. Старый вариант снят с производства. Новый датчик имеет укороченный корпус и расширенный диапазон температур (???). Общение с датчиком ведется по однопроводному интерфейсу. В микросхему встроен контроллер сети MicroLAN.
Пример чтения температуры с датчика в сети MicroLAN:
Сбрасываем все устройства сети.
Пропускаем импульс присутствия.
Выводим команду "Совпадение ПЗУ" (команда 055h).
Выводим 8-байтовый сетевой номер (ПЗУ) интересуемого датчика.
Выводим команду "Преобразование температуры" (команда 044h).
Ждем, пока температура преобразовывается (в худшем случае 0.5 секунды).
Сбрасываем все устройства сети.
Выводим команду "Совпадение ПЗУ" (команда 055h).
Выводим 8-байтовый сетевой номер интересуемого датчика.
Выводим команду "Чтение блокнотной памяти" (команда 0BEh).
Считываем 9 байт (блокнотная память).
Проверяем контрольную сумму у считанных данных (восьмой байт - CRC).
Если на линии всего одно устройство, можно упростить:
Сбрасываем все устройства сети.
Пропускаем импульс присутствия.
Выводим команду "Пропуск ПЗУ" (команда 0CCh).
Выводим команду "Преобразование температуры" (команда 044h).
Ждем, пока температура преобразовывается (в худшем случае 0.5 секунды).
Сбрасываем все устройства сети.
Выводим команду "Пропуск ПЗУ" (команда 0CCh).
Выводим команду "Чтение блокнотной памяти" (команда 0BEh).
Считываем 9 байт (блокнотная память).
Проверяем контрольную сумму у считанных данных (восьмой байт - CRC).
Карта блокнотной памяти DS1820:
Блокнотная память
Номер байта
ТЕМПЕРАТУРА младший
байт
0
ТЕМПЕРАТУРА старший
байт
1
TH/пользовательский байт
1
2
TL/пользовательский байт
2
3
ЗАРЕЗЕРВИРОВАН
4
ЗАРЕЗЕРВИРОВАН
5
COUNT REMAIN
6
COUNT PER °C
7
CRC
8
После получения датчиком команды "Преобразование температуры" происходит измерение температуры путем отсчета количества циклов прохода генератора с малым температурным коэффициентом за время работы генератора с большим температурным коэффициентом (очень запутанно и несовсем точно). Результат сохраняется в блокнотной памяти, которую мы считываем после измерения.
Единица в 16-битном числе "ТЕМПЕРАТУРА" соответствует 0.5 градуса. То есть значение 25 будет соответствовать 12.5 °C. Чтобы получить реальную температуру, необходимо это число умножить на 5. Тогда младшая цифра в десятичной системе будет отображать десятые доли температуры. В этом случае 25*5=125, младшая цифра - десятые, следовательно температура будет 12.5 °C. Для вычисления температуры без десятых долей необходимо разделить число на 2. Тогда 25/2=12 °C. Во всех этих случаях разрешение останется прежним - 0.5 градуса.
Чтобы добиться разрешения (но не точности!) 0.1, необходимо произвести вычисления используя регистры "COUNT REMAIN" и "COUNT PER °C". Вот формула:
Отрицательные температуры записываются в дополнительном коде, поэтому при вычислениях необходимо использовать процедуры, работающие со знаковыми числами. Если это сложно, то можно на время менять знак.
Процедуры чтения температуры с датчиков DS1820 в разделе Исходники.
------------------------