Примеры чтения датчика температуры DS18B20 |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Примеры работы с цифровым датчиком температуры DS18B20 [1]. Алгоритмы примеров проиллюстрированы в виде таблиц. [Пример 1] Это возможно самый простой пример. На шине только одна микросхема DS18B20, и она использует постоянно подключенное внешнее питание +3.3V. Мастер просто командой Convert T считывает температуру с текущей разрешающей способностью 12 бит, без необходимости выбора конкретной микросхемы (перед командой Convert T выдается команда Skip ROM).
В этот момент можно просто перейти в начало алгоритма, чтобы в цикле продолжить чтение температуры с датчика DS18B20. Здесь показаны только основные функции. Код библиотеки целиком см. в examples\Nordic.zip из архива [2]. typedef uint8_t ScratchPad[9]; /**@brief Процедура выполняет чтение памяти scratchpad
*/
void ds18b20_readScratchPad(uint8_t *scratchPad, uint8_t fields) { ds18b20_reset(); // Reset Pulse ds18b20_send_byte(0xCC); // выдача команды Skip ROM ds18b20_send_byte(0xBE); // выдача команды Read Scratchpad for(uint8_t i=0; i < fields; i++) { scratchPad[i] = OneWire_read(); } // Этот сброс выполнять не обязательно: //ds18b20_reset(); } /**@brief Подпрограмма выполняет запрос преобразования температуры
*/
void ds18b20_requestTemperatures(void) { ds18b20_reset(); ds18b20_send_byte(0xCC); // выдача команды Skip ROM ds18b20_send_byte(0x44); // выдача команды Convert T } /**@brief Функция возвращает сырой результат чтения температуры
*/
uint32_t ds18b20_get_temp_method_1(void) { ds18b20_requestTemperatures(); ScratchPad scratchPad; ds18b20_readScratchPad(scratchPad, 2); int16_t rawTemperature = (((int16_t)scratchPad[TEMP_MSB]) << 8) | scratchPad[TEMP_LSB]; uint32_t temp = 625 * rawTemperature; return temp; } Код, который нужно вставить в тело цикла main: uint32_t temp = ds18b20_get_temp_method_1(); umsg("%u.%04u\n", temp/10000, temp%10000); [Пример 2] В этом примере несколько DS18B20 на одной шине, и для них используется паразитное питание. Мастер шины инициирует температурное преобразование для определенной микросхемы DS18B20, затем считывает её память scratchpad, и проверяет считываемые данные путем вычисления и проверки CRC.
[Пример 3] В этом примере на шине только одна микросхема DS18B20, и она использует паразитное питание. Мастер записывает регистры TH, TL и регистры конфигурации в DS18B20 scratchpad, затем считывает scratchpad и проверяет считанные данные путем вычисления CRC. Затем мастер копирует содержимое scratchpad в EEPROM.
Примечания: (1) Tx означает, что мастер работает в режиме передачи (у мастера выход, у DS18B20 вход), Rx мастер работает в режиме приема (у мастера вход, у DS18B20 выход). [Ссылки] 1. DS18B20: цифровой термометр с интерфейсом 1-Wire. |