Файл: Лабораторная работа 2 Работа с цифровым датчиком по интерфейсу 1Wire.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 55
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа 2 Работа с цифровым датчиком по интерфейсу 1-Wire
Цель работы: получить практические навыки работы с интерфейсом 1-Wire на основе CMSIS (Common Microcontroller Software Interface Standard). Реализовать функции записи команд и чтения данных по интерфейсу 1-Wire с датчика температуры DS18B20.
Постановка задачи 1. Разработать библиотеку для работы с датчиком DS18B20. Для работы с датчиком также использовать ранее разработанные библиотеки в предыдущих лабораторных.
-
Вывести в отладчике Keil температуру с 2-х датчиков, а также их значения TH и TL. -
Изменить разрядность АЦП одного из датчиков с 12 на 9 бит, а также его значения TH и TL на произвольные путем обновления регистра настроек. -
Реализовать команду Copy Scratchpad для одного из датчиков DS18B20. Проверить правильность работы команды Copy Scratchpad после сброса питания (записанные значения TH и TL и настройки должны сохраниться в энергонезависимой EEPROM). -
Реализовать мигание светодиодом при превышении температуры 29 градусов любого из датчиков. Задержка задается системным или периферийным таймером.
Содержание отчета
-
Цель работы; -
Постановка задачи; -
Листинг программ(ы); 4) Результаты работы программы; 5) Выводы.
Методические указания
Полная версия документации к датчику DS18B20 доступна в файлах лабораторной работы.
DS18B20 – цифровой датчик температуры, поддерживающий 9–12-битное преобразование температуры. Структурная схема датчика показана на рис. 1.
Рис. 1. Структурная схема DS18B20
В состав датчика входит схема питания (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).
Память для хранения данных (Scratchpad)
Для хранения температуры и настроек используется память размером 9 байт, структура которой представлена на рис. 2.
Рис. 2. Память для хранения температуры и настроек (Scratchpad) Рассмотрим структуру основных регистров.
Температура хранится в младших двух байтах памяти данных. Формат регистра температуры представлена на рис. 3. Старшие 5 бит отводятся под знак, остальные 12 бит для кодирования температуры.
Рис. 3. Формат регистра температуры Примеры значений температуры представлены на рис. 4.
Рис. 4. Примеры значений температуры
Формат регистров верхней и нижней границ TH и TL показан на рис. 5. Старший бит отводится под знак, остальные 7 бит под кодирование температуры. При сравнении температуры с граничными значениями TH и TL используются биты с 4 по 11 регистра температуры, т.к. регистры TH и TL хранят только 8 бит. При превышении верхней границы TH или понижения температуры ниже границы TL датчик генерирует сигнал выхода за установленные границы (alarm flag).
Рис. 5. Формат регистров TH и TL Формат регистра настроек предсатвлен на рис. 6.
Рис. 6. Формат регистра настроек
Для настроек используются биты 5 и 6, которыми задается разрешающая способность АЦП (от 9 до 12 бит). На рис. 7 приведены значения разрадности АЦП и времени преобразования.
Рис. 7. Значения разрядности АЦП и времени преобразования Для контроля целостности данных используется контрольная сумма CRC8. CRC8 рассчитывается для байтов 0–7 памяти данных на основе образующего полинома X8+ X5+ X4+1. Схема расчёта CRC8 представлена на рис. 8. Данные бит за битом поступают на схему сложения по модулю два, в которой логические элементы расставлены согласно степеням образующего полинома. После обработки всех байт данных в регистре CRC будет храниться финальная контрольная сумма CRC8.
Рис. 8. Схема расчёта CRC8
Для проверки целостности данных необходимо вычислить CRC8 для принятых 8 байт память данных и сравнить полученную CRC8 с принятой CRC8 вместе с сообщением.
Также можно расчитать CRC8 для всех 9 байт данных, вместе с полученной CRC. Если результат будет равен 0, то сообщение принято без искажений.
Память ROM для хранения кода устройства
Для хранения кода устройства используется память ROM, структура которой представлена на рис. 9. В младшем байте хранится 8-битный код семейства в виде значения 28h. Затем от младших к старшим битам идет 48-битный серийный номер, а в старшем байте хранится 8-битная CRC, вычисленная для младших 56 бит.
Рис. 9. Формат кода устройства Идентификация устройств в сети. Алгоритм поиска адресов.
ROM-код используется для идентификации устройства в сети.
Если устройство единственное в сети, то существует команда (0x33), позволяющая считать ROM-код устройства. Также, при наличии только одного устройства, можно использовать широковещательную команду
(0xCC) для чтения данных с устройства, что позволяет не использовать ROM-код устройства.
Если устройств в сети несколько, то необходимо либо предварительно узнать код каждого устройства (например, включая устройства по одному и читая их коды в память), либо использовать команду поиска кодов (0xF0) и специальный алгоритм считывания кодов устройств, основанный на том, что доминантным является низкий уровень сигнала на шине. Таким образом, если какие-то устройства будут выставлять на шине низкий уровень, а какието — высокий, то «победят» те, кто выставлял низкий уровень, и, соответственно, на шине установится низкий уровень.
Идея работы алгоритма поиска устройств заключается в следующем.
После того, как мастер отправляет в сеть команду 0xF0, все Slave-устройства начинают обмениваться с мастером информацией по следующему алгоритму: 1) Slave передаёт мастеру младший бит ROM;
-
Slave передаёт мастеру инверсную копию младшего бита ROM и ждёт ответ от мастера; -
Если мастер присылает в ответ тот же самый бит, который Slave посылал ему в пункте 1, то Slave повторяет шаги 1,2 для следующего бита ROM, в противном случае Slave прекращает обмен данными с мастером.
Со стороны мастера, при считывании битов от slave-устройств, возможны следующие ситуации:
-
Мастер считывает с шины 01. Это означает, что все устройства, участвующие в обмене данными, послали ему биты 01 (текущий бит ROM = 0, его инверсная копия = 1); -
Мастер считывает с шины 10. Это означает, что все устройства, участвующие в обмене данными, послали ему биты 10 (аналогично первому пункту, только наоборот); -
Мастер считывает с шины 00. Это означает, что какие-то устройства послали ему 01, а какие-то 10 (в обоих случаях победили те, кто посылал нули). Это означает, что перед мастером находится узел двоичного дерева, то есть на этой ветви существуют такие ROM-адреса, у которых следующий бит равен нулю и такие, у которых следующий бит равен единице; -
Есть ещё вариант, когда мастер считывает с шины 11. Казалось бы, такая ситуация является невероятной, однако она тоже возможна, например, если устройства, с которыми мастер решил продолжить обмен, отключились.
Таким образом, ответ от мастера является выбором направления обхода дерева. Отправляя в шину в качестве ответа ноль или единицу, мастер как раз и решает с какой группой устройств он продолжает работу и по какой ветке он дальше пойдёт. На рис. 10 представлено дерево поиска ROM-кодов устройств для 4-х датчиков. Идея поиска адресов заключается в обходе дерева и побитном считывании адреса каждого датчика в память устройствамастера. Пока все ведомые устройства (датчики) отправляют свои одинаковые первый и второй бит (инверсию первого), т.е. передают одинаковую часть адреса, мастер считывает адрес по одной ветке (байт 0x28). После того, как ведомые устройства пришлют разные биты, например, два устройства пришлют «0» и два пришлют «1», осуществляется ветвление, и мастер продолжает обмен с устройствами, приславшими «0» (т.к. в 1-Wire «0» является доминирующими), запоминая номер бита, в котором произошло ветвление. Если после ветвления, оставшиеся устройства присылают разные биты, то ветвление осуществляется снова, запоминается номер бита ветвления, и обмен продолжается с устройством, приславшим «0». После чего, мастер считывает бит за битом адрес оставшегося ведомого устройства.
Согласно рис. 10 это будет устройство с адресом DE00000BC13FA028.
Рис. 10. Дерево поиска ROM-кодов устройств
После получения первого адреса, обхода дерева начинается заново с самого младшего бита. Получив общую часть адреса и осуществив переход с сторону «0» на 9-м бите, осуществляется переход в сторону «1» на 10-м бите, т.к. этот номер бита был запомнен как последнее ветвление. Считав адрес второго устройства, мастер получит F200000BC1999228, , переместит точку ветвления на 9-й бит, после чего продолжит считывание с нулевого бита. При третьем считывании адреса, мастер на 9-бите осуществит переход в сторону «1», а затем на 10-м перейдет в сторону «0» и считает адрес третьего устройства 4C00000D3FFD3128, запомнив 10й-бит, как место ветвления. При считывании четвертого адреса, мастер, дойдя до первого ветвления (9-й бит), переходит в сторону «1», на втором ветвлении (10-й бит) также переходи в сторону «1» и считывает побитно адрес четвертого устройства. Считанные адреса можно сохранять в массив (ROM_code) специальной структуры, созданной для каждого датчика (рис. 11).
Рис. 11. Считанные адреса двух датчиков
Описание команд датчика
В таблице 1 приведено описание команды для работы с датчиком по интерфейсу 1-Wire.
Таблица 1. Описание команд
Команда | Код команды (hex) | Описание |
Search ROM | F0 | Поиск ROM-кодов подключенных устройств. Данная команда должна работать в связке со специальным алгоритмом поиска ROM-кодов. |
Read ROM | 33 | Чтение ROM-кода, если только одно устройство присутствует в сети. При наличии нескольких устройств использовать не рекомендуется, т.к. будет возникать коллизия. |
Match ROM | 55 | Адресация устройства. За этой командой должен следовать ROM-код устройства для установления связи с ним. |
Skip ROM | CC | Широковещательная команда всем устройствам. После данной команды можно запустить преобразование температуры для всех датчиков одновременно. Если в сети есть только одной устройство, то после данной команды можно считать данные (Scratchpad) с устройства. |
Alarm Search | EC | Команда, аналогичная Search ROM, только для устройств, в которых установлен Alarm flag. |
Convert T | 44 | Команда преобразования температуры. После этой команды можно считать температуру командой Read Scratchpad (BE) |
Write Scratchpad | 4E | Команда записи данных в scratchpad. После нее можно последовательно записать данные в 3 регистра: TH, TL, Configuration |
Read Scratchpad | BE | Команда чтения данных из scratchpad. Читает все 9 байт памяти Scratchpad вместе с контрольной суммой CRC8 |
Copy Scratchpad | 48 | Команда копирования данных из Scratchpad в ПЗУ EEPROM для сохранения значений TН, TL и настроек после сброса питания |
Recall E2 | B8 | Команда копирования данных из EEPROM в Scratchpad. Главное устройство может контролировать процесс загрузки в Scratchpad из ПЗУ EEPROM, считывая состояние шины после этой команды. Если на шине логический «0» - это значит идет операция перезагрузки, |