PSoC Курс: 2.”Hello World!”

В embedded програмуванні “Hello World!” це мигання світлодіодом. PSoC дає можливість зробити “Hello World!” програмно та повністю апаратно. В цій частині буде продемонстровано як це зробити.

Створення проекту

1. Вибираємо мікроконтроллер, для цього вибираємо File -> New Project -> Target device
Плата CY8CKIT-042 PSoC 4 Pioneer Kit  використовує CY8C4245AXI-483 сімейства PSoC 4200


2. Вибираємо Empty Schematic – схему будемо створювати самі

3. Вибираємо папку для збереження проекту. На цьому етап створення проекту закінчений. В майбутніх частинах я не буду повертатись до цих кроків, так як вони одинакові для створення проектів на різних мікроконтроллерах.

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

На платі є трьохколірний LED D9, його використаємо для нашого проекту. Із схеми видно що цей LED включається “0”, а виключається “1”. Червоний світлодіод буде керуватись апаратно, зелений програмно.

Переходимо до створення схеми в PSoC Creator, для цього із бібліотеки компонентів (Cypress Component Catalog) вибираємо “Digital Output Pin” та переносимо його на схему. Після цього змінюємо його ім’я на потрібне – LED_RED. Цей LED буде керуватись апаратно, тому залишаємо галочку “HW connection”. Таким же способом добавимо LED_GREEN, але оскільки він буде керуватись програмно, потрібно забрати галочку “HW connection”. Для більшої деталізації схеми потрібно поставити галочку “External terminal”, це дозволить підключати компоненти із “Off chip” бібліотеки. Ці компоненти ніяк не впливають на функціонал, а є тільки для документації схеми.

Додамо ці компоненти до схеми, для цього заходимо в “Off chip” та вибираємо із неї резистори,світлодіоди та живлення. Вийде наступна схема:

Створимо схему для апаратного мигання світлодіодом, для цього із бібліотеки компонентів виберемо “Clock”, “Togle Flip Flop” та “Logic High”. PSoC 4 не дозволяє напряму з’єднати “Clock” з LED  (це можна зробити в PSoC 3 та PSoC 5),тому використаний тригер – така схема ділить тактову частоту на 2. В прикладі 10Hz / 2 – червоний LED буде мигати із частотою 5Hz. Цей варіант хороший тим що зовсім не використовується процесор мікроконтроллера, що дозволяє використати його для інших завдань.

Тепер зробимо мигання зеленого світлодіоду програмно, для цього переходимо в main.c та напишемо програму. Після генерації проекту нам стали доступні API функції для роботи із світлодіодами. Для зеленого вони знаходяться в файлі LED_GREEN.h. Нам потрібна тільки функція встановлення логічного рівня, її прототип:

Також використаємо функцію затримки CyDelay прототип якої  знаходиться в файлі CyLib.h.Цей файл автоматично підключений до всіх проектів зроблених в PSoC Creator.

Ми отримали просту програму для мигання зеленого світлодіоду. Така програма демонструє використання API функцій для написання потрібного функціоналу. Такий варіант програмного коду хороший для демонстрації, але не оптимальний з точки зору використання процесорного ядра –  під час виконання функцій затримки процесор не робить ніякої корисної роботи. Для усунення цього недоліку існують різні способи, наприклад використання таймера, або як варіант описаний вище спосіб апаратного керування виводом мікроконтроллера.

Схема та програма завершена тепер потрібно налаштувати відповідності між схемою та виводами мікроконтроллера. Для цього переходимо в файл з розширенням *.cydwr. та вибираємо із списку потрібні нам виводи. В нашому випадку це будуть P0[2] та P1[6]. Як видно із конфігурації можна легко перенести сигнал на потрібний вивід мікросхеми, що в багатьох випадках спрощує розводку друкованої плати.

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

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

Після всіх зроблених кроків червоний світлодіод мигає з частотою 5Hz, зелений – 1Hz: