РадіоКот :: Про розробку додатків на PSoC-4 фірми Cypress

Наши партнеры ArtmMisto

>>


Про розробку додатків на PSoC-4 фірми Cypress

теорія

Це моя третя стаття про роботу з PSoC (Programmable System on Chip) фірми Cypress. У перших статтях [1, 2] я розповідав про розробку додатків для Bluetooth Smart модулів за допомогою системи PSoC Creator. Зараз мова піде про один з сімейств PSoC фірми, що не містять Bluetooth модуля. Крім лінійки ARM Cortex мікроконтролерів, успадкованих від фірми Spansion після злиття з нею навесні 2015-го, у Cypress є і свій багатий досвід розробки одночипових програмованих систем. Ми розглянемо сімейство PSoC 4, яке містить на борту масу аналогових і цифрових блоків. На перший погляд, PSoC мало чим відрізняється від мікроконтролерів (МК), у яких є аналогічна по функціоналу периферія в вигляді всіляких таймерів, АЦП, операційних підсилювачів, компараторів тощо. Однак, в МК периферія перед початком роботи повинна бути налаштована процесором, в той час як у PSoC периферія конфігурується незалежно від процесора, хоча вона також може бути спочатку налаштована і в будь-який момент переконфігурувати останнім. Крім цього, завдяки розвиненій системі аналогових і цифрових мультиплексорів, більшість висновків периферії можна призначити практично на будь-які висновки корпусу, в той час як у МК для цього зазвичай є лише кілька варіантів вибору. Це робить PSoC дуже гнучкою у використанні.

Повний комплект технічної документації на PSoC з описом всіх регістрів займає близько 5000 сторінок тексту (так, я не помилився з нулями). Однак, розробка систем на PSoC відбувається буквально граючи завдяки чудовій системі PSoC Creator з інтуїтивним графічним інтерфейсом. Система доступна для безкоштовного скачування з веб фірми і вільна від будь-якого роду обмежень, таких як, наприклад, розмір коду. Бортовий МК в PSoC виконаний по архітектурі Cortex-M0 і має до 128Кб флеша і до 16Кб RAM в залежності від моделі. Максимальна частота тактирования його состаявляет 24 і 48мгц для моделей 41хх і 42хх, відповідно.

Для початкового ознайомлення з PSoC 4 фірма пропонує кілька недорогих демо-плат. Перш за все, це плати CY8CKIT-049-4xxx за ціною всього 4 USD.

PSoC на такій платі програмується через бутлоадер за допомогою USB-UART конвертера в лівій частині плати. Конвертер виконаний на основі чіпа CY7C65211 [3]. При бажанні PSoC також можна запрограмувати через ARM-івський SWD інтерфейс, задіявши 5 висновків в правому нижньому куті плати. Після розпаювання штирьових конекторів плати можуть бути використані спільно з беспаячной макетке. Бутлоадер, як відомо, надає лише можливість програмування чіпа, але не дозволяє виробляти внутрісхемний налагодження його коду. Крім того, на жаль, бутлоадер завантажений фабрично тільки в чіпи, встановлені на демо-платах. Для усунення цих недоліків у фірми також є демо-плати CY8CKIT-043 з внутрісхемним программатором / отладчиком на борту з інтерфейсом SWD, але вартістю в 10 USD.

Зверніть увагу на те, що програматори / отладчики на цих платах можуть бути легко відділені від основних плат і використані також і для програмування / налагодження PSoC чіпів поза плати в пристрої користувача. Крім цих демо-плат є кілька інших, більш дорогих, але і з набагато більш розвиненим функціоналом отпадочних плат, і з роз'ємами, що дозволяють використовувати ці плати спільно з зовнішніми Шілд для Arduino.

Стандартним штатним программатором / опладчіком для PSoC фірми вважається MiniProg3. Однак, окремо він чомусь коштує близько 90 USD, в той час як його можна отримати майже вдвічі дешевше в складі набору CY5672 поряд з кількома іншими цікавими «штуками» в наборі. Зазначу, що проекти з PSoC Creator можна перенести в системи Keil MDK і IAR Workbench, і після установки плагіна програмувати PSoC універсальним інструментом ULINK. Однак, через специфіку виробів першої програмування (або установку в чіп бутлоадер) можна здійснити тільки за допомогою MiniProg3 або SWD-программаторами на демо- або налагоджувальних платах.

