PSoC 1. Первое знакомство.

Блог им. Nemo


Есть така замечательная фирма Cypress, она выпускает много чего. Мне понравились их микроконтроллеры (хотя так называть не совсем правильно).PSoC — система на кристале — тоесть, у вас есть набор ячеек, и набор разной переферии, ядро микроконтроллера (PSoC 1 и PSoC 3 — 8 битное, в PSoC 5 — Cortex M3), и можно собрать что нужно. Сначала работал с серией PSoC 1, тепер больше с PSoC 1 и PSoC 5.

Когда был только сайт bsvi.me и не было сообщества, написал статюю по работе с микроконтроллером PSoC1 (система на кристале): PSoC 1. Быстрый старт. Так что статья не плагиат, а просто решил поделиться и тут, так сказать внести свой вклад в сообщество :)

Дня начала работы нам нужно:

Микроконтроллер, у меня cy8c27443
Программатор Cypress ICE-Cube, Cypress MiniProg или самодельный (видел в интернете, но точных ссылок дать не могу).
Среда разработки PSoC Designer, скачиваем на официальном сайте:Cypress.
Хорошо если есть борд, но можно и без него, просто распаять на макетке или при большом желании сделать свой. У меня CY3210-MiniEval1, и все примеры сделаны на ней.
По старинной традиции, первая программа будет мигать светодиодом :)Чтобы не было совсем скучно, используем для мигания светодиода модуль — даже об этом позаботились:) (конечно можно мигать светодиодом классическим способом — настроили порт, и кидаем туда 0 и 1 через задержки) и поработаем с DAC.
Запускаем среду PSoC Disigner 5.3 заходим в File -> New Project:

Задаем имя проекта, папку в которой будем сохранять, выбираем микроконтроллер из списка и язык С.
Кратко опишу среду разработки:

  1. Настройка глобальных параметров, таких как тактовая частота,3 разних частоты полученных с тактовой,PLL(умножение тактовой частоты на 2), опорное напряжение для АЦП, и другие. Подробно о каждом параметре можно почитать тут
  2. Цифровые блоки и порты I/O. В каждой цифровой блок можно вставлять модуль переферии, и подключать к выводам портов.
  3. Настройка параметров модуля.
  4. Настройка выводов I/O.
  5. Аналоговые блоки и порты I/O.
  6. Структура проекта и сгенерированные библиотечные файлы.
  7. Модули переферии, которые вставляються в цифровые или аналоговые блоки.

*Не все модули занимают цифровой или аналоговой блок. Есть ограничение — не каждый модуль можно подключить к выводу порта который нужный.

Очень интересной и удобной особенностью IDE, есть то что при установке также загружуються даташиты. И посмотреть как работать с каждым модулем можно очень просто. Покажу на примере. Мы будем использовать модуль LED, но допустим, как с ним работать еще не знаем:

Открываем даташит, смотрим в самом верху страницы:

Видим что модуль не использует ни цифровых ни аналоговых блоков. Внизу схема для работы с разным включением светодиода. Дальше описание всех API функций, и пример программы на ассемблере и С:

С модулем познакомились, теперь добавим его к проекту, кликаем по нему два раза и он добавляеться:

Переходим в окно просмотра и редактирования параметра модуля:

тут все просто: для удобства редактируем имя модуля, выбираем порт, вывод к которому подключен светодиод, и схему включение с ОА или ОК.

Аналогическим образом добавляем модуль DAC. Модуль установился в ячейки ASC10, ASC20, но при желании можно переместить в другие ячейки. Чтобы посмотреть до которого вывода можно подключить выход DAC — нажимаем «Shift» и кнопкой мыши нажымаем на вывод модуля «AnalogBus», линия показывает нам что в этих ячейках, мы можем подключиться только до вывода Port_0_3 (порт 0, вывод 3):

чтобы соединить выход модуля с выводом порта, удерживаем «Shift» и кликаем на выходе модуля, и на выводе:

настраиваем параметры модуля:


Когда все модули будут настроены и соединены с выводами портов(если нужно). Заходим в Build — > Generate/Build project или нажимаем иконку:


Начнеться генерирование проекта и API функций.
Как настроены выводы, или их настроить можно здесь:



