- •18 Модуль компаратора.
- •19 Опорна напруга для компараторів.
- •Процессор, микропроцессор, оэвм, сигнальный процессор.
- •Особенности микроконтроллеров Microchip средней серии.
- •Составление программ.
- •Особенности условных операторов
- •Программирование циклов
- •Организация памяти данных.
- •Косвенная адресация.
- •Использование макросов.
- •Команда пересылки регистр-регистр.
- •Особенности организации памяти в микроконтроллерах расширенной серии.
- •Параллельные порты ввода - вывода.
- •Особенности микроконтроллеров расширенного семейства:
- •Организация памяти программы.
- •Варианты работы с памятью:
- •Таймер 0.
- •Прерывания.
- •Особенности системы прерываний расширенного семейства:
- •Таймеры 1 и 2.
- •Общие сведенья о телемеханике.
- •Способы кодирования.
- •Токовая петля (интерфейс).
- •Синхронные интерфейсы.
- •Новые микроконтроллеры.
- •Микроконтроллеры расширенного семейства.
- •Дискретные датчики.
- •Дискретные нагрузки.
- •Элементы индикации:
- •Динамическая индикация.
- •Лекція на тему «Альтернативи»
- •Приклад написання програми
- •Загальна інформація про цикл.
- •Види циклів і їх характеристика.
- •Приклад програми
- •1. Загальна інформація про цикл.
- •2. Види циклів і їх характеристика.
- •2.1. Цикл з лічильником
- •2.2 Цикл з виходом з середини
- •2.3 Цикл з перед умовою
- •2.4 Цикл з пост умовою
- •3. Приклад роботи циклу
- •3.2 Приклад 2
Лекція № 12
Тема: Блоки компараторів і джерела
Викладач: Костенко Д.В.
dmi.kostenko@gmail.com
Мікропроцесорна техніка: Підручник/ Ю.І.Якименко, Т.О.Терещенко, Є.І.Сокол, В.Я.Жуйков, Ю.С.Петергеря; За ред.. Т.О.Терещенко.-2-ге вид., переробл. Та доповн.- К.:ІВЦ "Видавництво «Політехника»"; "Кондор", 2004.-440 с
Предко М. Справочник по PIC-микроконтроллерам|: Пер. з|із| англ|.-М.: ДМК Прес, 2004-512 с|із|.,іл.
Однокристальні 8-розрядні FLASH| CMOS| мікроконтролери|мікроконтроллери| компанії Microchip| Technology| Incorporated|. –технічна| документація на мікроконтролери|мікроконтроллери| PIC16F873|, PIC16F874|, PIC16F876|, PIC16F877| –М|.:ООО "Мікро-чип", 2002 грама.-170 с., іл.
MPASM – Руководство пользователя. Техническая документация на асемблер для микроконтроллеров компании Microchip Technology Incorporated М.: ООО "Микро-Чип", 2001. - 61 с., ил.
Мікропроцесорна техніка: навч. посібник/В.В. Ткачов, Г. Грулер, Н. Нойбергер та ін. – Д.: Національний гірничий університет, 2012. – 188 с.
18 Модуль компаратора.
Модуль компараторів містить два аналогових компаратори, виводи яких мультіпліцировани з каналами вхіда/вихіда. Вихід інтегрованого джерела опорного напруг може бути підключений на вхід компараторів.
У регістрі CMCON перебувають біти керування модулем компараторів.
Структурна схема модуля компараторів показана на малюнку 20-1.
|
|
19 Опорна напруга для компараторів.
Допускається використання зовнішнього або внутрішнього джерела опорної напруги для компараторів (визначається режимом роботи модуля компараторів). Аналоговий сигнал, що є присутнім на виводі рівняється із сигналом VIND, за результатами порівняння формується вихідний цифровий сигнал (див. малюнок 20-2)
|
Джерела опорної напруги.
Модуль джерела опорної напруги, як правило, використається разом з модулем компараторів. Вхідний струм виводів компаратора дуже малий, тому джерело опорної напруги має малу навантажувальну здатність.
Модуль джерела опорної напруги містить 16 послідовно включених резисторів, що забезпечують вибір потрібної напруги. Резистори розділені на сегменти для організації двох діапазонів дієвідмін vref і мають можливість вимикання для зменшення струму споживання, коли джерело опорної дієвідміни не використається.
У регістрі VRCON перебувають біти керування джерелом опорної напруги. На малюнку 19-1 показана структурна схема джерела опорної напруги.
|
Настроювання джерела опорної напруги.
Джерело опорного напруг може мати 16 різних рівнів напруги для кожного діапазону. Рівняння обчислення напруги:
Час установки напруги повинне визначаться по напрузі на виводі vref . У прикладі 19-1 показане настроювання опорного джерела з напруги 1,25У при напрузі живлення 5У.
При відомих значеннях vref й vdd. Вам необхідно розрахувати значення бітів VR3: VRO. У рівнянні 19-1показана формула обчислення VR3:VRО. Оскільки значення VR3:VRО цілочислене, те може виникати деяка помилка. Рівні vref vdd повинні бути обрані таким чином, щоб значення VR3:VR0 було не більше 15.
Рівняння 19-1 Обчислення VR3 VRO
Якщо VRR=1
Якщо VRR=0
Лекція № 13
Тема: Типи аналгово-цифрових перетворювачів
Викладач: Костенко Д.В.
dmi.kostenko@gmail.com
Мікропроцесорна техніка: Підручник/ Ю.І.Якименко, Т.О.Терещенко, Є.І.Сокол, В.Я.Жуйков, Ю.С.Петергеря; За ред.. Т.О.Терещенко.-2-ге вид., переробл. Та доповн.- К.:ІВЦ "Видавництво «Політехника»"; "Кондор", 2004.-440 с
Предко М. Справочник по PIC-микроконтроллерам|: Пер. з|із| англ|.-М.: ДМК Прес, 2004-512 с|із|.,іл.
Однокристальні 8-розрядні FLASH| CMOS| мікроконтролери|мікроконтроллери| компанії Microchip| Technology| Incorporated|. –технічна| документація на мікроконтролери|мікроконтроллери| PIC16F873|, PIC16F874|, PIC16F876|, PIC16F877| –М|.:ООО "Мікро-чип", 2002 грама.-170 с., іл.
MPASM – Руководство пользователя. Техническая документация на асемблер для микроконтроллеров компании Microchip Technology Incorporated М.: ООО "Микро-Чип", 2001. - 61 с., ил.
Мікропроцесорна техніка: навч. посібник/В.В. Ткачов, Г. Грулер, Н. Нойбергер та ін. – Д.: Національний гірничий університет, 2012. – 188 с.
АЦП
Модуль АЦП має 5 каналів у|біля| 28 вивідних і 8 каналів у|біля| 40/44 вивідних мікросхем.
Вхідний аналоговий сигнал через комутатор заряджає внутрішній конденсатор АЦП Сhold . Модуль АЦП перетворює напругу, що утримується на конденсаторі у відповідний 10-розрядний цифровий код методом послідовного наближення. Джерело верхньої і нижньої опорної напруги може бути програмно вибране з виводів VDD, VSS, RA2 або RA3.
Дозволяється робота модуля АЦП в SLEEP| режимі мікроконтролера|мікроконтроллера|, при цьому як джерело тактових імпульсів для АЦП має бути вибраний RC| генератор.
Для управління АЦП в мікроконтролері|мікроконтроллері| використовується 4 регістра: | - регістр|реєстр| результату ADRESH| (старший байт); - регістр|реєстр| результату ADRESL| (молодший байт);
- регістр|реєстр| управління ADCON0|;
- регістр|реєстр| управління ADCON1.
Регістр|реєстр| ADCON0| використовується для налаштування роботи модуля АЦП, а за допомогою регістра|реєстру| ADCON1| встановлюється які входи мікроконтролера|мікроконтроллера| використовуватимуться модулем АЦП і в якому режимі (аналоговий або цифровий порт введення/виводу|висновку|). Призначення бітів регістрів ADCON0 і ADCON1 наведено в рис.5.6.
Рис.5.6. Призначення бітів регістрів ADCON0 і ADCON1.
У регістрах|реєстрах| ADRESH:ADRESL| зберігається 10-розрядний результат АЦП перетворення. Після|потім| завершення перетворення результат перетворення записується|занотовує| в регістри|реєстри| ADRESH:ADRESL|, скидається прапор GO/-DONE (ADCON0<2|>), встановлюється прапор переривання ADIF|. Структурна схема модуля АЦП показана на рис. 5.7.
Рис.5.7. Структурна схема модуля АЦП.
Після|потім| включення|приєднання| і конфігурації АЦП вибирається робочий аналоговий канал. Відповідні біти TRIS| аналогових каналів повинні настроювати порт введення/виводу|висновку| на вхід. Перед початком перетворення необхідно витримати тимчасову паузу.
Рекомендована послідовність дій для роботи з|із| АЦП:
- налагодити модуль АЦП: - налагодити виводи як аналогові входи, входи VREF або цифрові канали введення/виводу (ADCON1); - вибрати вхідний канал АЦП (ADCON0); - вибрати джерело тактових імпульсів для АЦП (ADCON0);
- включити модуль АЦП (ADCON0|);
- налагодити|настроїти| переривання від модуля АЦП (якщо необхідно): - скинути біт ADIF| в "0"|;
- встановити біт ADIE| в "1"|;
- встановити біт PEIE| в "1"|;
- встановити біт GIE| в "1"|.
- Витримати паузу, необхідну для зарядки конденсатора CHOLD.
- почати|розпочинати| аналого-цифрове перетворення | - встановити біт GO/-DONE в "1"| (ADCON0|);
- чекати закінчення перетворення
- чекати поки біт GO/-DONE не буде скинутий в "0"| або - чекати переривання по закінченню перетворення.
- зчитати результат перетворення з|із| регістрів|реєстрів| ADRESH:ADRESL| скинути біт ADIF| в "0"|, якщо це необхідно.
- для наступного перетворення необхідно виконати кроки, починаючи з пункту 1 або 2. Час перетворення одного біта визначається як час TAD . Мінімальний час очікування перед наступним перетворенням повинен складати не менше 2 TAD .
Вибір джерела тактових імпульсів для АЦП
Час отримання одного біта результату визначається параметром TAD. Для 10-розрядного результату потрібний як мінімум 12 TAD . Параметри тактового сигналу для АЦП визначаються програмно, TAD може набувати наступних значень: - 2Tosc; - 8Tosc ;
- 32Tosc;
- внутрішній RC| генератор модуля АЦП (2-мкс|).
Для отримання коректного результату перетворення необхідно вибрати джерело тактового сигналу АЦП, що забезпечує час TAD не менше 1,6 мкс (рис.5.8).
Рис.5.8. Таблиця вибору типа джерела тактових імпульсів.
Налаштування аналогових входів
Регістри ADCON1, TRISA і TRISE відповідають за налаштування виводів АЦП. Якщо виводи мікросхеми настроюються як аналогові входи, то при цьому мають бути встановлені відповідні біти в регістрі TRIS. Якщо відповідний біт скинутий в "0", виведення мікросхеми настроєне як цифровий вихід із значеннями вихідної напруги VOH і VOL .
Модуль АЦП функціонує незалежно від стану|достатку| бітів CHS2:CHS0| і бітів TRIS|.
Аналого-цифрове перетворення
Скидання бита GO/-DONE в "0" під час перетворення приведе до його припинення. При цьому регістри результату (ADRESH:ADRESL) не змінять свого вмісту. Після дострокового завершення перетворення необхідно забезпечити тимчасову затримку 2TAD. Витримавши необхідну паузу, можна почати нове перетворення установкою бита GO/-DONE в "1".
На рис. 5.9 наведена послідовність отримання|здобуття| результату після|потім| установки бита GO/-DONE.
Рис.5.9. Схема отримання результату перетворення в АЦП.
10-розрядний результат перетворення зберігається в спареному 16-розрядному регістрі|реєстрі| ADRESH:ADRESL|. Запис результату перетворення може виконуватися з|із| правим або лівим вирівнюванням, залежно від значення бита ADFM (рис.5.10)|. Не задіяні біти регістра|реєстру| ADRESH:ADRESL| читаються як "0"|. Якщо модуль АЦП вимкнений, то 8-розрядні регістри|реєстри| ADRESH| і ADRESL| можуть використовуватися як регістри|реєстри| загального призначення.
|спільного|
Рис.5.10. Вирівнювання результату перетворення
Рис.5.11. Регістри, які використаються при роботі с АЦП.
Лекція № 14
Тема: Загальні відомості об телеметрії, принципи ущільнення. Послідовні інтерфейси
Викладач: Костенко Д.В.
dmi.kostenko@gmail.com
Література:
Мікропроцесорна техніка: Підручник/ Ю.І.Якименко, Т.О.Терещенко, Є.І.Сокол, В.Я.Жуйков, Ю.С.Петергеря; За ред.. Т.О.Терещенко.-2-ге вид., переробл. Та доповн.- К.:ІВЦ "Видавництво «Політехника»"; "Кондор", 2004.-440 с
Предко М. Справочник по PIC-микроконтроллерам|: Пер. з|із| англ|.-М.: ДМК Прес, 2004-512 с|із|.,іл.
Однокристальні 8-розрядні FLASH| CMOS| мікроконтролери|мікроконтроллери| компанії Microchip| Technology| Incorporated|. –технічна| документація на мікроконтролери|мікроконтроллери| PIC16F873|, PIC16F874|, PIC16F876|, PIC16F877| –М|.:ООО "Мікро-чип", 2002 грама.-170 с., іл.
MPASM – Руководство пользователя. Техническая документация на асемблер для микроконтроллеров компании Microchip Technology Incorporated М.: ООО "Микро-Чип", 2001. - 61 с., ил.
Мікропроцесорна техніка: навч. посібник/В.В. Ткачов, Г. Грулер, Н. Нойбергер та ін. – Д.: Національний гірничий університет, 2012. – 188 с.
Інтерфейс RS-232С, його використання у мікропроцесорній системі.
Широко використовуваний послідовний інтерфейс синхронної і асинхронної передачі даних, що визначається стандартом EIA RS-232-C і рекомендаціями V.24 і V.28 ITU-T. Спочатку створювався для зв'язку комп'ютера з терміналом. Був розроблений 1962 року рядом крупних промислових корпорацій і опублікований Асоціацією електронної промисловості США (Electronic Industries Association — EIA). В даний час використовується в самих різних застосуваннях.
Стандартна швидкість передачі для RS-232 — 9600 біт/сек на відстань до 15м. Максимальна відстань передачі даних - 20 м. Існує в 8-, 9-, 25- і 31-контактних варіантах роз'ємів. Зараз частіше використовується 9-контактний роз'єм.
У загальному випадку описує чотири інтерфейсні функції:
визначення управляючих сигналів через інтерфейс;
визначення формату даних користувача, що передаються через інтерфейс;
передачу тактових сигналів для синхронізації потоку даних;
формування електричних характеристик інтерфейсу.
|
|
Рис. 3а. 9-ти контактний роз’єм |
Рис. 3б. 25-ти контактний роз’єм |
Інтерфейс RS-232-C сполучає два пристрої. Лінія передачі першого пристрою з'єднується з лінією прийому другого і навпаки (повний дуплекс) Для управління сполученими пристроями використовується програмне підтвердження (введення в потік передаваних даних відповідних управляючих символів). Можлива організація апаратного підтвердження шляхом організації додаткових RS-232 ліній для забезпечення функцій визначення статусу і управління.
Таблиця 3. Характеристика стандарту
Стандарт |
EIA RS-232-C, CCITT V.24 |
Швидкість передачі |
115 Кбіт/с (максимум) |
Відстань передачі |
15 м (максимум) |
Характер сигналу |
несиметричний по напрузі |
Кількість драйверів |
1 |
Кількість приймачів |
1 |
Схема з'єднання |
повний дуплекс, від крапки до крапки |
Інтерфейс RS-232C призначений для підключення до комп'ютера стандартних зовнішніх пристроїв (принтера, сканера, модему, миші і ін.), а також для зв'язку комп'ютерів між собою. Дані в RS-232C передаються в послідовному коді побайтно. Кожен байт обрамляється стартовим і стоповими бітами. Дані можуть передаватися як в одну, так і в іншу сторону (дуплексний режим).
Комп'ютер має 25-контактний (DB25P) або 9-контактний (DB9P) роз'єм для підключення RS-232C. Призначення контактів роз'єму приведене в таблиці 4.
Таблиця 4. Порядок обміну по інтерфейсу RS-232C
Назва |
Напрямок |
Описання |
Контакт (25-контактний роз’єм) |
Контакт (9-контактний роз’єм) |
DCD |
IN |
Carrier Detect (Визначення несучої) |
8 |
1 |
RXD |
IN |
Receive Data (Дані, що приймаються) |
3 |
2 |
TXD |
OUT |
Transmit Data (Дані, що передаються) |
2 |
3 |
DTR |
OUT |
Data Terminal Ready (Готовність термінала) |
20 |
4 |
GND |
- |
System Ground (Корпус системи) |
7 |
5 |
DSR |
IN |
Data Set Ready (Готовність даних) |
6 |
6 |
RTS |
OUT |
Request to Send (Запит на відправку) |
4 |
7 |
CTS |
IN |
Clear to Send (Готовність прийому) |
5 |
8 |
RI |
IN |
Ring Indicator (Індикатор) |
22 |
9 |
Призначення сигналів наступне.
- FG - захисне заземлення (екран).
- TXD - дані, що передаються комп'ютером в послідовному коді (логіка негативна).
- RXD - дані, що приймаються комп'ютером в послідовному коді (логіка негативна).
- RTS - сигнал запиту передачі. Активний весь час передачі.
- CTS - сигнал скидання (очищення) для передачі. Активний весь час передачі. Говорить про готовність приймача.
- DSR - готовність даних. Використовується для завдання режиму модему.
- SG - сигнальне заземлення, нульовий дріт.
- DCD - виявлення тієї, що несе даних (детектування сигналу, що приймається).
- DTR - готовність вихідних даних.
- RI - індикатор виклику. Говорить про прийом модемом сигналу виклику по телефонній мережі.
Найчастіше використовуються трьох- або чотирьохпровідний зв'язок (для двонаправленої передачі). Схема з'єднання для чотирьохпровідної лінії зв'язку показана на рис. 4.
Для двохпровідної лінії зв'язку у випадку тільки передачі з комп'ютера в зовнішній пристрій використовуються сигнали SG і TXD. Всі 10 сигналів інтерфейсу задіюються тільки при з'єднанні комп'ютера з модемом.
Формат даних показаний на рис. 5. Власне дані (5, 6, 7 або 8 біт) супроводжуються стартовим бітом, бітом парності і одним або двома стоповими бітами. Отримавши стартовий біт, приймач вибирає з лінії біти даних через визначені інтервали часу. Дуже важливо, щоб тактові частоти приймача і передавача були однаковими, допустима розбіжність - не більше 10%). Швидкість передачі по RS-232C може вибиратися з ряду: 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 біт/с.
Рис. 4. Схема 4-провідної лінії зв'язку для RS-232C
Всі сигнали RS-232C передаються спеціально вибраними рівнями, що забезпечують високу завадостійкість зв'язку (рис. 6). Відзначимо, що дані передаються в інверсному коді (логічній одиниці відповідає низький рівень, логічному нулю - високий рівень).
Для підключення довільного пристрою до комп'ютера через RS-232C зазвичай використовують трьох- або чотирьохпровідну лінію зв'язку (див. рис. 4), але можна задіювати і інші сигнали інтерфейсу.
Рис. 5. Формат даних RS-232C
Обмін по RS-232C здійснюється за допомогою звернень по спеціально виділених для цього портах COM1 (адреси 3F8h...3FFh, переривання IRQ4), COM2 (адреси 2F8h...2FFh, переривання IRQ3), COM3 (адреси 3F8h...3EFh, переривання IRQ10), COM4 (адреси 2E8h...2EFh, переривання IRQ11). Формати звернень за цими адресами можна знайти в численних описах мікросхем контролерів послідовного обміну UART (Universal Asynchronous Receiver/Transmitter), наприклад, i8250, КР580ВВ51.
Рис. 6. Рівні сигналів RS-232C на передавальній та приймальній стороні лінії зв'язку
SPI (англ. Serial Peripheral Interface, SPI bus — послідовний периферійний інтерфейс, шина SPI) — фактичний послідовний синхронний повнодуплексний стандарт передачі даних, розроблений фірмою Motorola для забезпечення простого сполучення мікроконтролерів та периферії. SPI також називають чотирьох-провідним (англ. four-wire) інтерфейсом.
На відміну від стандартного послідовного порту, SPI є синхронним інтерфейсом, в якому кожна передача синхронізована з тактовим сигналом, що генерується ведучим пристроєм (мікроконтролером). Периферійний пристрій синхронізує отримання бітової послідовності з тактовим сигналом. До одного послідовного периферійного інтерфейсу ведучого мікроконтролера можна під'єднати декілька мікросхем. Головний пристрій вибирає ведений пристрій, активуючи сигнал «вибір кристалу» (англ. chip select) на потрібній мікросхемі. Інші пристрої, не вибрані ведучим, не беруть участі в передачі по SPI.
Для передачі даних в інтерфейсі SPI використовуються чотири сигнали:
MOSI або SI — вихід ведучого, вхід веденого (англ. Master Out Slave In). Служить для передачі даних від ведучого пристрою до веденого.
MISO або SO — вхід ведучого, вихід веденого (англ. Master In Slave Out). Служить для передачі даних від веденого пристрою до ведучого.
SCLK або SCK — послідовний тактовий сигнал (англ. Serial Clock). Служить для передачі тактового сигналу для ведених пристроїв.
CS або SS[1] — сигнал початку/завершення сеансу зв'язку (вибору веденого пристрою для передачі/читання даних; англ. Chip Select, Slave Select). По завершенні обміну даних має бути знятий, що дозволить приймачу даних вийти з режиму читання/запису та перейти до режиму обробки даних.
I2C використовує дві двонапрямлених лінії, підтягнуті до напруги живлення та керовані через відкритий колектор або відкритий стік — послідовна лінія даних (SDA, англ. Serial DAta) і послідовна лінія тактування (SCL, англ. Serial CLock). Стандартні напруги +5 В або +3,3 В, проте допускаються й інші.
Класична адресація включає 7-бітовий адресний простір з 16 зарезервованими адресами. Це означає до 112 вільних адрес для підключення периферії на одну шину.
Основний режим роботи — 100 кбіт/с; 10 кбіт/с в режимі роботи із зниженою швидкістю. Зауважимо, що стандарт допускає припинення тактування для роботи з повільними пристроями.
Після перегляду стандарту 1992 року стає можливим підключення ще більшої кількості пристроїв на одну шину (за рахунок можливості 10-бітної адресації), а також велику швидкість до 400 кбіт/с у швидкісному режимі. Відповідно, доступна кількість вільних вузлів зросла до 1008. Максимальна допустима кількість мікросхем, приєднаних до однієї шині, обмежується максимальною ємністю шини в 400 пФ.
Версія стандарту 2.0, випущена 1998 року представила високошвидкісний режим роботи зі швидкістю до 3,4 Мбіт/с зі зниженим енергоспоживанням. Остання версія 2.1 2001 року включила лише незначні доопрацювання.
Принцип роботи
Стан СТАРТ і СТОП
Процедура обміну починається з того, що ведучий (вузол, який ініціює передачу даних) формує стан СТАРТ: генерує перехід сигналу лінії SDA з ВИСОКОГО стану в низький при високому рівні на лінії SCL. Цей перехід сприймається усіма пристроями, підключеними до шини, як ознака початку процедури обміну. Генерація синхросигналу — це завжди обов'язок ведучого; кожний ведучий генерує свій власний сигнал синхронізації при пересиланні даних по шині. Процедура обміну завершується тим, що ведучий формує стан СТОП — перехід стану лінії SDA з низького стану в ВИСОКИЙ при високому стані лінії SCL. Стани СТАРТ і СТОП завжди виробляються ведучим. Вважається, що шина зайнята після фіксації стану СТАРТ. Шина вважається звільненою через деякий час після фіксації стану СТОП. При передачі посилок по шині I2C кожний ведучий генерує свій синхросигнал на лінії SCL. Після формування стану СТАРТ, ведучий опускає стан лінії SCL в НИЗЬКИЙ стан і виставляє на лінію SDA старший біт першого байта повідомлення. Кількість байт в повідомленні не обмежена. Специфікація шини I2C дозволяє зміни на лінії SDA лише при низькому рівні сигналу на лінії SCL. Дані дійсні та повинні залишатися стабільними лише під час ВИСОКОГО стану синхроімпульсу. Для підтвердження прийому байта від ведучого-передавача веденим-приймачем в специфікації протоколу обміну по шині I2C вводиться спеціальний біт підтвердження, який виставляється на шину SDA після прийому 8 біта даних.
Підтвердження
Таким чином передача 8 біт даних від передавача до приймача завершуються додатковим циклом (формуванням 9-го тактового імпульсу лінії SCL), при якому приймач виставляє низький рівень сигналу на лінії SDA, як ознаку успішного прийому байта.
Підтвердження при передачі даних обов'язкове, крім випадків закінчення передачі веденою стороною. Відповідний імпульс синхронізації генерується ведучим. Передавач відпускає (ВИСОКУ) лінію SDA на час синхроімпульсу підтвердження. Приймач повинен утримувати лінію SDA протягом ВИСОКОГО стану синхроімпульсу підтвердження в стабільному НИЗЬКОМУ стані.
У тому випадку, коли ведений-приймач не може підтвердити свою адресу (наприклад, коли він виконує в цей момент будь-які функції реального часу), лінія даних повинна бути залишена в ВИСОКОМУ стані. Після цього ведучий може видати сигнал СТОП для переривання пересилання даних. Якщо у пересиланні бере участь ведучий-приймач, то він повинен повідомити про закінчення передачі веденого-передавача шляхом непідтвердження останнього байта. Ведений-передавач повинен звільнити лінію даних для того, щоб дозволити ведучому видати сигнал СТОП або повторити сигнал СТАРТ.
Синхронізація
Синхронізація виконується з використанням підключення до лінії SCL за правилом монтажного І. Це означає, що ведучий не має монопольного права на керування переходом лінії SCL з НИЗЬКОГО стану в ВИСОКИЙ. У тому випадку, коли веденому потрібен додатковий час на обробку прийнятого біта, він має можливість утримувати лінію SCL в низькому стані до моменту готовності до прийому наступного біта. Таким чином, лінія SCL буде знаходитися в НИЗЬКОМУ стані протягом найдовшого НИЗЬКОГО періоду синхросигналів.
Пристрої з більш коротким найнижчими періодом будуть входити в стан очікування на час, поки не скінчиться довгий період. Коли у всіх задіяних пристроїв скінчиться НИЗЬКИЙ період синхросигналу, лінія SCL перейде в ВИСОКИЙ стан. Всі пристрої почнуть проходити ВИСОКИЙ період своїх синхросигналів. Перший пристрій, у якого скінчиться цей період, знову встановить лінію SCL в НИЗЬКИЙ стан. Таким чином, НИЗЬКИЙ період синхролініі SCL визначається найдовшим періодом синхронізації з усіх задіяних пристроїв, а ВИСОКИЙ період визначається самим коротким періодом синхронізації пристроїв.
Механізм синхронізації може бути використаний приймачами як засіб керування пересиланням даних на байтовому та бітовому рівнях.
На рівні байта, якщо пристрій може приймати байти даних з великою швидкістю, але вимагає певний час для збереження прийнятого байта або підготовки до прийому наступного, то воно може утримувати лінію SCL в НИЗЬКОМУ стані після прийому та підтвердження байта, переводячи таким чином передавач в стан очікування.
На рівні бітів, пристрій, такий як мікроконтролер без вбудованих апаратних схем I2C або з обмеженими схемами, може уповільнити частоту синхроімпульсів шляхом продовження їх НИЗЬКОГО періоду. Таким чином швидкість передачі будь-якого ведучого адаптується до швидкості повільного пристрою.
Адресація в шині I2C
Кожен пристрій, підключений до шини, може бути програмно адресований за унікальною адресою. Для вибору приймача повідомлення передавач використовує унікальну адресну компоненту у форматі посилки. При використанні однотипних пристроїв, ІС часто мають додатковий селектор адреси, який може бути реалізований як у вигляді додаткових цифрових входів селектора адреси, так і у вигляді аналогового входу. При цьому адреси таких однотипних пристроїв виявляються рознесені в адресному просторі пристроїв, підключених до шини.
У звичайному режимі використовується 7-бітна адресація.
Процедура адресації на шині I2C полягає в тому, що перший байт після сигналу СТАРТ визначає, який ведений адресується передавачем для проведення циклу обміну. Виняток становить адреса «Загального виклику», який адресує всі пристрої на шині. Коли використовується ця адреса, всі пристрої в теорії повинні послати сигнал підтвердження. Однак, пристрої, які можуть обробляти «загальний виклик», на практиці трапляються рідко.
Перші сім бітів першого байта утворюють адресу веденого. Восьмий, молодший біт, визначає напрям пересилання даних. «Нуль» означає, що ведучий буде записувати інформацію до обраного веденого. «Одиниця» означає, що ведучий буде зчитувати інформацію з веденого.
Після того, як адреса послана, кожний пристрій в системі порівнює перші сім біт після сигналу СТАРТ зі своєю адресою. при збігу пристрій вважає себе обраним як ведений-приймач або як ведений-передавач, залежно від біта напряму.
Адреса веденого може складатися з фіксованої та програмованої частини. Часто трапляється, що в системі буде кілька однотипних пристроїв (Наприклад ІМС пам'яті, або драйверів світлодіодних індикаторів), тому за допомогою програмованої частини адреси стає можливим підключити до шини максимально можливу кількість таких пристроїв. Кількість програмованих біт в адресі залежить від кількості вільних виводів мікросхеми. Іноді використовується один вивід з аналоговою установкою програмованого діапазону адрес. При цьому залежно від потенціалу на цьому адресному виведенні ІМС, можливе зміщення адресного простору драйвера так, щоб однотипні ІМС не конфліктували між собою на загальній шині.
Всі спеціалізовані ІМС, що підтримують роботу в стандарті шини I2C, мають набір фіксованих адрес, перелік яких зазначений виробником в описах контролерів.
Комбінація біт 11110ХХ адреси зарезервована для 10-бітної адресації.
Як випливає з специфікації шини, допускаються як прості формати обміну, так і комбіновані, коли в проміжку від стану СТАРТ до стану СТОП ведучий та ведений можуть виступати і як приймач, і як передавач даних. Комбіновані формати можуть бути використані, наприклад, для керування послідовною пам'яттю.
Під час першого байта даних можна передавати адресу в пам'яті, який записується у внутрішній регістр-засувку. Після повторення сигналу старту та адреси веденого видаються дані з пам'яті. Всі рішення про авто-Інкремент або декремент адреси, до якого стався попередній доступ, приймаються конструктором конкретного пристрою. Тому, в будь-якому випадку найкращий спосіб уникнути неконтрольованої ситуації на шині перед використанням нової (або раніше не використовуваної) ІМС слід ретельно вивчити її опис (datasheet або reference manual), отримавши його з сайту виробника. Більше того, виробники часто розміщують поруч більш докладні інструкції по застосуванню.
В будь-якому випадку, за специфікацією шини, всі пристрої, що розробляються, при отриманні сигналу СТАРТ або повторний СТАРТ повинні скинути логіку шини та підготуватися до прийому адреси.
Проте основні проблеми з використанням I2C шини виникають саме через те, що розробники «початківці», працюючи з I2C шиною, не враховують того факту, що ведучий (часто — мікропроцесор) не має монопольного права ні на одну з ліній шини.
Застосування
I2C знаходить застосування в пристроях, які передбачають простоту розробки та низьку собівартість виготовлення при відносно непоганий швидкості роботи.
Список можливих застосувань:
доступ до модулів пам'яті NVRAM;
доступ до низькошвидкісних ЦАП/АЦП;
регулювання контрастності, насиченості та колірного балансу моніторів;
регулювання звуку в динаміках;
керування світлодіодами, в тому числі в мобільних телефонах;
читання інформації з датчиків моніторингу та діагностики устаткування, наприклад, термостат центрального процесора або швидкість обертання вентилятора охолодження;
читання інформації з годинника реального часу (кварцових генераторів);
керування включенням/виключенням живлення системних компонент;
інформаційний обмін між мікроконтролерами;
На дешевих пристроях часто I2C емулюється програмно з використанням технології Bit-banging.
Переваги
необхідний всього один мікроконтролер для керування набором пристроїв;
використовується всього дві лінії введення-виведення загального призначення;
стандарт передбачає «гаряче» підключення та відключення пристроїв в процесі роботи системи
вбудований в мікросхеми фільтр придушує сплески, забезпечуючи цілісність даних.
Лекція № 15
Тема: Огляд поширених послідовних протоколів
Викладач: Костенко Д.В.
dmi.kostenko@gmail.com
Література:
Мікропроцесорна техніка: Підручник/ Ю.І.Якименко, Т.О.Терещенко, Є.І.Сокол, В.Я.Жуйков, Ю.С.Петергеря; За ред.. Т.О.Терещенко.-2-ге вид., переробл. Та доповн.- К.:ІВЦ "Видавництво «Політехника»"; "Кондор", 2004.-440 с
Предко М. Справочник по PIC-микроконтроллерам|: Пер. з|із| англ|.-М.: ДМК Прес, 2004-512 с|із|.,іл.
Однокристальні 8-розрядні FLASH| CMOS| мікроконтролери|мікроконтроллери| компанії Microchip| Technology| Incorporated|. –технічна| документація на мікроконтролери|мікроконтроллери| PIC16F873|, PIC16F874|, PIC16F876|, PIC16F877| –М|.:ООО "Мікро-чип", 2002 грама.-170 с., іл.
MPASM – Руководство пользователя. Техническая документация на асемблер для микроконтроллеров компании Microchip Technology Incorporated М.: ООО "Микро-Чип", 2001. - 61 с., ил.
Мікропроцесорна техніка: навч. посібник/В.В. Ткачов, Г. Грулер, Н. Нойбергер та ін. – Д.: Національний гірничий університет, 2012. – 188 с.
Modbus
Modbus - комунікаційний протокол, заснований на технології master-slave. Широко застосовується в промисловості для організації зв'язку між електронними пристроями. Може використовувати для передачі даних через послідовні лінії зв'язку RS-485, RS-422, RS-232, а також мережі TCP/IP (Modbus TCP ).
Історія
Modbus був розроблений компанією Modicon (в даний час належить Schneider Electric) для використання в її контролерах з програмованою логікою. Вперше специфікація протоколу була опублікована в 1979 році. [1] Це був відкритий стандарт, що описував формат повідомлень і способи їх передачі в мережі, яка складається з різних електронних пристроїв.
Спочатку контролери MODICON використовували послідовний інтерфейс RS-232. [1] Пізніше став застосовуватися інтерфейс RS-485, оскільки він забезпечує більш високу надійність, дозволяє використовувати довші лінії зв'язку і підключати до однієї лінії кілька пристроїв.
Багато виробників електронного устаткування підтримали стандарт, на ринку з'явилися сотні виробів, що його використовували. В наш час розвитком Modbus займається некомерційна організація Modbus-IDA, створена виробниками та користувачами електронних приладів [2] .
Вступ
Modbus відноситься до протоколів прикладного рівня мережевої моделі OSI. [3] Контролери на шині Modbus взаємодіють, використовуючи master-slave модель, засновану на транзакціях, що складаються із запиту і відповіді.
Зазвичай в мережі є тільки один клієнт, так званий «головний» (англ. master) пристрій, і кілька серверів - «підлеглих» (англ. slaves) пристроїв. Головний пристрій ініціює транзакції (передає запити). Підлеглі пристрої передають запитувані головним пристроєм дані, або виконують запитувані дії. "Головний" може звертатися індивідуально до підлеглого або ініціювати передачу широкомовного повідомлення для всіх підлеглих пристроїв. Підлеглий пристрій формує повідомлення і повертає його у відповідь на запит, адресований саме йому. При отриманні широкомовного запиту відповідь не формується.
Специфікація Modbus описує структуру запитів і відповідей. Їх основа - елементарний пакет протоколу, так званий PDU (Protocol Data Unit). Структура PDU не залежить від типу лінії зв'язку і містить у собі код функції і поле даних. Код функції кодується однобайтовим полем і може приймати значення в діапазоні 1 ... 127. Діапазон значень 128 ... 255 зарезервований для кодів помилок. Поле даних може бути змінної довжини. Розмір пакета PDU обмежений 253 байтами.
Modbus PDU |
|
номер функції |
дані |
1 байт |
N <253 (байт) |
Для передачі пакету по фізичних лініях зв'язку PDU поміщається в інший пакет, що містить додаткові поля. Цей пакет має назву ADU (Application Data Unit). Формат ADU залежить від типу лінії зв'язку.
Існують три основні реалізації протоколу Modbus, дві для передачі даних по послідовних лініях зв'язку, як мідним EIA/TIA-232-E (RS-232), EIA-422, EIA/TIA-485-A (RS-485), так і оптичним і радіо:
Modbus ASCII - для обміну використовуються тільки ASCII символи. Для перевірки цілісності використовується алгоритм en: Longitudinal redundancy check. Повідомлення поділяється на стовпці за допомогою символу «:» і закінчується символами нового рядка CR / LF.
Modbus RTU
і для передачі даних по мережах Ethernet поверх TCP/IP:
Modbus TCP.
Загальна структура ADU наступна (у залежності від реалізації, деякі з полів можуть бути відсутні):
адреса підлеглого пристрою |
код функції |
дані |
блок виявлення помилок |
де
Адреса підлеглого пристрою - адреса підлеглого пристрою, до якого адресовано запит.
Підлеглі пристрої відповідають тільки на запити, що надійшли на їх адресу. Відповідь також починається з адреси відповідного підлеглого пристрою, який може змінюватися від 1 до 247. Адреса 0 використовується для широкомовної передачі, її розпізнає кожен пристрій, адреси в діапазоні 248 ... 255 - зарезервовані;.
Номер функції - це наступне однобайтне поле кадру. Воно говорить підлеглому пристрою, які дані або виконання якої дії вимагає від нього ведучий пристрій;
Дані - поле містить інформацію, необхідну підлеглому пристрою для виконання заданої майстром функції або містить дані, що передаються підлеглим пристроєм у відповідь на запит ведучого. Довжина і формат поля залежить від номера функції;
Блок виявлення помилок - контрольна сума для перевірки відсутності помилок в кадрі.
Максимальний розмір ADU для послідовних мереж RS232/RS485 - 256 байт, для мереж TCP - 260 байт.
Для Modbus TCP ADU виглядає наступним чином:
ід транзакції |
ід протоколу |
довжина пакету |
адреса підлеглого пристрою |
код функції |
дані |
де
Ід транзакції - два байти, зазвичай нулі
Ід протоколу - два байти, нулі
Довжина пакету - два байти, старший потім молодший, довжина наступної за цим полем частини пакета
Адресу відомого пристрою - адреса підлеглого пристрою, до якого адресовано запит. Зазвичай ігнорується, якщо з'єднання встановлено з певним пристроєм. Може використовуватися, якщо з'єднання встановлено з мостом, який виводить нас, наприклад, в мережу RS485.
Поле контрольної суми в Modbus TCP відсутнє.
Категорії кодів функцій
У діючій в наш час специфікації протоколу визначаються три категорії кодів функцій:
Стандартні команди
Їх опис має бути опубліковано та затверджено Modbus-IDA. Ця категорія містить як вже існуючі, так і вільні в наш час коди.
Користувацькі команди
Два діапазони кодів (від 65 до 72 і від 100 до 110), для яких користувач може реалізувати довільну функцію. При цьому не гарантується, що якийсь інший пристрій не буде використовувати той же самий код для виконання іншої функції.
Зарезервовані
У цю категорію входять коди функцій, які не є стандартними, але вже використовуються в пристроях, що виробляються різними компаніями. Це коди 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 і 127.
Модель даних
Одне з типових застосувань протоколу - читання і запис даних в регістри контролерів. Специфікація протоколу визначає чотири таблиці даних:
Таблиця |
Тип елемента |
Тип доступу |
Дискретні входи (англ. Discrete Inputs) |
Один біт |
тільки читання |
Регістри прапорів (англ. Coils) |
Один біт |
читання і запис |
Регістри вводу (англ. Input Registers) |
16-бітне слово |
тільки читання |
Регістри зберігання (англ. Holding Registers) |
16-бітне слово |
читання і запис |
Доступ до елементів в кожній таблиці здійснюється за допомогою 16-бітної адреси, першій комірці відповідає адреса 0. Таким чином, кожна таблиця може містити до 65536 елементів. Специфікація не визначає, що фізично повинні представляти собою елементи таблиць і по яких внутрішніх адресах пристрою вони повинні бути доступні. Наприклад, припустимо організувати таблиці з перекриттям, У цьому випадку команди працюють з дискретними даними і з 16-бітними регістрами будуть фактично звертатися до одних і тих же даних.
Слід зазначити, що зі способом адресації даних пов'язана певна плутанина. Modbus був спочатку розроблений для контролерів Modicon. У цих контролерах для кожної з таблиць використовувалася спеціальна нумерація. Наприклад, першому регістру вводу відповідав номер комірки 30001, а першому регістру зберігання - 40001. Таким чином, регістру зберігання з адресою 107 в команді Modbus відповідав регістр № 40108 контролера. Хоча така відповідність адрес більше не є частиною стандарту, деякі програмні пакети можуть автоматично «коригувати» введені користувачем адреси, наприклад, віднімаючи 40001 від адреси регістра зберігання.
Стандартні функції протоколу Modbus
PDU запиту і відповіді для стандартних функцій |
||||||
номер функції |
запит / відповідь |
|||||
1 (0x01) |
A 1 |
A 0 |
Q 1 |
Q 0 |
|
|
N |
D (N байт) |
|||||
2 (0x02) |
A 1 |
A 0 |
Q 1 |
Q 0 |
|
|
N |
D (N байт) |
|||||
3 (0x03) |
A 1 |
A 0 |
Q 1 |
Q 0 |
|
|
N |
D (N байт) |
|||||
4 (0x04) |
A 1 |
A 0 |
Q 1 |
Q 0 |
|
|
N |
D (N байт) |
|||||
5 (0x05) |
A 1 |
A 0 |
D 1 |
D 0 |
|
|
A 1 |
A 0 |
D 1 |
D 0 |
|
|
|
6 (0x06) |
A 1 |
A 0 |
D 1 |
D 0 |
|
|
A 1 |
A 0 |
D 1 |
D 0 |
|
|
|
15 (0x0F) |
A 1 |
A 0 |
Q 1 |
Q 0 |
N |
D (N байт) |
A 1 |
A 0 |
Q 1 |
Q 0 |
|
|
|
16 (0x10) |
A 1 |
A 0 |
Q 1 |
Q 0 |
N |
D (N байт) |
A 1 |
A 0 |
Q 1 |
Q 0 |
|
|
A 1 іA 0 - адреса елемента,
Q 1 іQ 0 - кількість елементів,
N - кількість байт даних
D - дані
Читання даних
Для читання значень з перерахованих вище таблиць даних використовуються функції з кодами 1-4 (шістнадцяткові значення 0x01-0x04):
1 (0x01)- читання значень з декількох регістрів прапорів(Read Coil Status)
2 (0x02)- читання значень з декількох дискретних входів(Read Discrete Inputs)
3 (0x03)- читання значень з декількох регістрів зберігання(Read Holding Registers)
4 (0x04)- читання значень з декількох регістрів вводу(Read Input Registers)
Запит складається із адреси першого елемента таблиці, яку потрібно прочитати, і кількості зчитуваних елементів. Адреса та кількість даних задаються 16-бітними числами, старший байт кожного з них передається першим.
У відповіді передаються запитані дані. Кількість байт даних залежить від кількості замовлених елементів. Перед даними передається один байт, значення якого дорівнює кількості байт даних.
Значення регістрів зберігання і регістрів вводу передаються починаючи із зазначеної адреси, по два байти на регістр, старший байт кожного регістру передається першим:
-
байт 1
байт 2
байт 3
байт 4
...
байт N-1
байт N
R A, 1
R A, 0
R A +1,1
R A +1,0
...
R A + Q-1, 1
R A + Q-1, 0
Значення прапорів і дискретних входів передаються в упакованому вигляді: по одному біту на прапор. Одиниця означає включений стан, нуль - вимкнений. Значення запитаних прапорів заповнюють спочатку перший байт, починаючи з молодшого біта, потім наступні байти, також від молодшого біта до старших. Молодший біт першого байта даних містить значення прапора, зазначеного в полі «адреса». Якщо запитано кількість прапорів, не кратне восьми, то значення додаткових бітів заповнюються нулями:.
-
байт 1
...
байт N
F A +7
F A +6
F A +5
F A +4
F A +3
F A +2
F A +1
F A
...
0
...
0
F A + Q-1
F A + Q-2
...
Запис одного значення
5 (0x05)- запис значення одного прапора(Force Single Coil)
6 (0x06)- запис значення в один регістр зберігання(Preset Single Register)
Команда складається з адреси елемента (2 байти) і встановлюваного значення (2 байти).
Для регістру зберігання значення є просто 16-бітним словом.
Для прапорів значення 0xFF00 означає включений стан, 0x0000 - вимкнений, інші значення неприпустимі.
Якщо команда виконана успішно, підлеглий пристрій повертає копію запиту.
Запис декількох значень
15 (0x0F)- запис значень в кілька регістрів прапорів(Force Multiple Coils)
16 (0x10)- запис значень в кілька регістрів зберігання(Preset Multiple Registers)
Команда складається з адреси елемента, кількості змінюваних елементів, кількості переданих байт встановлюваних значень і самих встановлюваних значень. Дані упаковуються так само, як в командах читання даних.
Відповідь складається з початкової адреси і кількості змінених елементів.
Нижче наведено приклад команди ведучого пристрою і відповіді веденого (для Modbus RTU).
Напрямок передачі |
00 адреса підлеглого пристрою |
01 номер функції |
02 Адреса ст. байт |
03 Адреса мол. байт |
04 Кількість прапорів ст. байт |
05 Кількість прапорів мол. байт |
06 Кількість байт даних |
07 Дані (значення для прапорів біти 0-7) |
08 Дані (значення для прапорів біти 8-15) |
09 CRC мол. байт |
0A CRC ст. байт |
Master → Slave |
0x01 |
0x0F |
0x00 |
0x13 |
0x00 |
0x0A |
0x02 |
0xCD |
0x01 |
0x72 |
0xCB |
Напрямок передачі |
00 адреса підлеглого пристрою |
01 номер функції |
02 Адреса ст. байт |
03 Адреса мол. байт |
04 Кількість прапорів ст. байт |
05 Кількість прапорів мол. байт |
05 CRC мол. байт |
06 CRC ст. байт |
Slave → Master |
0x01 |
0x0F |
0x00 |
0x13 |
0x00 |
0x0A |
0x24 |
0x09 |
Контроль помилок у протоколі Modbus RTU
Під час обміну даними можуть виникати помилки двох типів:
Помилки, пов'язані з спотвореннями при передачі даних;
Логічні помилки.
Помилки першого типу виявляються за допомогою фреймів символів, контролю парності і циклічної контрольної суми CRC-16-IBM (використовується число-поліном = 0xA001). При цьому молодший байт передається першим, на відміну від байтів адреси і значення регістра в PDU
RTU фрейм
У RTU режимі повідомлення має починатися і закінчуватися інтервалом тиші - часом передачі не менше 3.5 символів при даній швидкості в мережі. Першим полем потім передається адреса пристрою.
Слідом за останнім переданим символом також йде інтервал тиші тривалістю не менше 3.5 символів. Нове повідомлення може починатися після цього інтервалу.
Фрейм повідомлення передається безперервно. Якщо інтервал тиші тривалістю 1.5 виник під час передачі фрейму, приймаючий пристрій повинен ігнорувати цей фрейм як неповний.
Таким чином, нове повідомлення повинно починатися не раніше 3.5 інтервалу, оскільки в цьому випадку встановлюється помилка.
Трохи про інтервали (мова йде про Serial Modbus RTU): при швидкості 9600 і 11 бітах в кадрі (стартовий біт + 8 біт даних + біт контролю парності + стоп-біт): 3.5 * 11 / 9600 = 0,00401041 (6), тобто більше 4 мс; 1.5 * 11 / 9600 = 0,00171875, тобто більше 1 мс. Для швидкостей більше 19200 бод допускається використовувати інтервали 1,75 і 0,75 мс відповідно.
Логічні помилки
Для повідомлень про помилки другого типу протокол Modbus RTU передбачає, що пристрої можуть відсилати відповіді, що свідчать про помилкову ситуацію. Ознакою того, що відповідь містить повідомлення про помилку, є встановлений старший біт коду команди. Приклад кадру при виявленні помилки веденим пристроєм, у відповідь на запит наведено в (Таблиця 2-1).
1. Якщо Slave приймає коректний запит і може його нормально обробити, то повертає стандартну відповідь.
2. Якщо Slave не приймає будь-якого значення, ніякої відповіді не відправляється. Master діагностує помилку по тайм-ауту.
3. Якщо Slave приймає запит, але виявляє помилку (parity, LRC, or CRC), ніякої відповіді не відправляється. Master діагностує помилку по тайм-ауту.
4. Якщо Slave приймає запит, але не може його обробити (звернення до неіснуючого регістру і т. д.), відправляється відповідь, що містить у собі дані про помилку.
Таблиця 2-1. Кадр відповіді (Slave → Master) при виникненні помилки modbus RTU |
||||
Напрямок передачі |
Адресу підлеглого пристрою |
Номер функції |
Дані (або код помилки) |
CRC |
Запит (Master → Slave) |
0x01 |
0x77 |
0xDD |
0xC7 0xA9 |
Відповідь (Slave → Master) |
0x01 |
0xF7 |
0xEE |
0xE6 0x7C |
Стандартні коди помилок[ред. | ред. код]
01 - Прийнятий код функції не може бути опрацьований на підлеглому пристрої.
02 - Адреса даних, вказаних у запиті, не доступна даному підлеглому пристрою.
03 - Величина, що міститься в полі даних запиту, є неприпустимою величиною для підлеглого пристрою.
04 - невідновлювальна помилка мала місце, поки підлеглий пристрій намагався виконати запрошену дію.
05 - Підлеглий пристрій прийняв запит і обробляє його, але це вимагає багато часу. Ця відповідь оберігає головного від генерації помилки тайм-ауту.
06 - Підлеглий пристрій зайнятий обробкою команди. Головний повинен повторити повідомлення пізніше, коли підлеглий звільниться.
07 - Підлеглий пристрій не може виконати програмну функцію, прийняту в запиті. Цей код повертається для невдалого програмного запиту, що використовує функції з номерами 13 або 14. Головний повинен запросити діагностичну інформацію або інформацію про помилки з підлеглого.
08 - Підлеглий пристрій намагається читати розширену пам'ять, але виявив помилку паритету. Головний може повторити запит, але звичайно в таких випадках потрібний ремонт.
NMEA 0183
Матеріал з Вікіпедії — вільної енциклопедії.
NMEA 0183 — комбінований стандарт, який визначає як електричні так і функціональні характеристики комунікаційного протоколу для обміну інформацією між пристроями морського електронного обладнання[en], такими як ехолот, гідролокатор, анемометр, гірокомпас, автоматичний рульовий механізм[en], GPS-приймач та багатьма іншими типами обладнання. Стандарт створений та контролюється Національною асоціацією морської електроніки. Він замінив попередні стандарти NMEA 0180 та NMEA 0182.[1] У морських застосуваннях поступовою виходить з вжитку і замінюється новішим стандартом NMEA 2000.
На фізичному рівні стандарт використовує EIA-422, однак майже вся апаратура з виходами NMEA 0183 також здатна працювати з одним портом RS-232. Незважаючи на те, що стандарт передбачає ізоляцію входів і виходів, існує обладнання, де не дотримано цієї вимоги.
Стандарт NMEA 0183 використовує простий послідовний комунікаційний протокол. Передавання даних здійснюється ASCII-символами у вигляді повідомлень-«речень» від одного «промовця» (англ. talker) до багатьох «слухачів» (англ. listener) одночасно. За допомогою використання проміжних повторювачів «промовець» може здійснювати однонаправлену комунікацію з практично необмеженою кількістю «слухачів». Використовуючи мультиплексори, декілька давачів можуть промовляти до одного комп'ютерного порту.
На прикладному рівні стандарт визначає вміст кожного типу «речення», таким чином кожен listener може точно розібрати повідомлення.
Опис стандарту
Канальний рівень
На канальному рівні використовується конфігурація асинхронного послідовного порту «4800, 8N1», тобто:
Типова бітова швидкість |
4800 |
Бітів даних |
8 |
Біт парності |
нема |
Стопових бітів |
1 |
Узгодження обміну[en] |
Нема |
Різновид стандарту під назвою NMEA-0183HS визначає бітову швидкість 38400. Цей варіант зазвичай використовується в автоматичних ідентифікаційних системах.
Прикладний рівень
Всі дані представляються текстовими символами ASCII між 0x20 (знак пропуску) до 0x7e (~)
Символами, що кодують дані можуть бути усіма символами із вищезгаданого діапазону крім зарезервованих спеціальних символів (див. таблицю)
Зарезервованими символами в NMEA0183 є наступні символи:
ASCII |
Hex |
Дес |
Призначення |
<CR> |
0x0d |
13 |
Символ повернення каретки |
<LF> |
0x0a |
10 |
Початок нового рядка (string), розділювач закінчення |
! |
0x21 |
33 |
Розділювач який задає початок нової інкапсульованої послідовності |
$ |
0x24 |
36 |
Розділювач, що задає початок повідомлення |
* |
0x2a |
42 |
Розділювач контрольної суми |
, |
0x2c |
44 |
Розділювач полів |
\ |
0x5c |
92 |
Розділювач блоку TAG |
^ |
0x5e |
94 |
Розділювач для представлення HEX даних за стандартом ISO/IEC 8859-1 (ASCII) символи |
~ |
0x7e |
126 |
Зарезервовано |
Максимальна довжина повідомлення 82 символи, що включає початковий символ $ або ! і закінчення <LF>
Почаковим символом для кожного повідомлення може бути або $ (для традиційних повідомлень, що мають розділювачі полів) або ! (для повідомлень що мають спеціальну енкапсуляцію в середині)
Наступні п'ять символів ідентифікують джерело інформації (два символи) та тип повідомлення (три символи).
Всі наступні поля даних розділено символами коми ,.
Якщо дані недоступні, відповідне поле залишається порожнім — відсутні символи між двома розділовими знаками (див. приклад повідомлень).
Наступним символом, що слідує одразу після останнього поля є зірочка, але воно додається лише якщо присутня чексума.
Безпосередньо за зірочкою йде контрольна сума, представлення двозначним шістнадцятковим числом. Контрольна сума обчислюється як побітове виключне АБО ASCII-кодів всіх символів повідомлення між $ та * (не включаючи ці два символи). Згідно офіційної специфікації, контрольна сума не обов'язкова для більшості повідомлень, але вона вимагається, зокрема, для RMA, RMB та RMC.
Закінчують повідомлення символи <CR><LF>.
Приклад повідомлення, що інформує про прибуття на точку маршруту має наступний вигляд:
$GPAAM,A,A,0.10,N,WPTNME*32
де:
GP |
Ідентифікатор джерела (Talker ID — GP для GPS-приймача, GL для GLONASS) |
AAM |
Сигнал прибуття |
A |
Входження у коло прибуття |
A |
Перпендикуляр пройдено |
0.10 |
Радіус кола |
N |
Морських миль |
WPTNME |
Назва точки прибуття |
*32 |
Контрольна сума |
Розширення виробників
На додаток до стандартного набору NMEA більшість виробників GPS додають у своїх продуктах спеціальні повідомлення для технічного обслуговування та діагностики. Розширені повідомлення починаються з послідовності символів $P (від англ. proprietary). Ці повідомлення не нормуються стандартом.
Приклад повідомлень
Приклад отримано з GPS-логгера Tripmate 850. Двосекундний файл записано у Лейксліп[en], Кілдер, Ірландія.
$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,8,1.03,61.7,M,55.2,M,,*76
$GPGSA,A,3,10,07,05,02,29,04,08,13,,,,,1.72,1.03,1.38*0A
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPGSV,3,2,11,02,39,223,19,13,28,070,17,26,23,252,,04,14,186,14*79
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,092750.000,A,5321.6802,N,00630.3372,W,0.02,31.66,280511,,,A*43
$GPGGA,092751.000,5321.6802,N,00630.3371,W,1,8,1.03,61.7,M,55.3,M,,*75
$GPGSA,A,3,10,07,05,02,29,04,08,13,,,,,1.72,1.03,1.38*0A
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPGSV,3,2,11,02,39,223,16,13,28,070,17,26,23,252,,04,14,186,15*77
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45
Зверніть увагу на порожні поля, наприклад:
У повідомленнях GSV з описом видимих супутників відсутнє поле SNR для супутника 16 і всі дані для супутника 36.
Повідомлення GSA з переліком супутників, використовуваних для визначення позиції[en] та величиною погіршення точності, має дванадцять полів для номерів супутників, але лише вісім супутників беруться до уваги, тому чотири поля залишено порожніми.
C-реалізація розрахунку контрольної суми
Контрольна сума кожного повідомлення обчислюється як побітове виключне АБО ASCII-кодів всіх символів повідомлення між $ та * (не включаючи ці два символи). Наступний код генерує контрольну суму для рядка, записаного у масив mystring та друкує її у вихідний потік. Для розрахунку взято одне з повідомлень з прикладу вище.
#include <stdio.h>
int checksum(char *s) {
int c = 0;
// Пропустити стартовий символ
if (*s == '$')
++s;
// До кінця рядка або до початку поля контрольної суми
while(*s != 0 && *s != '*')
c ^= *s++;
return c;
}
int main()
{
char mystring[] = "GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A";
printf("String: %s\nChecksum: 0x%02X\n", mystring, checksum(mystring));
return 0;
}
Сумісність
Стандарт NMEA 0183 широко підтримується навігаційними та картографічними програмами. Найвідоміші з них:
AggreGate Platform
gpsd[en] — GPS демон для UNIX-подібних операційних систем
Google Maps Mobile Edition[2]
JOSM — редактор даних OpenStreetMap
Статус
Стандарти NMEA є комерційними й станом на вересень 2015 року продавалися за ціною від $250 (для членів асоціації — від $165)[3]. Однак, більшість з них доступні з відкритих джерел завдяки зворотній розробці[4][5].
Станом на 2012 рік стандарт NMEA 0183 продовжував розвиватися: версію 4.10 було опубліковано на початку травня 2012 року, перелік помилок — 12 травня того ж року[6].
Новіший стандарт, NMEA 2000, передбачає вищу бітову швидкість та декілька «промовців» (talkers) без використання центрального хаба чи кільцевої буферизації пакетів.
Controller Area Network, (CAN) (локальна мережа контролерів, він же CAN-Bus і Інтерфейс CAN) — стандарт, призначений для організації високонадійних та недорогих каналів зв'язку у розподілених системах керування.
CAN розроблений компанією Robert Bosch GmbH[1] в середині 1980-х і знайшов застосування у промисловій автоматизації, технологіях «розумного будинку», автомобільній промисловості та інших галузях. Найчастіше CAN-інтерфейс використовується як зв'язна ланка між головною магістраллю та багатьма допоміжними датчиками, механізмами і т. д., підключення яких до центральної магістралі не завжди доцільне.
Загальна інформація
CAN є послідовною шиною, що підтримує одночасну роботу багатьох ведучих пристроїв. Це означає, що всі вузли CAN-мережі мають можливість передавати дані і декілька вузлів одночасно можуть давати запит на шину.
На ринку CAN присутній у двох версіях: версія 2.0А задає 11-бітову ідентифікацію повідомлень (тобто в системі може бути 2048 учасників), версія 2.0B — 29-бітову (536 млн учасників). Слід відзначити, що версія 2.0В, яку часто називають FullCAN, поступово витісняє версію 2.0А, яку називають, також, BasicCAN.
Магістраль CAN використовує двопровідникову звиту пару і працює з максимальною швидкістю трансляції 1 Мбіт/с на довжині до 40 м. Із збільшенням відстані зменшується максимальна швидкість трансляції (напр. 250 кбіт/с до 250 м).
Роз'єми для мережі CAN не стандартизовані. Кожен протокол високого рівня зазвичай визначає свій тип роз'ємів для CAN-мережі.
Топологія мережі CAN
У будь-якій реалізації мережа CAN — фізичне середовище передачі даних інтерпретується як ефір, в якому контролери, працюють як прийомо-передавачі. При цьому, розпочавши передачу, контролер не перериває прослуховування ефіру, зокрема він відстежує і контролює процес передачі поточних, передаваних ним же, даних. Це означає, що усі вузли мережі одночасно приймають сигнали, що передаються по шині. Неможливо послати повідомлення якомусь конкретному вузлу. Проте, CAN-контролери надають апаратну можливість фільтрації CAN-повідомлень.
CAN мережа призначена для комунікації так званих вузлів. Кожен вузол складається з двох складових. Це власне CAN-контролер, який забезпечує взаємодію з мережею і реалізує протокол, і мікропроцесор (CPU).
CAN-контролери з'єднуються за допомогою шини, яка має як мінімум два дроти CAN_H і CAN_L, по яких передаються сигнали за допомогою спеціалізованих прийомо-передавачів, котрі ще реалізують додаткові сервісні функції:
регулювання швидкості наростання вхідного сигналу шляхом зміною струму на вході;
вбудована схема обмеження струму захищає виходи передавачів від ушкодження при можливих замиканнях ліній CAN_H і CAN_L з колами живлення, а також від короткочасного підвищення напруги на цих лініях;
внутрішній тепловий захист;
режим зниженого енергоспоживання, в якому приймачі продовжують повідомляти контролер про стан шини для того, щоб при виявленні на шині інформаційних сигналів він міг вивести приймачі в нормальний режим роботи.
Область застосування
Протокол CAN спочатку проектувався для потреб автомобільної промисловості[2]. Компанії Chrysler, Ford, GM, Volvo, Audi, BMW, Renault, SAAB, Volkswagen, Toyota використовують CAN для контролю та управління системами автомобілів, в тому числі системами безпеки ABS і ASC. Тепер область використання CAN розширилася.
Типовими прикладами застосування CAN-мереж є системи контролю та управління:
текстильним обладнанням компаній Cezoma, Lindauer Dornier, Rieter, Schlafhorst, Sulzer;
поліграфічним обладнанням Heidelberger, Ferag;
пакувальними машинами EDF, Island Beverages, Northrup King, Soudronic, TetraPak, Wepamat;
деревообробним обладнанням компанії Homag;
виробництвом напівпровідників Applied Materials.
Серед інших важливих областей застосування CAN — промислова автоматизація та системи управління роботами. ABB, Bosch, Engel, Kuka та інші компанії вже застосовують CAN у своєму обладнанні.