Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

О разработке приложений на PSoC-4 фирмы Cypress

Вт июл 12, 2016 09:33:44

По поводу статьи О разработке приложений на PSoC-4 фирмы Cypress есть толпа вопросов.

Первый вопрос: не понятно, где берется компонент Button и Button_ISR. В исходной поставке я такого не вижу. Поиск по ключевому слову Buttos тоже не находит такой компонент.
Так, с этим моментом разобрался.. оказалось обычный input pin с галочкой прерывания.


Второй вопрос: Мне что-то не удаётся прицепить LCD дисплейчик с шестью семисегментными цифрами. Указал 4 общих 16 сегментных (всего у него 20 контактов). Пять "восьмёрок" позволяет добавить, а вот шестую - никакой реакции на нажатие "+" не имею. Даже сообщения об ошибке.

Изображение
Вложения
LCD_3_3V4COMLED.jpg
(96.58 KiB) Скачиваний: 2735

Re: О разработке приложений на PSoC-4 фирмы Cypress

Вт июл 12, 2016 17:30:31

Спасибо за интерес к статье!

В ДШ на LCD 7-seg Helper написано:
7 Segment Helper – This helper may be one to five digits in length
Если нужно больше цифр, задействуйте два Helper-а.

Компонента для обработчика прерывания называется Interrupt и находится в категории System. Ее следует соединить с компонентой пина, генерирующего прерывания. В проекте в статье я переименовал эти компоненты как Button и Button_ISR при конфигурировании.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Вт июл 12, 2016 20:35:56

Мда, мне тоже где-то показалось про пять разрядов... Хотя странно, 14-ти и 16-ти сегментные позволяет сделать пока выводов хватает. Но я так понял, что этот хелпер сто лет не нужен, потому как в таблице можно просто запихать свои названия сегментов и будет порядок?
Изображение

Еще волнует вопрос программирования. Пока что я балуюсь с Pioneer KIT - проблем с программированием нет, но если мне взбредет сделать, что-нибудь standalone, то чем шить? На ST-LINK/v2, так понимаю, надежды нет, хотя у него наружу торчат точно такие же сигналы. Думал взять CY8CKIT-043, но его на фарнеле, что-то нет. Зато есть "CY8CKIT-059 Development Board, Cortex-M3 , PSoC 5LP CPU, Snap-away Programmer/Debugger". Можно ли от него отломать левую часть и использовать для программирования отдельных кристаллов?

Есть еще куча вопросов, но я пока еще только пытаюсь осознать, что, где и как. Хотелось бы про ёмкостный сенсор понять - пример сделал - на плате работает, но если приложить 3мм оргстекло - не работает (хотя в микрочиповских аппнотах этот вариант рассматривался). Пока в непонятках про UDB блоки - как их использовать и проектировать. И разобраться, где аппаратное, где программное. А то сначала обрадовался увидев в компонентах RTC - причем крутой, с вычислением дня недели и переходом на летнее/зимнее время, но почитав подробнее на него даташит, я так понял, что это чисто программная конструкция.
Вложения
LCD_seg.PNG
(14.4 KiB) Скачиваний: 2441

Re: О разработке приложений на PSoC-4 фирмы Cypress

Вт июл 12, 2016 21:46:26

Польза хелпера не в названиях пинов, а в его связи с API функциями, которые позволяют индицировать числа и другие символы на дисплее, например функция Write7SegNumber. Для этого системе нужно знать на какой ноге какой сегмент у каждой цифры. Могу лишь предположить, что ограничение на 16-битное число в этой функции из-за реализованного алгоритма перевода его в BCD. Если с самого начала заложиться на 32-битные, то будет медленнее и не нужно во многих случаях. Все это лишь предположение. Конечно, можно и проигнорировать все эти API с хелперами и самому с сегментами возиться.