Час від часу у мене з'являються міні-проекти з використанням сегментних РКІ, тому з усіх блоків PSoC я вирішив зробити в статті наголос на конфігурацію блоку управління таким дисплеєм. У PSoC реалізований оригінальний метод генерування керуючих сигналів для мультиплексного РКІ і управління його контрастом з допомогою ШІМ. Дуже приємно, що будь-який висновок корпусу крім харчування можна відрядити під управління РКІ. Це також стосується загальних висновків COM дисплея, що відчутно спрощує розведення друкованої плати. У тестовій схемі нижче PSoC управляє 4-значним РКІ, які працюють в режимі мультиплексу 1: 4. Висновки 1-4 РКІ призначені для керуючих сигналів COM0 - COM3. Схема вимірює температуру повітря з допомогою I2C сенсора і відображає її на РКІ. Зауважте, що PSoC працездатна в широкому інтервалі живлячих напруг 1.71 - 5В.

Схема зібрана на беспаячной макетке з метою тестування на токопотребление. Вимірювання температури проводиться сенсором з періодом в 5 сек.

Для цього проекту нам знадобляться 3 блоку PSoC: блок контролера РКІ, дефолтних тактируемого від системного генератора (в нашому проекті система тактується на частоті 6 мгц), і блок інтерфейсу I2C для комунікації з сенсором. Виберемо їх в правій панелі каталогу компонентів і перетягнемо мишкою на панель компонування системи.

Перед налаштуванням LCD модуля корисно поглянути на терморегулятори РКІ в його ДШ. Як випливає з таблиці нижче, наш РКІ має 4 загальні висновки (COM0 - COM3) і 8 сегментних (висновки 5 - 12). У стовпчиках таблиці для кожного виводу РКІ вказано який з чотирьох підключених до нього сегментів працює в парі з яким загальним висновком.

Клікнувши 2 рази на іконку LCD виставимо в вікні потрібне число загальних і сегментних висновків і тактирование від низькочастотного генератора частотою 32 кГц, щоб РКІ працював при зануренні МК в режим глибокого сну. Нижні два параметра слід підібрати залежно від конкретної моделі РКІ експериментально. Чим більше частота кадрів, тим глибшою виходить регулювання контрасту РКІ. Токопотребленіе при цьому зростає незначно.

Далі натискаємо на закладку Display Helpers і натисканням на зелену стрілку переносимо опцію 7 Segment для нашого дисплея з вікна Helpers в вікно Selected helpers. Потім натискаємо кілька разів на зелений "+" в Helper Function Configuration і добиваємося появи чотирьох вісімок по числу розрядів застосованого РКІ. Наш РКІ має 8 сегментних висновків (висновки 5 - 12 в таблиці вище). Для кожного з них слід сформувати сигнали управління на висновках PSoC, які позначені як Seg0 - Seg7. Припустимо, що висновок Seg0 у PSoC обслуговуватиме сегменти на виводі 5 у РКІ. Згідно таблиці вище, під час фаз COM0 - COM3 висновок 5 управляє, відповідно, сегментами 1D, 1E, 1G, 1F лівої цифри. Перенесемо мишкою відповідні сегменти в зазначеному порядку в рядок Seg0 в таблицю Pixel mapping table. Аналогічно заповнимо інші рядки. При цьому конфигуратор автоматично замінить дефолтні назви сегментів PIXm в таблиці на імена типу H7SEGn_A, де n - номер цифри, рахованої зліва направо.

Зазначу, що конфігуратор призначає свої імена тільки стандартним сегментам A - F і не перейменовує сегменти десяткових точкек і інших спецсимволов, що відображаються РКІ. У програмі для керування такими символами слід використовувати дефолтні імена сегментів PIXm з таблиці. Далі натискаємо на закладку Pins конфігуратора висновків корпусу PSoC і вибираємо на яких його висновках ми хочемо отримати сигнали COM0 - COM3 і Seg0 - Seg7, а також заодно виберемо висновки під I2C інтерфейс.

Далі натискаємо на закладку Clocks в нижній частині цього вікна, потім на Edit Clock і встановлюємо частоту тактирования системи 6МГц. Налаштування I2C модуля можна не проводити, поклавшись на його дефолтні установки, зокрема тактирование лінії I2C на частоті 100кГц.

Тепер можна скомпілювати проект через меню Build. В результаті отримаємо масу автосгенерірованного коду налаштувань периферії. Таким чином, ми впритул підійшли до більш «інтелектуальною» частини роботи - написання коду програми. Як видно з коду, в даному випадку програма практично складається з виклику API функцій роботи з модулями. У рядках 7-13 ми дозволяємо переривання і конфігуруємо таймер Watchdog0 на пробудження чіпа кожну секунду. Далі в рядках 15-21 инициализируем блоки I2C і контролера РКІ і індіціруя десяткову точку і символ C на дисплеї. У головному while (1) циклі при пробудженні зі сну вважаємо число пробуджень за допомогою змінної updateCnt і по її обнулення читаємо в рядках 29-35 температуру з сенсора, виробляємо запит на нове її вимір, і показуємо її поточне значення на дисплеї. При цьому API роботи з РКІ навіть самі розбивають показуване на дисплеї число на складові його цифри і відображають їх у розрядах РКІ, визначених параметрами (див. Деталі в ДШ).