Когда проект сгенерируется заходим в структуру проекта, и выбираем сгенерированный файл для работы со светодиодом:


открываем файл, видим список функций, и копируем нужные в main.c:


напишем небольшую программу для мигания светодиодом, и выводом значений на DAC:

//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

unsigned char DAC_Counter = 0;

void Delay(unsigned int value)
{
	unsigned int i = 0;
	for (i = 0; i < value; i++);
}

void main(void)
{
	LED_TEST_Start();  
	DAC8_1_Start(DAC8_1_HIGHPOWER);
	
	//M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
	
	// Insert your main routine code here.
	while(1)
	{
		LED_TEST_Invert();
		
		DAC8_1_WriteStall(DAC_Counter);
		
		DAC_Counter += 10; 
		if (DAC_Counter == 250) DAC_Counter = 0;
		
		Delay(50000);
	}	
}


Прошиваем проект — заходим в Program -> Program Part. Идет процесс прошивки:


Осцилограмма сигнала на выходе DAC:



А теперь можно посмотреть сколько ресурсов занимает конфигурация и код. Заходим в View -> Resource Meter:



Всем спасибо за внимание!

20 комментариев

avatar
Ну и где… где супер видео с мигающим светодиодом :) Одной осциллограммы мало.
Случайно с ПАИС не имел дело?
avatar
Светодиод мигает, поверте:) К сожалению с ПАИС совсем не работал. Немного работал с FPGA Altera на Verilog, а сейчас пробую писать свои модули на Verilog для PSoC 3 и PSoC 5 — там есть такая возможность.
avatar
Что-то очень мало там цифровых блоков — 16 всего. Или там блок сложную структуру имеет? А про программинг для этого на верилоге тоже интересно было бы.
avatar
Мало блоков только в PSoC 1, и тут на верилоге не напишеш. Такая возможность закрыта, но думаю при большом желании можно.
avatar
О, кстати, а асинхронную логику на этих блоках можно делать? Или только синхронную?
avatar
в PSoC 3 и PSoC 5 блоков как в CPLD. А логику можно делать абсолютно разную, и место относительно есть. ( примерно как на плате в марсходе):
avatar
В серии PSoC 3 и PSoC5 — среда очень похожа на квартус — есть схемный лист, и каждый вывод можно подключать к разным пинам. Можно сделать чтобы логика работала и без процесора. Будет немного больше времени, напишу как с ними начать работать.

avatar
Очень круто. Нужно было юзать это в текущем прожекте (simpleTesla), но уже, считай все сделал на stm-ке.
avatar
штуки класние, но немного дорогие.
например: цена.
avatar
и огромный +, FreeRTOS поддерживает PSoC 5 :)
avatar
А можно ли (и как) на PSoC 3 или 5 сделать аппаратный deadtime без использования внешних элементов?
avatar
deadtime — для PWM, я правильно понял?
avatar
нет, для переключения комплементарных ключей.
avatar
1. Путь использовать модули PWM, вот настройка:

2. Путь, найти или самому написать модуль на Verilog
avatar
Правильно ли я понимаю, что для самописных модулей будет расходоваться процессорное время?
avatar
Нет, самописние модули независимие от процесора. Они используют только логические блоки. Но можно сделать так чтобы управлять модулем с процесора.
avatar
PSoC 3 & 5 = цифровые блоки (как в СPLD или FPGA)+ процессорное ядро (8 бит, или ARM). Вся переферия API блоки, тоесть в незапрограммированой микросхеме совсем нет переферии :)) (например как в AVR, PIC...)
avatar
Может кто-нибудь рассказать, как работают элементы типа Filter и DMA? И вообще очень нехватает информации об PSoC 3 и PSoC5 на русском языке.
Буду очень рад всем публикациям на эту тему!
avatar
DMA роботает также как в и других микроконтроллерах. Подробнене как работает в Cypress можно почитать тут:AN61102 — PSoC® 3 and PSoC 5LP — ADC Data Buffering Using DMA и там же видео есть.

Блок фильтр представляет цифровой фильтр, где можно менять параметры. Может использоваться в цепочке ADC -> Digital Filter -> DAC. Кратко можно увидеть на картинке:

Будет немного больше времени закончу публикацию по работе с PSoC3 PSoC 5, и как создавать свои модули на Verilog.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.