Какой именно Pioneer Kit используете? У Кипариса пионеров целый отряд. ST-Link-ом шиться не будет, но зато можно использовать KitProg программатор на плате CY8CKIT-059. Там на её веб-странице указано, что программатор программирует любой PSoC 3,4,5LP чип вне платы. Кстати, я поначалу программировал внешние чипы также KitProg программатором на плате набора BLE PIoneet Kit, припаяв на него разъём под шлейф

Насчет емкостных сенсоров, я недавно посетил семинар по ним на основе 4000S чипов. Там имеется модуль интерактивной полу-автоматической подстройки сенсоров, так что у меня на семинаре срабатывало от поднесения пальца на пару см. к плате, правда без стекла. Нужно поэкспериментировать. Конечно, ёмкостный блок частично программный со своими DSP алгоритмами.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Ср июл 13, 2016 06:06:05

У меня CY8CKIT-042

С ёмкостными сенсорами, там фишка в том, что диэлектрическая проницаемость оргстекла гораздо выше чем у воздуха, поэтому не нужно иметь чувствительность в "несколько сантиметров". Во всяком случае я это вычитал в микрочиповской аппноте. Но так как я еще только пытаюсь работать с этими сенсорами, еще не пробовал менять настройки, использовал готовый xml, что прилагался к проекту. Хотя, может стекло было недостаточно плотно прижато?

Re: О разработке приложений на PSoC-4 фирмы Cypress

Ср июл 13, 2016 07:54:28

Отлично, у меня такой тоже есть. Я выше писал про чувствительность отдельных кнопок, не слайдеров. С последними имел дело мало. По поводу кнопок у Кипариса есть рекомендации в апноутах по их геометрии в зависимости от толщины стекла, все настраивается достаточно гибко.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Ср июл 13, 2016 20:17:27

Упёрся в простую проблему - как сделать периодические прерывания.
Попробовал так: взял таймер из UDB и завёл его на прерывания:
Изображение

Код:
void timer_ISR(void);

struct {
    volatile unsigned char tick : 1 ;
}
 flag;

int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */
    timer_ISR_StartEx(timer_ISR);
    Timer_1_Start();
...
}

