PSOC КУРС: 7. UART

Для обміну даними між мікроконтроллером та комп’ютером, а також для відлагодження програм, дуже часто використовують інтефейс UART. В цій статті буде описано як його налаштувати на PSoC 4 та зробити інтерфейс комунікації з комп’ютером. Будуть розглянуті компоненти UART та Cotrol Register. Як демонстрація роботи буде керування світлодіодами із комп’ютера.

Теоретична частина

Для цього прикладу використана плата CY8CKIT-042 PSoC 4 Pioneer Kit. На цій платі знаходиться мікросхема U3, на якій реалізований програматор/дебагер, USB-UART Bridge та USB-I2C Bridge. При підключені плати по USB до комп’ютера в системі з’явиться вірутуальний COM-порт, через який можна буде обмінюватись даними з мікроконтроллером. Для роботи потрібно з’єднати USB-UART Bridge піни та піни мікроконтроллера як на малюнку (J8_10 – > J4 P0.4 , J8_9 – > J4 P0.5):

Світлодіодами можна керувати кількома способами: із програми, або за допомогою компонентів до яких підключений пін світлодіоду. Для прикладу вибраний другий спосіб, керування буде відбуватись за допомогою компонента “Control Register

Control Register” – дозволяє роботи “з’єднувати” програму та схему, тобто значення які записані в нього із програми передаються на його виходи, такий спосіб дозволяє зробити програму простішою. Цей компонент працює подібно до порта мікроконтроллера, тільки він може знаходитись в схемі. Наприклад, якщо потрібно включити всі світлодіоди записуємо у регістр 11111000, якщо потрібно щоб горіли тільки зелений та червоний записуємо 1111 1010 (як видно із схеми в даній платі включення відбувається “0“, а виключення “1“).

Для PSoC 4 доступні три 3 варіанти імплементації UART компонента:

Software Transmit UART – програмна реалізація UART.

UART(SCB mode) – зроблений на базі SCB блоків (Serial Communication Block)

UART – зроблений на базі UDB блоків (Universal Digital Block)

В цій статті використаний UART(SCB mode).

 

Практична частина

1. Налаштування проекту

Добавимо на схему компоненти “UART”, “Digital Output Pin” та “Control Register” та для зручності змінимо їх назви на UART та LED_Control відповідно.  З цією метою змінимо також піни  відповідно до кольорів світлодіодів якими вони керуватимуть. На платі знаходиться RGB світлодіод, керування кожним кольором відбувається незалежно.

Переходимо до налаштувань UART та Control Register: для UART все залишаємо без змін, а для регістру змінимо розрядність виходів,  оскільки в потрібно керувати тільки 3 світлодіодами, а щоб при влюченні живлення не горіли всі світлодіоди, задамо початкове значення “1“.

Вибираємо на які піни будуть виводитись сигнали UART та світлодіодів:

Тепер можна переходити до генерації проекту, після цього будуть доступні API функції для роботи з UART та LED_Control.

2. Опис роботи програми

Прототипи функцій для роботи з UART знаходяться у файлі UART_SPI_UART.h. Із всіх наявних потрібно тільки 3:

Функція ініціалізації UART:

Функція для відправлення  стрічки з ASCII символів.

Функція прийому символів з UART.

Прототипи функцій для роботи з LED_Control (Control Register) знаходяться у файлі LED_Control.h

компонент Control Register не потребує програмною ініціалізації, тому для роботи з ним потрібна тільки функція

Повний текст програми:

У вічному циклі відбується читання UART регістра за допомогою UART_UartGetChar() , та порівнняння його із командами керування світлодіодами. Якщо  команда знайдена, відбувається включення або виключення світлодіоду (в залежності який був попередній його стан. Стан світлоідів задається 3-ма бітами (0, 1, 2) змінної ledState наприклад 0-й біт відповідає за зелений (#define LED_GREEN (0u)) світлодіод. Якщо відповідний біт має значення “0” – світлодіод включений, якщо “1” то вимкнений. Значення цієї змінної записується в Control Register за допомогою  setLedValue() функції, і виставляється на пінах мікроконтроллера. Після цього по UART на комп’ютер відправляється повідомлення (наприклад для зеленого світлодіоду “Changed Green LED state”), що команда виконана, якщо введена неправильна команда, користувач побачить повідомлення: “Not correct command”

3. Робота із Tera Term 

Для роботи із UART на стороні комп’ютера використовується програма Tera Term. (можна використати Pytty, або інші аналоги). Налаштуємо її. Setup -> Serial port setup. Вибираємо номер порта та швидкість передачі даних (швидкість повинна бути така сам як в налаштуваннях компонента UART).

3. Створення *.bat файлу для роботи із COM портом в Windows

Можна автоматизувати роботу із COM портом, для того щоб кожного разу не вводити команди в ручному режимі. Такий підхід дуже зручний для тестування пристроїв. Ящо велика програма, то для цього найкраще підходить Python із бібліотекою PySerial. В моєму випадку достатньо кілька рядків для командрого рядка Windows, дякую автору цього сайту на якому я знайшов опис як це зробити. Для того щоб запустити команди на виконання потрібно скоміювати їх в командний рядок  Windows, або зберегти в файл із розширенням *.bat. Цей скрип спочатку налаштовує COM порт, а далі в циклі 10 раз відправляє команди почергового мигання світлодіодами:

Демонстрація роботи

 

PSoC Creator проект для PSoC 4200 можна завантажити з Hithub.