Похожие презентации:
q
1.
Программирование микроконтроллеровЛекция 3.
Работа с датчиком по интерфейсу 1-Wire
Доцент ОИТ ИШИТР Мыцко Евгений Алексеевич
evgenvt@tpu.ru
https://vk.com/evgentomsk70
Томск 2023
2. Датчик температуры
DS18B20 – цифровой датчик температуры, поддерживающий 9–12-битноепреобразование температуры.
2
3. Схема подключения датчика
34. Электрические характеристики
45. Электрические характеристики
В состав датчика входит схема питания (Parasite Power Circuit), 64-битнаяпамять ROM для хранения кода (адреса) устройства, схема управления
(Memory Control Logic), память для хранения данных (Scratchpad):
температуры, настроек, граничных значений температуры, контрольной суммы
CRC8; измеритель температуры (Temperature Sensor), модуль расчета CRC8
(8-BIT CRC Generator), регистры (EEPROM) для сохранения граничных
значений температуры (Alarm High Trigger и Alarm Low Trigger), регистр для
сохранения настроек (Configuration Register).
5
6. Память датчика
Для хранения температуры и настроек используется память (Scratchpad)размером 9 байт.
- Temperature LSB – младший байт значения температуры;
- Temperature MSB – старший байт значения температуры;
- Tн – верхняя граница температуры для сигнала alarm;
- TL – нижняя граница температуры для сигнала alarm;
- Configuration Register – регистр настроек;
- CRC – контрольная сумма для проверки целостности пакета;
- Reserved – зарезервированное поле производителем.
6
7. Структура регистров датчика
Температура хранится в младших двух байтах памяти данных (BYTE 0 и BYTE 1).Формат регистра температуры представлена на рис. ниже. Старшие 5 бит
отводятся под знак, остальные 11 бит для кодирования температуры.
7
8. Структура регистров датчика
Формат регистров верхней и нижней границ TH и TL показан на рис. ниже.Старший бит отводится под знак, остальные 7 бит под кодирование температуры.
При сравнении температуры с граничными значениями TH и TL используются биты
с 4 по 11 регистра температуры, т.к. регистры TH и TL хранят только 8 бит. При
превышении верхней границы TH или понижения температуры ниже границы TL
датчик генерирует сигнал выхода за установленные границы (alarm flag).
8
9. Структура регистров датчика
Формат регистра настроек представлен на рис. нижеДля настроек используются биты 5 и 6, которыми задается разрешающая
способность АЦП (от 9 до 12 бит). На рис. ниже приведены значения разрядности
АЦП и времени преобразования.
9
10. Контроль целостности данных
Для контроля целостности данных используется контрольная сумма CRC8.CRC8 рассчитывается для байтов 0–7 памяти данных на основе образующего
полинома X8+ X5+ X4+1. Схема расчёта CRC8 представлена на рис. ниже. Данные
бит за битом поступают на схему сложения по модулю два, в которой логические
элементы расставлены согласно степеням образующего полинома. После
обработки всех байт данных в регистре CRC будет храниться финальная
контрольная сумма CRC8.
Для проверки целостности данных необходимо вычислить CRC8 для принятых 8
байт памяти данных и сравнить полученную CRC8 с принятой CRC8 вместе с
сообщением.
Также можно рассчитать CRC8 для всех 9 байт данных, вместе с полученной
CRC. Если результат будет равен 0, то сообщение принято без искажений.
10
11. Память ROM
Для хранения кода устройства используется память ROM, структура которойпредставлена на рис. ниже. В младшем байте хранится 8-битный код семейства в
виде значения 28h. Затем от младших к старшим битам идет 48-битный серийный
номер, а в старшем байте хранится 8-битная CRC, вычисленная для младших 56
бит. ROM-код используется для идентификации устройства в сети.
Если устройство единственное в сети, то существует команда (0x33),
позволяющая считать ROM-код устройства. Также, при наличии только одного
устройства, можно использовать широковещательную команду (0xCC) для чтения
данных с устройства, что позволяет не использовать ROM-код устройства.
Если устройств в сети несколько, то необходимо либо предварительно узнать
код каждого устройства (например, включая устройства по одному и читая их
коды в память), либо использовать команду поиска кодов (0xF0) и специальный
алгоритм считывания кодов устройств, основанный на том, что доминантным
является низкий уровень сигнала на шине. Таким образом, если какие-то
устройства будут выставлять на шине низкий уровень, а какие-то — высокий, то
«победят» те, кто выставлял низкий уровень, и, соответственно, на шине
установится низкий уровень.
11
12.
КомандаКод команды
(hex)
Search ROM
F0
Read ROM
33
Match ROM
55
Skip ROM
CC
Alarm Search
EC
Convert T
44
Write Scratchpad
4E
Read Scratchpad
BE
Copy Scratchpad
48
Recall E2
B8
Read Power
Supply
B4
Описание
Поиск ROM-кодов подключенных устройств. Данная команда должна
работать в связке со специальным алгоритмом поиска ROM-кодов.
Чтение ROM-кода, если только одно устройство присутствует в сети. При
наличии нескольких устройств использовать не рекомендуется, т.к. будет
возникать коллизия.
Адресация устройства. За этой командой должен следовать ROM-код
устройства для установления связи с ним.
Широковещательная команда всем устройствам. После данной команды
можно запустить преобразование температуры для всех датчиков
одновременно. Если в сети есть только одной устройство, то после данной
команды можно считать данные (Scratchpad) с устройства.
Команда, аналогичная Search ROM, только для устройств, в которых
установлен Alarm flag.
Команда преобразования температуры. После этой команды можно
считать температуру командой Read Scratchpad (BE)
Команда записи данных в scratchpad. После нее можно последовательно
записать данные в 3 регистра: TH, TL, Configuration
Команда чтения данных из scratchpad. Читает все 9 байт памяти
Scratchpad вместе с контрольной суммой CRC8
Команда копирования данных из Scratchpad в ПЗУ EEPROM для
сохранения значений TН, TL и настроек после сброса питания
Команда копирования данных из EEPROM в Scratchpad. Главное
устройство может контролировать процесс загрузки в Scratchpad из ПЗУ
EEPROM, считывая состояние шины после этой команды. Если на шине
логический «0» - это значит идет операция перезагрузки, если логическая
«1» - операция выполнена.
Команда чтения способа питания датчиков. Если после подачи команды на
шине присутствует логический «0» - это значит, что DS18B20 использует
паразитное питание. Иначе DS18B20 использует внешнее питание.12
13. Программирование DS18B20
• Инициализация (reset)uint8_t ds18b20_Reset(void)
{
uint16_t status;
GPIOB->BSRR = GPIO_BSRR_BR11;
DelayMicro(480);
GPIOB->BSRR = GPIO_BSRR_BS11;
DelayMicro(60);
status = GPIOB->IDR & GPIO_IDR_IDR11;
DelayMicro(420);
return (status ? 1 : 0);
}
// set 0 to PIN11
// delay 480 mcs
// set 1 to PIN11
// delay 60 mcs
// check value on PIN11
// delay 420 mcs
13
14. Программирование DS18B20
• Чтение бита с шиныuint8_t ds18b20_ReadBit(void)
{
uint8_t bit = 0;
GPIOB->BSRR = GPIO_BSRR_BR11;
DelayMicro(1);
GPIOB->BSRR = GPIO_BSRR_BS11;
DelayMicro(14);
bit = (GPIOB->IDR & GPIO_IDR_IDR11 ? 1 : 0);
DelayMicro(45);
return bit;
}
// set 0 to PIN11
// delay 1 mcs
// set 1 to PIN11
// delay 14 mcs
// check value on PIN11
// delay 45 mcs
14
15. Программирование DS18B20
• Запись бита в шинуvoid ds18b20_WriteBit(uint8_t bit)
{
GPIOB->BSRR = GPIO_BSRR_BR11;
DelayMicro(bit ? 1 : 60);
GPIOB->BSRR = GPIO_BSRR_BS11;
DelayMicro(bit ? 60 : 1);
}
// set 0 to PIN11
// if bit is 1 delay 1mcs else 60mcs
// set 1 to PIN11
// if bit is 1 delay 60mcs else 1mcs
15
16. Программирование DS18B20
• Чтение байта данныхuint8_t ds18b20_ReadByte(void)
{
uint8_t data = 0;
for (uint8_t i = 0; i <= 7; i++)
data |= ds18b20_ReadBit() << i;
return data;
}
// read bit by bit from sensor
Запись байта данных
void ds18b20_WriteByte(uint8_t data)
{
for (uint8_t i = 0; i < 8; i++)
{
ds18b20_WriteBit(data >> i & 1);
DelayMicro(5);
}
}
// write bit by bit to sensor
// delay for protection
16
17. Программирование DS18B20
• Инициализация порта Bvoid ds18b20_PortInit(void)
{
RCC->APB2ENR |= 0x00000008;
GPIOB->CRH |= 0x00003000;
GPIOB->CRH |= 0x00004000;
GPIOB->CRH &= ~0x00008000;
}
• Выбор устройства по адресу
// Port B clock enabled
// Output Mode, max speed 50MHz
// General purpose output Open-drain
// General purpose output Open-drain
void ds18b20_MatchRom(uint8_t* address)
{
uint8_t i;
ds18b20_Reset();
ds18b20_WriteByte(0x55);
// send match rom command to sensor
for(i=0;i<8;i++)
{
ds18b20_WriteByte(address[i]);
// send address to match with sensor address
}
}
17
18. Программирование DS18B20
Запуск конвертации температуры
void ds18b20_ConvertTemp(uint8_t mode, uint8_t* address)
{
ds18b20_Reset();
ds18b20_MatchRom(address);
//send match code command with address
ds18b20_WriteByte(0x44);
//send convert temp command
}
Чтение памяти данных (Scratchpad)
void ds18b20_ReadStratchpad(uint8_t mode, uint8_t *Data, uint8_t* address)
{
uint8_t i;
ds18b20_Reset();
ds18b20_MatchRom(address);
//send match code command with address
ds18b20_WriteByte(0xBE);
//send read scratchpad command
for(i = 0;i < 9; i++)
{
Data[i] = ds18b20_ReadByte();
//read scratchpad byte by byte
}
}
18
19.
Программирование микроконтроллеровЛекция 3.
Работа с датчиком по интерфейсу 1-Wire
Доцент ОИТ ИШИТР Мыцко Евгений Алексеевич
evgenvt@tpu.ru
https://vk.com/evgentomsk70
Томск 2023
20. Работа с датчиком DS18B20
Взаимодействие с датчиком DS18B20 начинается с процедуры инициализации,состоящей из импульса сброса (мин. 480 мкс) от мастера (Master Reset Pulse), за
которым, после ожидания 15-60 мкс, следует импульс присутствия (60-240 мкс)
от датчика DS18B20 (DS18B20 Presence).
20
21. Запись данных в DS18B20
Чтобы записать «0», мастер шины должен удерживать шину на низком уровне втечение не менее 60 мкс (время слота). Затем мастер должен отпустить шину.
После восстановления уровня сигнала до «1» в течение 1 мкс, можно начинать
следующий временной слот передачи.
Чтобы записать «1», мастер шины должен удерживать шину на низком уровне в
течение 1 мкс. Затем мастер должен отпустить шину до начала следующего
временного слота.
21
22. Чтение данных из DS18B20
Временной слот чтения инициируется ведущим устройством, притягивающимшину 1-Wire к «0» в течение как минимум 1 мкс, с последующим отпусканием
шины к «1». После этого, DS18B20 начинает передачу «1» или «0» по шине.
DS18B20 передает «1», отпуская шину к высокому уровню и передает «0»,
притягивая шину к низкому уровню и удерживания состояния «0» в течение не
более 14 мкс.
22