Наведу також код драйвера сенсора температури TMP112. Перша його функція служить для посилки в сенсор запиту за виробництво нового виміру, а друга - для читання з нього значення температури. Завдяки ємним іменах API функцій PSoC код цей написаний майже на «людському» мовою і в коментарях навряд-чи потребує.

Слід сказати кілька слів про драйвер РКІ. Він може працювати в двох режимах: Digital correlation і PWM. В обох випадках він генерує чисто цифрові сигнали на сегментних і загальних висновках РКІ. У першому режимі (наш випадок) драйвер тактується від низькочастотного генератора і може працювати коли PSoC знаходиться в режимі глибокого сну. Епюри напруг для цього режиму на одному із загальних і сегментних висновках РКІ, які працюють в мултіплексном режимі 1: 4, показані на лівій картинці нижче. На правій зображенні ці-ж епюри показані з більшим дозволом. Як видно, на осцилограмах відсутні звичні в подібних випадках ступінчасті аналогові сигнали з 4-ма рівнями напруг.

Цей режим особливо добре підходить для РКІ виконаних за технологією STN (Super Twisted Nematic). Такі дисплеї, в порівнянні з їх TN побратимами, як правило, більш якісні і забезпечують кращий контраст. Більшість недорогих РКІ дисплеїв виконано за технологією TN, в тому числі і наш, і контраст зображення на них нижче. При використанні драйвера PSoC з TN дисплеями кілька зменшується кут їх огляду, що особливо помітно на РКІ малих розмірів. Однак, в будь-якому випадку параметри огляду РКІ виходять прийнятними для більшості додатків. Нижче для порівняння показаний контраст на TN РКІ моделі Varitronix VIM-404, що працюють в режимі з мультиплексом 1: 3 під керуванням того-ж драйвера PSoC.

Нижче для порівняння показаний контраст на TN РКІ моделі Varitronix VIM-404, що працюють в режимі з мультиплексом 1: 3 під керуванням того-ж драйвера PSoC

Контраст зображення виходить відчутно кращим при роботі драйвера в режимі PWM, де для фільтрації імпульсів при формуванні аналогових рівнів на висновках РКІ використовуються його міжелектродні ємності і навіть послідовно включаються з сегментами резистори. На жаль, такий режим можливий тільки при Тактирование драйвера від високочастотного генератора системи, що не дозволить занурити її в режим глибокого сну з працюючим при цьому дисплеєм. Таким чином, більш високу якість зображення виходить за рахунок підвищеного токопотребленіе.

Практика: Fridge Processor

Ідея описуваного нижче пристрої належить моїй дочці і має гучну назву процесора для холодильника. По суті воно являє собою лічильник часу для тривалості зберігання продуктів в холодильнику. Кілька таких лічильників дозволять оцінити придатність до їжі різних знаходяться в ньому продуктів. Час показується в форматі HH: MM, якщо воно знаходиться в діапазоні 0 - 24 годин, і в форматі DD | HH (з трьома вертикальними точками замість риси) для діапазону 1 - 99 днів.

Крім відліку часу прилад має режим термометра, що зручно для перевірки роботи холодильника (але не морозильної камери, оскільки використаний РКІ не призначений для роботи при низьких негативних температурах). Нижня межа вимірювання температури пристроєм -9.9 ° С. Схема приладу аналогічна показаної вище. Зміни торкнулися инвертирования висновків РКІ, введення кнопки перемикання режимів, і комутації харчування сенсора температури з виведення МК. Цим досягається економія близько 1.2 мкА (більше 50%) середнього токопотребленіе схеми. Пристрій живиться від літієвої батареї CR2032, споживаний струм в режимі таймера з працюючою індикацією близько 2 мкА. Розміри пристрою 32 × 21 × 8 мм.

Перемикання приладу між режимами таймера і термометра здійснюється короткочасним натисканням на кнопку. Тривале (більше 4 сек) натискання кнопки в режимі таймера призводить до його обнулення, а в режимі термометра до перемикання між шкалами Цельсія і Фаренгейта. Таким чином, відлік часу проводиться пристроєм в будь-якому випадку, навіть якщо воно знаходиться в режимі термометра. Однак, в режимі показу часу на РКІ вимір температури не проводиться. Нижче показаний монтаж приладу на двох платах, складених сендвічем. На нижній платі закріплений тільки держатель батареї. Всі інші деталі схеми встановлені на верхній платі. При програмуванні чіпа програматор тимчасово підпоюють до контактних площадок на верхній платі. Плати виготовлені з фольгованого текстоліту товщиною 0.8 мм.

