Программирование ARM Примеры чтения датчика температуры DS18B20 Sat, December 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Примеры чтения датчика температуры DS18B20 Печать
Добавил(а) microsin   

Примеры работы с цифровым датчиком температуры DS18B20 [1]. Алгоритмы примеров проиллюстрированы в виде таблиц.

[Пример 1]

Это возможно самый простой пример. На шине только одна микросхема DS18B20, и она использует постоянно подключенное внешнее питание +3.3V. Мастер просто командой Convert T считывает температуру с текущей разрешающей способностью 12 бит, без необходимости выбора конкретной микросхемы (перед командой Convert T выдается команда Skip ROM).

Режим мастера(1) Данные(2) Комментарии
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx CCh Мастер выдает команду Skip ROM.
Tx 44h Мастер выдает команду Convert T.
Tx - Мастер выдерживает паузу 750, необходимую для завершения преобразования 12 бит. Как вариант, вместо ожидания он может определять момент завершения преобразования с помощью выдачи таймслотов чтения.
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx CCh Мастер выдает команду Skip ROM.
Tx BEh Мастер выдает команду Read Scratchpad.
Rx 2 байта данных Мастер считывает только первые 2 байта из памяти scratchpad, которые соответствуют регистру температуры, без проверки данных на корректность. Как вариант, можно проверить корректность чтения, если полностью прочитать все 9 байт из scratchpad, подсчитать контрольную сумму от первых 8 байт и сравнить её с 9-м байтом.

В этот момент можно просто перейти в начало алгоритма, чтобы в цикле продолжить чтение температуры с датчика 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.

Режим мастера(1) Данные(2) Комментарии
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx 55h Мастер выдает команду Match ROM.
Tx 64-bit ROM Code Мастер отправляет ROM-код DS18B20.
Tx 44h Мастер выдает команду Convert T.
Tx Линию DQ подтягивает к лог. 1 strong pullup. Мастер с помощью ключа на полевом транзисторе предоставляет для линии DQ достаточный ток на все время интервала преобразования (tCONV).
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx 55h Мастер выдает команду Match ROM.
Tx 64-bit ROM Code Мастер отправляет ROM-код DS18B20.
Tx BEh Мастер выдает команду Read Scratchpad.
Rx 9 байт данных Мастер полностью считывает всю память scratchpad, включая CRC. Затем мастер вычисляет CRC от первых принятых восьми байт данных, и сравнивает вычисленную CRC с девятым принятым байтом данных, где находится проверочная CRC. Если обе CRC совпали, то мастер продолжает работу; если нет, то операция чтения повторяется.

[Пример 3]

В этом примере на шине только одна микросхема DS18B20, и она использует паразитное питание. Мастер записывает регистры TH, TL и регистры конфигурации в DS18B20 scratchpad, затем считывает scratchpad и проверяет считанные данные путем вычисления CRC. Затем мастер копирует содержимое scratchpad в EEPROM.

Режим мастера(1) Данные(2) Комментарии
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx CCh Мастер выдает команду Skip ROM.
Tx 4Eh Мастер выдает команду Write Scratchpad.
Tx 3 байта данных Мастер передает 3 байта данных в память scratchpad (регистры TH, TL, и регистр конфигурации).
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx CCh Мастер выдает команду Skip ROM.
Tx BEh Мастер выдает команду Read Scratchpad.
Rx 9 байт данных Мастер полностью считывает всю память scratchpad, включая CRC. Затем мастер вычисляет CRC от первых принятых восьми байт данных, и сравнивает вычисленную CRC с девятым принятым байтом данных, где находится проверочная CRC. Если обе CRC совпали, то мастер продолжает работу; если нет, то операция чтения повторяется.
Tx Reset Мастер выдает импульс сброса (reset pulse).
Rx Presence DS18B20 отвечает импульсом присутствия (presence pulse).
Tx CCh Мастер выдает команду Skip ROM.
Tx 48h Мастер выдает команду Copy Scratchpad.
Tx Линию DQ подтягивает к лог. 1 strong pullup. Мастер с помощью ключа на полевом транзисторе предоставляет для линии DQ достаточный ток на все время как минимум 10 мс, на все время операции копирования данных из scratchpad в EEPROM.

Примечания:

(1) Tx означает, что мастер работает в режиме передачи (у мастера выход, у DS18B20 вход), Rx мастер работает в режиме приема (у мастера вход, у DS18B20 выход).
(2) Данные передаются младшим (LSB) битом вперед.

[Ссылки]

1. DS18B20: цифровой термометр с интерфейсом 1-Wire.
2220215DS18B20.zip - документация, примеры использования.

 

Добавить комментарий


Защитный код
Обновить

Top of Page