void timer_ISR(void) {
    timer_ISR_ClearPending();
    LED_Blue_Write(~LED_Blue_Read());
    flag.tick = 1;


Светодиод вспыхивает и гаснет. Т.е. один раз прерывание отрабатывает, но что-то не позволяет вызваться прерыванию второй раз.

Собственно, вопрос еще и в том, а что еще использовать для получения таких регулярных прерываний? То что я отдал один UDB под простой таймер, несколько зажирно. С другой стороны TCPWM тоже только 4 штуки. С WDT немного не понял, можно ли их заставить делать периодические прерывания.

p.s. Решение нашел. Надо читать каждый примененный компонент.. вместо timer_ISR_ClearPending(); надо было читать статусный регистр Timer_1: Timer_1_ReadStatusRegister();
Вложения
timer.PNG
(16.93 KiB) Скачиваний: 2129

Re: О разработке приложений на PSoC-4 фирмы Cypress

Чт июл 14, 2016 00:09:59

Насчёт Watchdog - можно их заставить работать как простые таймеры с периодическим прерыванием. Посмотрите исходник у меня в статье в качестве примера. Там я использую прерывания от Watchdog1 и Watchdog2, при последовательном соединении Watchdog0 и Watchdog1. Tаким образом, Watchdog0 является прескейлером для Watchdog1 и не предполагает пользовательских обработчиков прерываний.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Чт июл 14, 2016 08:05:18

Спасибо, прочитал про watchdog внимательнее и нашел, что он действительно может быть периодическим. Хотя документация несколько непривычна. Они мне тут прислали письмо: "так как я скачал у них какой-то пдф, не мог бы я принять участие в опросе". Хм... пойти и написать, что я о них думаю? Хотя, когда въеду, может это окажется правильно и логично.

Так проблема следующая. Борюсь с I2C. Пока мне нужен просто мастер сливающий данные в OLED дисплей. Высоким уровнем пользоваться не хочу. Накропал на низком, но ничего не работает. Вывел статус на светодиод - ошибку не показывает. Потому не понимаю, программная ошибка или аппаратная. Подтягивающие резисторы пока не паял. Вот только не знаю, к cy8c4245 тоже баг про внутренние подтяжки относится или нет.
Код:
    I2C_Init();
    I2C_scl_SetDriveMode(I2C_scl_DM_RES_UP);
    I2C_sda_SetDriveMode(I2C_sda_DM_RES_UP);

Думаю, вечером достану осциллограф и гляну, что там творится.
Код:
LED_Red_Write(1);
    if (i2c_wr_reg(SSD1306_I2C_ADDRESS, 0x00, init_sequence, sizeof(init_sequence)) != I2C_I2C_MSTR_NO_ERROR) LED_Red_Write(0);

uint32 i2c_wr_reg(unsigned char address, unsigned char reg_addr, const char *data, unsigned int length) {
    uint32 status;

    I2C_I2CMasterClearStatus();
    status = I2C_I2CMasterSendStart(address, I2C_I2C_WRITE_XFER_MODE);
    if(I2C_I2C_MSTR_NO_ERROR == status) {/* Check if transfer completed without errors */
        status = I2C_I2CMasterWriteByte(reg_addr);
        if(I2C_I2C_MSTR_NO_ERROR != status) return status;
        /* Send array */
        while (length--) {
            status = I2C_I2CMasterWriteByte(*data++);
            if(I2C_I2C_MSTR_NO_ERROR != status) return status;
        }
    }
    I2C_I2CMasterSendStop(); /* Send Stop */
    return status;
}


p.s. Ну просто твою мать! Оказывается не хватает одной строчки: I2C_Start();. Не знаю работают ли Pullup-ы. Когда попытался ткнуться осциллографом, загорелась красная лампочка - сбой обмена i2c.
Последний раз редактировалось uldemir Чт июл 14, 2016 18:46:52, всего редактировалось 1 раз.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Чт июл 14, 2016 18:24:27

Да, я тоже получаю от них периодически подобные емайлы, даже какие-то предложения высказывал (не эмоции). Наберитесь терпения - если что-то сделано по-другому, то не означает автоматом, что это глупо. Во всём есть своя логика, к каждому изделию следует притереться. Люди-разработчики везде разные, каждый со своей логикой и каждая логика работает и имеет право на жизнь. Извините за флейм.

Про подтягивающие резисторы в 4245 не знаю - с этим чипом не работал. Возможно и там баг как во всей старой серии, который точно (проверено) устранён в более новых версиях чипов с BLE модулем и позже. Думаю, в резисторах всё и дело. Я-бы попробовал с ними отладить и потом убрать резисторы. Перестанет работать - дело точно в них. Дайте знать что получится.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Пт июл 15, 2016 11:36:37

Уфф. Снова есть вопрос. Плата Cy8CKIT-049 та, что без загрузчика-дебагера. Простое нажатие на кнопку "Program" ничего не происходит. Почитал, выяснил, что перед втыканием, надо нажать кнопку и тогда кристалл входит в режим бутлоадера.

Т.е. , если я правильно понял, я должен в своей программе предусмотреть наличие и запуск бутлоадера, чтобы это не было бы последним программированием этой платы в этой жизни? Вопрос: как?

Чевой-то не врубаюсь, мне нужен модуль Bootloader или Bootladable?

Хм? немного почитал, скачал разные примеры. Получается так, что мне нужен только Bootloadable, так как сам бутлоадер в памяти и так сидит и не меняется. Но, ему (bootloadable), почему-то надо указать хекс от Bootloader. Пока какой-то бутлоадер указал и кое-как это работает.

А вот LCD дисплей не работает. Стекляшка из первого сообщения.
Код:
#include <project.h>

void WDT0_ISR(void);

struct {
    volatile unsigned char tick : 1 ;
}
 flag;

int main()
{
   
    uint32 count 
= 0;
 
    CyGlobalIntEnable
; /* Enable global interrupts. */
    
    CySysWdtUnlock
();  // configure WDT for periodic interrupt
    CySysWdtSetMode(CY_SYS_WDT_COUNTER0, CY_SYS_WDT_MODE_INT);
    CySysWdtSetMatch(CY_SYS_WDT_COUNTER0, 32000);           // setup for 1 sec interval
    CySysWdtSetClearOnMatch(CY_SYS_WDT_COUNTER0, 1);
    CySysWdtSetInterruptCallback(CY_SYS_WDT_COUNTER0, WDT0_ISR);
    CySysWdtEnable(CY_SYS_WDT_COUNTER0_MASK); // enable WDT counter 0  

    /* Start LCD */    
    LED_Blue_Write
(0);
    LCD_SEG_Start(); 
    LCD_SEG_WritePixel
(LCD_SEG_K1, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_K2, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_K3, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_K4, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_K7, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_K8, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_P1, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_P2, LCD_SEG_PIXEL_STATE_OFF);
    LCD_SEG_WritePixel(LCD_SEG_DP1, LCD_SEG_PIXEL_STATE_ON);
    LCD_SEG_WritePixel(LCD_SEG_DP2, LCD_SEG_PIXEL_STATE_OFF);

    LCD_SEG_Write7SegNumber_0(count, 0u, LCD_SEG_NO_LEADING_ZEROES);
    while (1) {
        if (flag.tick != 0) {
            flag.tick = 0;
            ++count;
            LCD_SEG_Write7SegNumber_0(count, 0u, LCD_SEG_LEADING_ZEROES);
        }
    }
}

void WDT0_ISR(void) {
    CySysWdtClearInterrupt(CY_SYS_WDT_COUNTER0_INT);
    flag.tick = 1;
}

Хочу, чтобы цифирки считались по порядку. Но никакого "движения" на экране не наблюдаю. Горят все сегменты, даже те, что я принудительно сказал "LCD_SEG_PIXEL_STATE_OFF".

p.s. update Что-то получилось изменив LCD mode на High Speed. Во всяком случае всё погасло, окромя DP2. (я пока подключил только верхний ряд контактов индикатора)

p.p.s. Сделал задуманное... Цифирки бегают. Оказывается страшно накосячил в этом 7segment helpere. По моим представлениям он страшно кривой. Почему левый симовол нулевой, в то время как во всех функциях нумерация идёт справа.

Потом, хотел взвыть, что отображение уж очень кривое - надо смотреть строго перпендикулярно. Но потом мне в голову вошла мысль, что я на плате не вижу регулятора напряже... О. блин - оно питается от 5 вольт.

Ну и резюме - хотите потрахаться - берите кит за 4$. Хотите нормально поковыряться - надо брать киты по-дороже. С нормальным программатором. Первая проблема - надо всё-время помнить о бутлоадере. Вторая, чтобы поменять программу, надо выткнуть плату, нажать кнопку и воткнуть обратно. Если у вас был запущен (а я его так и держал) Bootloader Host (это чем заливать прошивку), то он пока вы перетыкаете плату теряет COM-порт (вы же его только что выткнули!) и перескакивает на другой (у меня встроенный COM1). Потом вам нужно ждать пока винда появит нововоткнутое устройство, потом пока Bootloader Host тоже пронюхает, что появился еще один порт, пока вы ткнёте, чтобы переключиться на правильный порт... Единственная радость - загрузка происходит быстро. Даже 32килобайта на скорости 115200 пролетают быстро.

p.p.p.s. И всё же не понимаю про эти "пять" разрядов. Включил полностью индикатор - считать начинает с 60000 (плевать он хотел на инициализацию при объявлении). Думал, досчитает до 65535 и начнет с нуля, дык нет - считает дальше - уже 66000. Хотя, может моя вина, что счетчик я объявил 32-х разрядным, а алгоритм перевода в BCD что насчитает, то и показывает.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Пт июл 15, 2016 19:21:51

Насчет LCD хелпера согласен - странно, что нумерация цифр в конфигураторе и API произведена в разных направлениях. Я им на это указывал в емайле. Можете тоже указать. Чем больше голосов от пользователей они получат, тем может быстрее что-то изменится. При таком объёме всяких блоков мне странно было-бы если всё было без заморочек.

Насчет бутлоадера, естественно всегда полезно сначала почитать потом делать - снимет массу вопросов. На вебсайте кита даже видео есть если читать в лом - 6 минут просмотра и всё ясно. Думаю, в Bootloadable приложении нужно давать линк на Bootloader чтобы приложение знало с каким именно бутлоадером работать, точнее, где у него адрес входа, на который передать управление по ресету. Бутлоадеры могут использовать UART, I2C, или SPI интерфейсы, так что коды у них разные. Тот, что на плате мигать светиком начинает если получил управление и ждет код для загрузки. Это можно перепрограммировать в приложении Bootloader, так что изменится адрес входа в него.

Странно, что Ваш комп забывает COM порт установки драйвера и определяет устройство по новой каждый раз после перетыкания платы. У меня такого не происходит - порт всегда один и тот-же. Только что проверил на своей 4-долларовой плате CY8CKIT-049-41xx. После установки драйвера и перетыкания платы комп распознаёт её моментально, так что никакого "трахания". Эта 4-долларовая плата, конечно, дешёвая с минимумом компонентов. Перетыкать плату следует чтобы перезапустить приложение и дать бутлоадеру шанс получить контроль. Можно на плату подпаять кнопку, замыкающую Reset на землю и нажимать её при загрузке кода, тогда и перетыкать не нужно будет. Или в своём приложении перепрограммировать имеющуюся кнопку на плате чтобы она вызывала Reset МК по нажатии. Тогда тоже ничего перетыкать не надо будет, Можно сам проект Bootloader перепрограммировать на другую кнопку или вообще без неё. Или... да там тысяча возможностей.

Проблему связи "пяти" разрядов и 60000 не понял. Думаю, где-то ошибка у Вас в программе.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Пт июл 15, 2016 20:02:00

Насчет игнора инициализации - моя плюха - перепутаны сегменты были и 0 отображался как 6. Но.. Сейчас исправил и прописал начальное значение, чтобы не ждать сутки:
Изображение
:dont_know: Явная семнадцатибитность.

Про булоадер - видео видел, но... это как пользоваться, а не как делать свои аппликации. Смущает еще одна вещь. Практически все компоненты из взятых с сайта примеров необходимо апдейтить. Т.е. на сайте старые версии. Не может ли быть так, что в кит зашита старая версия, а я линкую уже новую версию... Хотя, ладно - это нюансы. Пока что нашел вариант - буду пользоваться.

Зато вот другая проблема нарисовалась. Если я куплю cy8ckit-059 - та часть, где программатор - она-то будет пятивольтовой. Как я смогу программировать схемы с 3-х вольтовым питанием? Или к этой штуке надо приделать преобразователь уровней? Вот только по крайней мере SWDIO - двунаправленный сигнал.

Еще одно разочарование - квадратурный декодер работает не очень хорошо. Явно в нём не реализована машина состояний - помехоустойчивость никакая.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Пт июл 15, 2016 21:22:27

Насчёт 17-битности, я пока только с 4-разрядными ЖКИ использовал, так что здесь не помогу. Задайте этот вопрос на форуме у Cypress. Не спешите с выводами насчет декодера, попробуйте изменить его настройки.

По бутлоадеру - неважно какой бутлоадер зашит в чип, новый или старый. Его задача прошить код, который ему дадут, и от кода приложения он не зависит. Большинство примеров сделаны были давно и при старых версиях компонентов. В любом случае их апгреидить - дело буквально пары кликов мышкой. Про то как программировать свои бутлоадеры на сайте есть апноуты. Кликните на Datasheet компонента Bootloader или Booloadable, в нем есть ссылки. Если там не найдёте, см. User Guide на Кит. Ну или поиск по сайту. У мена под руками ссылок нет.

Насчет Кита 059 - у меня такого нет, не знаю. Однако, в MiniProg из IDE предусмотрен выбор напряжения на таргете 1.8, 2.5, 3.3, или 5В, а из KitProg в наборе Pioneer 042 напряжение устанавливается только либо 3.3 либо 5. Возможно, что так в любом KitProg, но наверняка не знаю. Думаю, насчёт 059 можно будет понять что-то из расмотрения его схемы.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Сб июл 16, 2016 07:07:43

Нашел хорошее описание CY8CKIT-049. Там же приложены для скачивания .elf и .hex файлы для бутлоадера.

Глянул схему на 059-й кит - ничем от 049 не отличается. Т.е. USB-шная часть питается от 5в. Так что проблема согласования уровней стоит в полный рост.

По поводу энкодера в нём самом написано:
Some mechanical and low cost optical quadrature encoders may exhibit noise near the transition from one state to the next. This noise may cause the encoder to count invalid transitions and result in an encoder position error. To avoid this error, the encoder outputs should be filtered, either with a passive RC circuit or with the use of a digital filter. The Debouncer component that is available on PSoC devices with UDBs may be used to filter the encoder outputs. This should eliminate the noise on most low cost quadrature decoders.
Вот, а при коэффициенте 1х возможно подавление всех помех, даже от простого механического энкодера. Уже была мысль сделать на LUT, но они максимум 5 входов имеют. Т.е. одного LUT недостаточно. С другой стороны - а куда девать результат? Что-то реверсируемый счетчик я не наблюдаю. Хочется аппаратно сделать такую штуку:
Но это минимум 8-ми входовая LUT нужна. 2 входа фазы, 2 входа предыдущего состояния фазы, 2 входа статуса шага вперед и 2 - назад. Так что на 8х8 LUT такое своротить можно, но 5х8 - недостаточно.

Только что накропал программный декодер - работает без сбоев на том же энкодере, с которым я вчера мучал аппаратный.

Попробовал QuadDecoder, тот что не на базе TCPWM - чуток лучше, но всё-равно есть потеря шагов. Причем, пришлось выключить Glitch Filtering - иначе ресурсов кристалла не хватало для размещения.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Сб июл 16, 2016 17:01:36

Если Вам нужен программатор на напряжение 3,3в почему не использовать KitProg на имеющийся у Вас плате Pioneer 042?

Добавлено позже:
Почитал описание этого Кита 042. Может удастся задействовать его KitProg через разъём J6, обесточив МК на плате вытащив J13(?)

А Кит 049 можно легко переделать на 3В питание добавив на плату стабилизатор и соединив его выход с пином 24 USB конвертера. При этом автоматически понизятся уровни на всех его GPIO. У меня по этому конвертеру здесь статья есть.

Также и в секции 4.2.3 документа User Guide на Кит 059 написано, что таргет МК можно питать и пониженным напряжением от 3.3В, выпаяв диод с платы программатора. При этом программатор сам изменит свои логические уровни в соответствии с напряжением питания программируемого МК.

Не смог побороть любопытство и попробовал подсоединить мой старый энкодер (эта модель уже снята с производства) к плате Pioneer-042 на PSoC 4245 с аппаратным не-PWM декодером без фильтра.
Изображение
В программе светик на плате вспыхивает при каждом шаге. Сколько не крутил энкодер, не увидел не одного пропущенного шага. Может потому, что энкодер оптический(?) В любом случае, механических для проверки у меня нет.

Ещё позже:
Что-то у меня эта задачка из головы не выходит. Ресурсов чипа с четырьмя UDB блоками не хватает, как Вы отметили, чтобы сделать аппаратный декодер с фильтрами. Система выдаёт ошибку и предлагает "work around", но у меня реализпвать это не получилось. Пробовал поставить отдельно фильтры на входы QuadDec, но ресурсов не хватает даже на один из них. Хватает только на один debouncing фильтр. Однако, если применить больший чип в корпусе с 48 и более выводами, содержащий 8 UDB, то ресурсов хватает на QuadDec с фильтрами.

Может можно что-то сделать напрямую конфигурировав UDB и конечный автомат на их основе. Я это делал один раз на семинаре. Следующие документы могут быть полезны: AN82156 и UDB Editor Guide

Re: О разработке приложений на PSoC-4 фирмы Cypress

Вс июл 17, 2016 08:21:34

По поводу программатора, я вчера весь день разглядывал схемы кит`ов, чем отличаются, и как подключиться. И, да, этот диод мне сильно мешал. А по поводу -042 там скорее надо выпаять резисторы R32-R34 - они соединяют SWD* выводы таргета с разъёмом. Проблема еще, конечно, найти такой разъём и ответную часть. Ну это на будущее. Пока я еще думаю, нравятся мне эти PSOC или нет.

Про энкодер:
Со светиком можно ничего не увидеть. Я вывожу счетчик и чаще вижу проскок нескольких значений, чем потерю шага. Так же, просто "качая" энкодер: щелчок вперед, щелчок назад - счетчик вылетает за пределы начальных значений. При этом еще вывел на светодиод
Код:
if (QuadDec_GetEvents() == QuadDec_INVALID_IN) LED_Blue_Write(1);
- светодиод не зажигается. И да, у меня энкодеры сплошь механические.

С энкодером, мне не нравится эта реализация впринципе. И дело не в фильтре. Повторюсь снова. декодер в режиме 1х отлично обрабатывается машиной состояний, которая сама может подавить любые помехи. Только вот во всех реализациях счет происходит при определенном изменении состояния, скажем, из 00 в 01. Я же, считаю, что условием счета так же должно быть зафиксированное наличие предыдущих переходов. Например, счет делается при переходе из 11 в 10, но до этого должны быть 00 -> 01 ->11. Поэтому если датчик будет дребезжать на этом месте: 11-10-11-10-11, то будет только один инкремент! И аналогично, обратный счет.

Конечно, было бы интересно реализовать такую штуку в UDB. Но, пока я в неё не въехал. Раньше я игрался с CPLD и, скажем, вышеприведенный код мог бы реализовать на VHDL или даже на простой ПЗУ 8х8 с восьмиразрядным регистром (LUT) и реверсируемым счетчиком. Но, UDB, похоже, требует отдельного изучения, чтобы понять как такую задачу туда уложить. Ну и verilog для меня незнакомый язык.

Re: О разработке приложений на PSoC-4 фирмы Cypress

Ср авг 10, 2016 10:11:02

Здравствуйте Сергей! Очень понравилась Ваша статья о PSoC4, впрочем у Вас все статьи отличные! Я начинающий, решил попробовать PSoC4, сделал демо-плату, прошиваю с помощью отломанного от CY8CKIT-059 KitProg, светодиодом помигал успешно :-) Теперь хочу попробовать измерить частоту сигнала до 10kHz с точностью +-1Hz. Вам не приходилось на PSoC измерять частоту? Думаю как это получше сделать...

Re: О разработке приложений на PSoC-4 фирмы Cypress

Ср авг 10, 2016 16:24:39

Здравствуйте, и спасибо за Ваш интерес к статье. Какую PSoC Вы использукте? Если 41хх, то они не поддерживают подключение кварца. Для точного измерения частоту необходимо обеспечить либо точный (скажем, секундный) интервал измерения, либо точную опорную частоту для измерения периода. Т.е. придется задействовать внешний тактирующий генератор. Теория измерения частоты методом подсчета таймером числа входящих импульсов за единицу впемени достаточно проста. По-моему я даже видел готовый проект на вебсайте фирму. Поищите там в рубрике проектов

Re: О разработке приложений на PSoC-4 фирмы Cypress

Ср авг 10, 2016 18:31:32

Я использую CY8C4245, частоту мне нужно измерять как можно быстрее, так как измеренное значение потом будет поступать на вход ПИД-регулятора. Думаю нужно использовать метод обратного счета (reciprocal counting), там насколько я понял измерительный интервал выбирается любой удобный по времени.
Ответить