Оскільки ця модель PSoC не має вбудованого генератора для роботи з годинниковим кристалом, а частота внутрішнього низькочастотного генератора ILO нормується в широких межах і схильна до впливу температури, для підвищення точності відліку часу проводиться періодична підстроювання частоти ILO за допомогою вбудованого високочастотного генератора. Точність фабричної установки частоти високочастотного генератора гарантується виробником в межах ± 2% у всьому температурному діапазоні роботи системи. Для реалізації підстроювання використаний спеціальний модуль PSoC - ILO Trim. Точніше, замість зміни частоти генератора ILO змінюється коефіцієнт подільника його частоти для отримання секундних імпульсів. Програмно це здійснюється одним рядком коду виклику API функції ILO_Trim_Compensate (). Параметром цієї функції є бажане число циклів подільника (в нашому випадку 32000 для номінальної частоти ILO 32кГц), а повертається їй значення - фактичне число циклів подільника, яке слід завантажити до відповідного регістру лічильника. Простіше не буває! Частота 3МГц автоматично подається на вхід цього блоку тільки на час обчислення коефіцієнта компенсації, виробленого з періодом 1 хв. Гарантована при цьому точність ± 10% достатня для нашого застосування. Для реалізації пристрою задіяні такі компоненти PSoC:

Для реалізації пристрою задіяні такі компоненти PSoC:

Вимірювання температури в режимі термометра проводиться кожні 10 секунд. Для генерації цих інтервалів задіяні Watchdog0 і Watchdog1, що працюють в режимі таймерів. При цьому 16-бітний лічильник Watchdog0 програмно налаштований як прескейлера для Watchdog1, а обнуління останнього виробляється кожні 10 секунд, що і визначає період вимірювання температури. При обнулення генерується переривання, що виводить PSоC з режиму глибокого сну.

Елементи показані синім кольором на панелі компонентів вище є зовнішніми для PSoC. Я їх вибрав з каталогу Off-Chip зовнішніх компонентів системи PSoC Creator виключно для наочності. При замиканні кнопки PSoC виробляє визначення знака зміни напруги на виводі Button МК (цей висновок забезпечений внутрішнім підтягуючим резистором) і формує сигнал на вході модуля апаратного переривання Button_ISR. Для подaвленія брязкоту кнопки використовується формувач коротких тимчасових інтервалів на основі таймера Watchdog2, активизируемого після натискання кнопки. Висновок PWR (від Power) налаштований на комутацію харчування сенсора температури.

У висновку пара зауважень. Незважаючи на документацію, задіяти внутрішні підтягує резистори на лініях I2C цієї моделі PSoC не вдається. Це відомий розробникам hardware bug, будемо сподіватися на його усунення в наступних ревізіях чіпа. Далі, для досягнення заявленого вище токопотребленіе необхідно перевести висновки SWD інтерфейсу PSoC (P3.2 і P3.3) з дефолтного режиму відладки в режим GPIO. Це здійснюється в закладці System конфігуратора пинов, показаної вище.

В цілому, система PSoC Creator є на мій погляд найпростішої для освоєння з усіх систем програмування ARM контролерів, з якими мені довелося мати справу. Відрадно, що вона доступна для вільного скачування і в ній відсутні будь-які обмеження на обсяг коду. На веб-сайті фірми є багатосерійні відео по роботі з нею, доповнені численними проводами в форматі PDF, а також прикладами програм роботи з модулями. Широкий діапазон робочих напруг PSoC дозволяє безпосередньо використовувати їх в системах з живленням від 5В. У наведеному нижче архіві міститься повний проект firmware приладу і файл його плат для Eagle.

  1. Bluetooth Smart Broadcaster на RSoC фірми Cypress
  2. Реаліазція стандартного GATT-BLE профілю на RSoC фірми Cypress
  3. Про USB-Serial конвертері на CY7C65211 і сенсорі тиску LPS25H

файли:
Архів ZIP


Всі питання в Форум .


Главное меню
Реклама

Архив новостей
ArtmMisto
Наши партнеры ArtmMisto. Игроки могут начать свое азартное приключение на сайте "Buddy.Bet", который только что открылся для всех ценителей азарта.

Реклама

© 2013 mexpola.h1a25414f