PSOC КУРС: 6. SPI + Переривання

В цій частині я опишу як працювати з компонентами SPI  та Interrupt в PSoC 4. Прикладом використання  буде динамічна індикація на семисегментному індикаторі з використанням комунікації по SPI між PSoC та регістром зсуву 74HC595.

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

7-ний індикатор являє собою набір світлодіодів розміщених в такому порядку, що дозволяють відображати потрібні цифри. Підключення світолодіодів у таких індикаторів буває із спільним анодом та катотодом. Для того що відобразити на індикаторі із спільним катодом (CC) цифру “7” потрібно подати “+” живлення на входи a, b, c, а на вхід Gnd (або спільний катод) “-” джерела живлення. На індикаторі із спільним анодом (CA) все із точністю до навпаки. Для відображення потрібної кількості цифр використовуються декілька таких індикаторів. Формуючи потрібний сигнал на виводах таких індикаторів ми можемо відображати потрібну інформацію, для цього можуть використовуватись різні логічні мікросхеми, мікроконтроллери, FPGA.

Існує два типи підключення 7-них індикаторів:

  1. Статична індикація.
    В цьому випадку всі виводи індикатора заведені на керуючу мікросхему. Такий спосіб є дуже простим, в керуванні, але забирає велику кількість виводів мікросхеми. Наприклад для одного індикатора буде потрібно 8 виводів мікросхеми (7 виводи сегментів + спільний), якщо таких індикаторів буде 4 потрібно 32 виводи. В деяких мікроконтроллерів це всі його піни. Такий спосіб підключення ускладнює друковану плату і є не ефективним. Цей спосіб керування використовувався в старих присторях на логічних мікросхемах, де на кожний індикатор була своя мікросхема дешифратор. В даний час він застрарілий, і практично не використовуєтсья, а описаний тільки для розуміння роботи.
  2. Динамімічна індикація.
    виводи всіх сегментів індикаторів  з’єднані між собою, а на спільні виводи подається сигнал який влючає потрібний індикатор. Приклад схеми з’єднання мікроконтроллера MC32C/85 та двох 7-них індикаторів. Як правило спільні виводи індикаторів комутуються через транзисторні ключі, оскільки такий індикатор споживає значний струм і може пошкодити порти мікроконтроллера до якого він підключений.

Така схема працює наступним чином: по черзі на кожний індикатор подається сигнал з кодом потрібної цифри, в цей самий момент на спільний вивід подається сигнал включення індикатора, потім подається сигнал іншої цифри виключається попередній індикатор і активується той на якому має бути ця цифра, і так по колу. Це робиться з частотою від 50Гц для того щоб ми могли бачили постійне зображення (за рахунок інерційності людського ока ). Така схема спрощує розводку друкованої плати, але вимагає складнішої програми для керування в порівнянні із статичною індикацією.

На відео видно як відображається значення “1234” при низькій частоті переключення індикаторів:

В якості дисплея використана плата від не працюючого  приладу КВП і А. На цій платі знаходиться 7-ні ідикатори, транзисторні ключі  та  регістр зсуву 74HC595, що дозволяє керувати дисплеєм по 3 проводах:

Для цього ідеально підходить SPI компонент. На аноди індикаторів подається сигнал переключення, оскільки  на платі  ключі p-n-p транзистори то включення відбується “логічним 0“, сигнали керування мають вигляд:

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

1. Схема та опис роботи

Основу проекту складає схема зібрана з наступних компонентів:
Clock  – компонент який є джерелом тактових сигналів, потрібну частоту задається у властивостях компонента
Toggle Flip Flop – T- тригер на виході якого значення якого змінюється при кожному фронті тактового сигналу
SPI Master – забезпечує комунікацію по інтерфейсу SPI
Interrupt – призначений для створення переривань

 

Джерелом тактового сигналу у схемі є компонент Clock, який для зручності переіменований в clk. Частота тактового сигналу 500 Hz подається на вхід T – тригера і на його виході буде сигнал частотою 250 Hz.  Використаний дисплей який з 4-ма індикаторами, тому для того щоб,  бачити стабільне забраження без мерехтіння потрібна частота оновлення кожного індикатора не менше 50 Hz і нашому випадку ця частота буде 250 Hz / 4 = 62.5 Hz. Для того щоб отримати переривання з такою частотою до виходу тригера підключений компонент Interrupt (для зручності він переіменований в ClkISR). PSoC Creator не дозволяє пряме підключення компоненту Clock до Interrupt, тому використаний T- трігер, а оскільки він ділить частоту на 2, тому тактовий сигнал повинний бути 500 Hz. Для цього випадку може бути використаний компонент Frequency Divider, але для мого випадку достатньо ділення на 2 тому я вибрав Toggle Flip Flop.

З періодичністю  62.5 Hz спрацьовує переривання, в якому відбувається надсилання даних по інтерфейсу SPI за допомогою API функції SPIM_WriteTxData() SPI Master компонента.  Після закінчення передачі по SPI спрацьовує переривання, в обробнику якого на піні Pin_Enable  фурмується строб імпульс для запису даних в регістр зсуву 74HC595. Часова діаграма сигналів Pin_Data, Pin_Clk, Pin_Enable має вигляд:

 

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

Оскільки основна робота пристрою відбувається в перериваннях, то для користувача достатньо мати дві API функції для роботи з дисплеем, а саме:

  • Функція ініціалізації яка призначена для налаштування роботи всіх компонентів PSoC:

  • Функція оновлення інформації на дисплеї, яка займається перетворенням десяткового вхідного значення в окремі числа для індикаторів, та заповнення відповідних буферів дисплею:

Приклад програми яка  демонструє зворотній відлік:

Програму для PSoC, а також електричну схему світлодіодного індикатора можна завантажити з Hithub.

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