Як підключити бібліотеку до проекту

- налаштовуємо файл OWIPolled.h

- вибираємо реалізаціюOneWireінтерфейса-програмну

- задаємо тактову частоту мікроконтролера

#define CPU_FREQUENCY 16.000

- задаємо порт, до якого підключена OneWire шина

#define OWI_PORT PORTD //! 60 мкс, а пауза між тайм слотами> 1 мкс.

Для передачі нуля мікроконтролер «провалює» 1-Wire шину на час від 60 до 120 мкс. Потім «відпускає» її і перед записом наступного біта витримує паузу> 1 мкс.

Для передачі одиниці мікроконтролер «провалює» 1-Wire шину на час від 1 до 15 мкс, «відпускає» її і витримує паузу. Пауза повинна бути такою, щоб тривалість тайм слота була> 60 + 1 мкс.

Читання даних на 1-Wire шині

DS18B20 є підлеглим пристроєм і може передавати дані, тільки коли мікроконтролер формує на 1-Wire шині тайм слоти читання. Для формування тайм слота читання мікроконтролер «провалює» 1-Wire шину на час від 1 до 15 мкс, а потім «відпускає» її, передаючи управління станом 1-Wire шини датчику DS18B20. Якщо DS18B20 передає нуль, він утримує шину в «проваленому» стані (в стані логічного нуля) до кінця тайм слота. Якщо він передає 1, він залишає шину в «підтягнутому» стані.

Мікроконтролер може зчитувати дані датчика DS18B20 через 15 мкс після початку тайм слота читання.

Як підключити бібліотеку до проекту

Отже, у вас є загальне уявлення про те, як відбувається обмін даними по 1-Wire шині і можна перейти до наступної частини - як звернутися до DS18B20, як запустити процес температурного перетворення датчика, як рахувати з нього температуру, як встановити температурне дозвіл і т . Д.

Послідовність операцій для доступу до DS18B20 наступна:

2. Подача ROM команди

3. Подача функціональної команди DS18B20

ROM команди

З инициализацией все зрозуміло. Мікроконтролер провалює шину, відпускає і чекає відповіді підлеглого пристрою. Якщо до шини підключений хоч один справний датчик DS18B20, він відповість імпульсом присутності.

Отримавши імпульс присутності, мікроконтролер повинен послати по 1-Wire шині ROM команду. Є п'ять таких команд.

search rom (код команди 0xF0)

Ця команда дозволяє микроконтроллеру зчитувати 64-розрядний код підлеглого пристрою. Команда може використовуватися, якщо до шини підключений тільки одне 1-Wire пристрій.

Мікроконтролер видає команду read rom

Мікроконтролер приймає 8 байтів коду підлеглого пристрою

Для звернення до всіх 1-Wire пристроїв, підключеним до шини, використовується команда skip rom. Наприклад, цю команду можна застосовувати, щоб запустити температурне перетворення відразу всіх датчиків DS18B20.

Мікроконтролер видає команду skip rom

Мікроконтролер видає команду convert t

Мікроконтролер видає команду match rom

Мікроконтролер видає 8 байт коду підлеглого пристрою

Мікроконтролер видає функціональну команду.

alarm search (0xEC)

Дія цієї команди ідентично дії команди search rom, тільки відповідати на неї будуть підпорядковані пристрої з встановленим прапором аварії. Прапор аварії встановлюється в DS18B20 в разі перевищення температурних порогів, заданих регістрами Tl і Th.

функціональні команди

Внутрішня пам'ять

Термометр DS18B20 має в своєму складі 8 байт оперативної пам'яті (scratchpad, а далі ОЗУ) і 3 байта EEPROM.

Як підключити бібліотеку до проекту

Байти 0 і 1 - виміряна температура. Початкове значення температури (при подачі живлення) +85 градусів. Формат регістрів такий:

де S - знак температури (0 - позитивна температура, 1 - негативна), BIT10-BIT4 - ціла частина значення температури, BIT3-BIT0 - дрібна частина.

Негативна температура представлена ​​в додатковому коді. Переклад вмісту цих регістрів в більш зрозумілу форму буде описаний в наступній частині.

Байти 2 і 3 - верхній і нижній температурні пороги. Значення цих байтів задаються користувачем. Початкове значення цих байтів залежить від вмісту EEPROM пам'яті. Формат обох регістрів такий:

де S - знак температури (0 - позитивна температура, 1 - негативна), BIT6-BIT0 - ціла частина значення температурного порога.

Байт 4 - конфігураційний регістр. У ньому задається температурне дозвіл DS18B20. Початкове значення регістра залежить від вмісту EEPROM пам'яті. У новому датчику DS18B20 температурне дозвіл за замовчуванням 12 біт. Формат конфігураційного регістра такий:

де R1, R0 - біти, що задають температурне дозвіл термометра.

Як підключити бібліотеку до проекту

Як видно з таблиці, від заданого температурного дозволу залежить час перетворення.

Байти з 5 по 7 зарезервовані і не використовуються

Байт 8 - це CRC (циклічний надлишковий код). Значення CRC використовується для перевірки отриманих даних.

Тепер з приводу функціональних команд.

Ця команда запускає процес температурного перетворення датчика DS18B20. Значення температури зберігається в 0 і 1 байтах ОЗУ датчика. Час виконання перетворення залежить від встановленого в конфігураційному регістрі дозволу.

Якщо DS18B20 працює в режимі паразитного харчування, то після видачі команди convert t мікроконтролер повинен підключити 1-Wire шину до джерела живлення на час перетворення (дивись схему).

Якщо DS18B20 працює від зовнішнього джерела живлення, то після запуску температурного перетворення можна відстежувати, коли воно буде виконано. Для цього микроконтроллеру потрібно формувати на шині тайм слоти читання і чекати, коли датчик відповість йому одиницею.

Послідовність роботи в разі одного датчика:

Мікроконтролер видає команду skip rom

Мікроконтролер видає команду convert t

Мікроконтролер формує тайм слоти читання і очікує одиницю

write scratchpad (0x4E)

Ця команда дозволяє микроконтроллеру записувати в ОЗУ датчика DS18B20 три байта - Th, Tl і конфігураційний регістр (2, 3, 4 байти ОЗУ відповідно).

Послідовність роботи в разі одного датчика:

Мікроконтролер видає команду skip rom

Мікроконтролер видає команду write scratchpad

Мікроконтролер передає по черзі 3 байта - Th, Tl і конфігураційний регістр

read scratchpad (0xBE)

Ця команда дозволяє микроконтроллеру зчитувати вміст ОЗУ датчика DS18B20. Дані передаються молодшим бітом вперед з нульового по восьмий байт. Мікроконтролер може в будь-який момент видати на 1-Wire шину сигнал скидання і припинити прийом даних. Наприклад, якщо потрібні тільки перші два байта ОЗУ.

Послідовність роботи в разі одного датчика:

Мікроконтролер видає команду skip rom

Мікроконтролер видає команду read scratchpad

Мікроконтролер приймає 9 байт ОЗУ датчика

Послідовність роботи в разі одного датчика:

Мікроконтролер видає команду skip rom

За цією командою DS18B20 перезаписує 2, 3 і 4 байти ОЗУ (Tl, Th і конфігураційний регістр відповідно) значеннями, збереженими в EEPROM.

Мікроконтролер може відстежувати процес виконання цієї операції, формуючи на 1-Wire шині тайм слоти читання. Поки операція виконується, на шині буде логічний нуль, коли операція завершиться - логічна одиниця.

Операція recall E 2 виконується автоматично при включенні харчування датчика.

Послідовність роботи в разі одного датчика:

Мікроконтролер видає команду skip rom

Мікроконтролер видає команду rcall E 2

Мікроконтролер формує тайм слот читання і зчитує стан 1-Wire шини

read power supply (0xB4)

Надіславши цю команду і сформувавши після неї тайм слот читання, мікроконтролер може визначати, як живлять датчики DS18B20. Якщо вони запитані від сигнальної лінії (режим паразитного харчування), то під час тайм слота читання 1-Wire шина буде утримуватися в нулі, якщо використовується зовнішнє джерело живлення, шина буде підтягнута до одиниці.

Послідовність роботи в разі одного датчика:

Мікроконтролер видає команду skip rom

Мікроконтролер видає команду read power supply

Мікроконтролер формує тайм слот читання і зчитує стан 1-Wire шини

На цьому моє короткий виклад нудною теорії закінчується. У наступній частині ми перейдемо до Сі бібліотеці для 1-Wire і розбору коду проектів.

Переходимо від теорії до практики. Наше завдання - отримати від датчика DS18B20 значення поточної температури і вивести його на символьний lcd дисплей.

Як підключити бібліотеку до проекту

Опис 1-Wire бібліотеки

Для роботи з DS18B20 ми будемо використовувати злегка підправлену 1-Wire бібліотеку з аппноута AVR318. Ця бібліотека цікава тим, що вона не «заточена» під конкретні однопровідні пристрою і надає користувачеві два варіанти реалізації 1-Wire протоколу - програмну і апаратну. Програмну реалізацію можна використовувати з будь-яким мікроконтролером, апаратну - тільки з тим, у якого є в складі модуль UART / USART. У цій статті розібрана робота з програмною реалізацією 1-Wire протоколу.

Давайте коротко пробіжимося по структурі цієї 1-Wire бібліотеки.

OWISWBitFunction.h, OWISWBitFunction.c, OWIUARTBitFunction.c - в цих модулях описані низькорівневі функції - функція ініціалізації, функції запису 0 і 1, функція читання 1-Wire шини і функція детектування відгуку 1-Wire пристроїв.

Заголовки один, а сішний файлів два - один для програмної, інший для апаратної реалізації протоколу.

OWIHighLevelFunction.h, OWIHighLevelFunction.с - в цьому модулі описані високорівневі функції (це і так зрозуміло з назви) - функції запису команд, функція читання даних, функція пошуку 1-Wire пристроїв на шині.

OWIPolled.h - конфігураційний файл 1-Wire бібліотеки. У ньому задається варіант реалізації протоколу, тактова частота мікроконтролера, порт, до якого підключена 1-Wire шина, а також налаштування UART / USART модуля.

compilers.h - файл, що забезпечує сумісність бібліотеки з будь-яким з трьох компіляторів: IAR AVR, GNU GCC (WinAVR), CodeVision AVR.

OWIdefs.h - загальні визначення, які використовуються в обох реалізаціях. Визначення ROM команд, що повертаються функціями кодів і UART / USART патернів.

OWIdevicespecific.h - специфічні визначення для апаратної реалізації. Імена бітів і регістрів UART / USART модулів AVR мікроконтролерів.

OWIcrc.h, OWIcrc.c - модуль, в якому містяться функції обчислення циклічного надлишкового коду.

Підключення 1-Wire бібліотеки

Щоб ми могли використовувати 1-Wire бібліотеку, її потрібно підключити до проекту і налаштувати. Підключення бібліотеки до IAR `івської проекту складається з наступних кроків:

1. Переписуємо всі файли бібліотеки в папку проекту

2. Підключаємо сішние файли до проекту

3. Включаємо заголовні файли в main.c

Схожі статті