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

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


Ответить

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

Ср авг 10, 2016 20:28:21

Для этих также нужен внешний кварцевый генератор для точного измерения. Вообще, в чем конкретно проблема?

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

Ср авг 10, 2016 21:18:51

Да проблем пока нет, я буквально пару дней только занимаюсь PSoC, изучаю документацию. Думал, может у Вас есть какие то наработки по поводу измерения частоты на PSoC. Буду пытаться что то сделать, если возникнут вопросы, напишу. Спасибо за помощь.

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

Ср авг 10, 2016 21:29:17

Нет, частотомер на PSOC я не делал. Но если будут по ним вопросы, помогу чем смогу.

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

Чт ноя 17, 2016 11:47:30

Снова немного растерялся... хочу сделать периодические прерывание от WDT и нарисовал такую картинку (до этого был делавши без картинки, как в статье):
Изображение
И вот теперь ломаю голову, как написать обработчик прерывания. В даташите написано, что по умолчанию, обработчик будет называться
ISR_Scan_Interrupt. Но, компилятор заявляет, что такая функция уже есть. И да, эта функция уже есть в сгенерированных файлах. Почитал даташит...
void ISR_Interrupt(void)
Description: The default ISR for the component. Add custom code between the START and END comments to keep the next version of this file from over-writing your code.
Похоже, предлагается писать там внутри. Но как я туда перетащу все свои переменные, чтобы они не затёрлись при следующей перегенерации?

В заметках написано, что я должен использовать функцию ISR_Scan_StartEx. Но еще не проверял. Плата еще только паяется. кристалл Cy8c4014sxi-421.

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

Чт ноя 17, 2016 18:39:07

Для ответа на этот вопрос будет проще, если Вы загрузите мой проект из статьи и посмотрите на его примере как я организовал прерывание от WDT.

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

Чт ноя 17, 2016 21:14:51

Ну, я там смотрел в первую очередь. Потому и показал различие в подходах. Вы прямо в коде конфигурируете, а я через... не знаю как это назвать... сниппеты? Ну да ладно. С этим может разберусь. У меня встала гораздо более серьёзная проблема.

Я не могу зашить cy8c4014sxi-421. Использую отломанный от cy8ckit-059 программатор. SWDIO подключил к 1 выводу, SWDCLK ко второму, землю к 8, а питание к 7 выводам. RST - никуда не подключил. И вот, запрограммировать не могу.
Изображение Изображение
Не могу придумать куда подключить RST - у этого кристалла нет вывода XRES. Он есть только у 24-х и 28-ми пиновых микросхем. А в PSoC Programmer переключить "Programming Mode" и "Connector" - не могу - селекторы неактивны.

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

Чт ноя 17, 2016 23:22:03

Да, я конфигурировал WDT в коде потому что для моих чипов WDT не конфигурируется через IDE. Для Вашего чипа это не так и IDE предлагает пример того, что делать с картинкой: именно как сконфигурировать ISR. Привожу файл main.c из этого примера ниже.

Насчёт проблемы с программатором - похоже KitProg не поддерживает программный режим не через reset. Я проверил на своём KitProg2 - тоже самое. Однако, с MiniProg3 проблем нет. Может и есть обходной путь с KitProg - я-бы написал в Тех-поддержку на Cypress.
Untitled.png
MiniProg3 settings
(32.59 KiB) Скачиваний: 592

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

Чт ноя 17, 2016 23:57:49

Нашел топик с похожей проблемой.... бла-бла-бла cy8ckit-040 может только ресет моду бла-бла-бла нужен минипрог с ревизией Б - бла-бла-бла - а у меня ревизия Б, но всё равно ничего не программирует.

Вот теперь и не знаю что делать. Мало того что этот минипрог с неизвестной ревизией стоит 100 евро, так еще и неизвестно, поможет ли он.

Блинн. кусок текстолита и времени собаке под хвост.

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

Пт ноя 18, 2016 02:25:58

На том блоге человек с ревизией Б MiniProg-а написал парой постов ниже, что всё у него заработало и просто было КЗ на плате. Кстати, у меня MiniProg3 версии 2.05, никакой Б в ревизии не упомянуто и он, согласно IDE, позволяет переключить себя в режим Power Cycle. У меня пока нет чипа это проверить. Однако, как раз сейчас я готовлю заказ на DigiKey и куплю Ваш чип для экспериментов. Потом, не позже чем через неделю, отпишусь, удалось-ли его запрограммировать моим мини-прогом.

А пока можно попробовать следующее: портировать Ваш проект в Keil и воспользоваться стандартным Segger JLink программатором для ARM (если есть) с соответствующим плагином как описано в документации на портирование. Мне кажется, что я где-то читал, что первое программирование PSoC возможно только штатным кипарисовским программатором. На одном из семинаров этим летом я задал лектору вопрос действительно-ли это так. Он сказал, что я не прав и что Jlink должен запрограммировать без проблем, но по тому как он это сказал, сомнения мои не развеялись. Однако, сколько я не искал потом откуда я это взял - найти не смог. Так что сейчас уже думаю, что может мне это и приснилось. Есть у Вас JLink, чтобы попробовать? Посмотрите сюда. Также небезынтересно почитать этот блог, особенно где-то с середины.

Согласен, MiniProg3 недёшев и стоит оригинально $89. Однако, я получил свой в составе набора CY5672 стоимостью почти в 2 раза меньше. Помимо этого, недавно я купил ещё один Кит CY5682 за те-же деньги, в состав которого также входит MiniProg3. Может в Вашей стране стоит поискать эти Киты по более сносной цене у официальных дистрибъютов Cypress.

P.S. Только что обнаружил на обратной стороне моего MiniProg, что он ревизии Б. Думаю, что если созреете на его покупку, у дистрибъютора можно будет спросить про ревизию. Однако, т.к. вышеупомянутые Киты появились где-то годом позже после MiniProg3, фактически не сомневаюсь, что туда вложили последнюю его ревизию.
revB.jpg
Revision B
(46.83 KiB) Скачиваний: 579

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

Вс ноя 20, 2016 19:19:11

Заказал RDK cy5682 на Mouser, посмотрим, удастся ли запрограммировать... через недельку-другую, когда оно до меня доберется.

Тем временем, всплыла еще одна проблема. В конструкции используется I2C Master для обмена с RTC ds3231. Всё бы ничего... да вот перед инициализацией i2c рекомендуется (и это реально надо, судя по моему опыту) проверить состояние линии SDA и если она вдруг притянута к земле, поклокать SCL пока она не будет отпущена - тогда сигнал Start её введёт в правильное состояние.

Дык вот. А как добраться до этих пинов? Я так полагаю, пока я не выполнил I2C_Start() оно еще должно быть доступно как GPIO. Вот только все даташиты описывают доступ по имени. А имя я назначить не могу. И двух свободных пинов, чтобы подключить параллельно, у меня тоже нет.

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

Вс ноя 20, 2016 19:40:58

Рад за Вас, что Вы на правильном пути с программатором. Проблем с I2C применительно к Ds3231 у меня никогда не возникало, чего не могу сказать про другие I2C устройства. Однако, если хочется перестраховаться, как только пин сконфигурирован на работу с I2C модулем, достать его через GPIO напрямую не получится. Я вижу 3 выхода. Первый - посмотреть на сайпровские API для I2C - может там имеются функции для непосредственной манипуляции линий. Я сейчас не дома, нет доков под рукой. Второй - конфигурировать I2C пин на GPIO изначально, затем дрыгать ногами для освобождения SDA и потом переконфигурировать пины программно под I2C. Как добраться до пинов написано в мануале на GPIO, доступного через конфигуратор пинов. Наконец, сконфигурировать пины изначально под I2C, а вместо дрыгания SCL посылать в слейв один байт с его адресом несколько раз и ожидать ACK. При этом SCL будет дрыгаться соответствующе.

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

Пн ноя 21, 2016 10:59:52

Долго рылся по поиску, наконец нашел. Сначала обнаружил, что есть в сгенеренном API i2c_sda/i2c_scl функции Write. Т.е. i2c_scl_Write(). Правда вызов их никакого эффекта не давал. начал тогда искать в гугле по этой строке "cypress i2c_scl_Write" и первая же ссылка:
http://www.cypress.com/forum/psoc-4-arc ... /reset-i2c дала ответ:
Код:
   I2C_SET_I2C_SCL_HSIOM_SEL(I2C_HSIOM_GPIO_SEL);      //   Switch to GPIO
Хе, и даже работает (на пионере cy8ckit-042 попробовал).

P.s. Рано радовался. Попробовал вставить в свой проект - не компилит. В работающем тестовом проекте поменял кристалл на cy8c4014sxi-421 - тоже перестал компилиться:
Код:
PSoC\Blinking LED\Blinking LED.cydsn/main.c:78: undefined reference to `I2C_SET_I2C_SCL_HSIOM_SEL'

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

Вт ноя 22, 2016 05:46:06

Сегодня пришли детали, я установил CY8C4014LQI-421 на макетку и загрузил в него мигание светиком через Watchdog.

Всё нормально программируется и работает:

Желаю и Вам удачи с этим. Сейчас мне надо позаниматься другими делами, посмотрю I2C подробнее завтра-послезавтра.

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

Вт ноя 22, 2016 18:17:07

Эта функция экранируется таким #if-ом I2C_CY_SCBIP_V0. Правда, странно. Если сделать команду перейти к определению - переходит в I2C_Pins.h в ту часть, которая типа неактивна по #if.

Мнда, похоже в этих кристаллах можно делать лишь то, что есть в API. Пытался было залезть грязными ручками напрямую в регистры GPIO_PRT1_PC (точно уже не помню) - компилятор сказал, что такого регистра не знает. Да и описание, какое-то скудное мне показалось. особенно после stm32.

Собственно, созрел перейти к запасному плану - пожертвую одной ножкой, чтобы дёргать scl. Надеюсь, что читать sda мне всё же удастся - так как больше ног нет.

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

Ср ноя 23, 2016 04:44:41

Успеете пин пожетрвовать. В CY8C4014 выводы I2C выведены на P1[2] (SCL) и P1[3] (SDA). Переключение пинов корпуса на альтернативные функции производится с помощью HSIOM (High Speed I/O Matrix). За функцию пинов порта P1 отвечает регистр CYREG_HSIOM_PORT_SEL1, где каждому из 8-ми пинов порта отводится 4 бита под код функции. При этом функции GPIO соответствует код 0, а функции I2C модуля SCB - код Е (hex). Я проверил живьём на лог. анализаторе следующий код после конфигурирования I2C ног, который переконфигурирует I2C пины под GPIO и затем в цикле дрыгает 10 раз пином SCL на пине P1[2]. Чтение пина SDA на P1[3] можно произвести с помощью функции CY_SYS_PINS_READ_PIN(CYREG_PRT1_PS, 3) После цикла пины переключаются обратно под работу с I2C. Надеюсь, этой информации будет достаточно для Ваших целей. Описание регистров PSoC приведено в документе PSoC 4 Registers TRM
Код:
   CY_SET_REG32(CYREG_HSIOM_PORT_SEL1, 0x0000);         // assign I2C pins to GPIO
   uint32 i;
    for (i=0; i<10; i++)                           // toggle SCL pin 10 times
    {
      CY_SYS_PINS_CLEAR_PIN(CYREG_PRT1_DR, 2);         // set SCL pin low
      CyDelay(1);
      CY_SYS_PINS_SET_PIN(CYREG_PRT1_DR, 2);            // set SCL pin high      
      CyDelay(1);
    }
   CY_SET_REG32(CYREG_HSIOM_PORT_SEL1, 0xEE00);         // assign I2C pins to SCB

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

Пт ноя 25, 2016 22:04:27

О. Пришел RDK с программатором внутрях - 7,4 секунды и всё запрограммировано. Только разъём пришлось перепаять.

Спасибо за вашу помощь понять как достучаться до регистров. Как-то непривычно, что в даташите регистр называется так, а в коде надо спереди дописывать CYREG_. Потому как я уже пытался добраться до портовых регистров, но так компилятор такого имени не знал, то я и не стал дальше искать, где могло бы быть их описание. Хотя у STM8L у меня уже была засада, в даташите в названии регистра или бита был "0" (ноль), а в хедерах "O" (или наоборот, точно уже не помню).

Странная тенденция. С каждым другим микроконтроллером, нужно всё большим числом документов орудовать. У микрочипа достаточно одного ПДФ-а на конкретный кристалл - там есть всё со всеми оговорками у какого кристалла что есть, а чего нет. У MSP430 и STM8/32 надо два: на конкретный кристалл и общий reference manual. А здесь еще и второй разделили на еще 2: просто RM и RM на регистры.

Вот интересно со структурами. Попытался написать формально константу 0xEE00.
С одной стороны есть определение I2C_HSIOM_I2C_SEL равное 0x0E. Но вот найти константу сдвигающую её на 8 и 12 бит не нашел. Есть I2C_SCL_PIN_INDEX и I2C_SDA_PIN_INDEX. Но они равны 0 и 1, соответственно. Поэтому пока нарисовал
Код:
CY_SET_REG32(CYREG_HSIOM_PORT_SEL1, I2C_HSIOM_I2C_SEL<<(I2C_SCL_PIN_INDEX*4+8) | I2C_HSIOM_I2C_SEL<<(I2C_SDA_PIN_INDEX*4+8) );

Но это не принципиальная проблема.

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

Сб ноя 26, 2016 07:51:44

Рад, что смог помочь. Величина сдвига 12 и 8 бит для линий SDA и SCL определены как константы I2C_sda_0_SHIFT и I2C_scl_0_SHIFT, определённые в файлах I2C_sda_aliases.h и I2C_scl_aliases.h, значения которых (12 и 8) определены через дефайны как I2C_sda__0__HSIOM_SHIFT и I2C_scl__0__HSIOM_SHIFT в файле cyfitter.h. Явно прослеживается автоматическая генерация кода - человек в здравом рассудке такое вряд-ли сделал-бы.

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

Сб ноя 26, 2016 22:16:00

Проблемы у меня на проблемах. Взбрело мне в голову использовать модуль EM_EEPROM. Вот только при попытке перезаписи ячейки у меня всё перестаёт работать. Даже таймер TCPWM перестаёт выдавать импульсы, что чревато.

Код:
// EEPROM
static const uint8 CYCODE century=0x20, timezone=2, dst=0, dst_enable=1, leadingzero=0 ;

int main() {
uint8 temp_EE;
....
temp_EE = ((*(volatile uint8 *) &leadingzero) == 0) ? 1 : 0;
EEPROM_Write(&temp_EE, &leadingzero, 1u);
.....
}

Вроде как ничего сложного, при выполнении этого куска значение leadingzero должно измениться с 0 на 1 или наоборот. Но при выполнении этого фрагмента всё останавливается и помогает только перепрошивка.

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

Сб ноя 26, 2016 23:08:16

Хммм, с EEPROM я никогда не работал, да и в эти выходные не дома, т.е. компа с ИДЕ проверить нет. Если разберетесь раньше меня - дайте знать.

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

Вс ноя 27, 2016 08:37:21

Да вроде всё делаю по примерам... Вот еще нашел: http://www.cypress.com/forum/psoc-4-arc ... =community в пятом сообщении. Начинаю подозревать, что возможная проблема связана не с записью как таковой, а отчего-то другого. Пока на ум приходит, что причина, возможно, в watchdog. Так как запись идёт 15мс, а watchdog у меня сконфигурирован на FreeRunning с периодом 1.6мс и вызывает с таким периодом прерывание. Т.е. за время записи может произойти 10-11 прерываний. То, что они пропустятся - чёрт с ними, а вот если они все встанут и забьют стек? Хуже то, что слетает TCPWM - если он слетает, то у меня горят транзисторы. Хорошо что блок питания имеет ограничение по току. Поэтому, пока думаю, как сэмулировать этот фрагмент, чтобы не было так больно.

Изыскания продолжаются. Вставил запись в самое начало:
Код:
int main(void) {
    uint8 temp_EE;
   
    Clock_Start();
    PushPull_PWM_Start();
    I2C_Start();
    I2C_Reset();
    EEPROM_Start();

    ISR_Scan_StartEx(ISR_Scan);

    temp_EE = 1;
    EEPROM_Write(&temp_EE, &leadingzero, 1u);

    CySysWdtEnable();
    /* Make sure that interrupt is forwarded to the CPU */
    CySysWdtUnmaskInterrupt();

    CyGlobalIntEnable; /* Enable global interrupts. */
Вот этот код ещё работает. Стоит EEPROM_Write перенести на строчку ниже - завис. И даже не могу зайти в отладчик глянуть. Так что, похоже, что виновата собака. Наверное я её неправильно инициализирую.

Изображение Изображение
Попробовал увеличить период WDT c 1.6мс вверх. При 102.4мс - стало нормально работать (во всяком случае дошло до основного цикла).

Попутно всплыла еще одна проблема. Ну, это я сделал плюху - не предусмотрел резисторы подтягивающие к земле затворы транзисторов подключенных с TCPWM, чтобы по неактивности эти транзисторы не открылись и не жгли всё подряд. Решил исправиться - взял пару резисторов 2.2к и напаял сверху. Результат - ничего не запускается. Читаю даташит: 14 вывод имеет "альтернативную" функцию Internal Reset и в даташите написано 1. Must not have load to ground during POR (should be an output). Как же быть? эти выходы невозможно посадить на другие выводы. Ну и самое обидное, фраза Internal Reset в даташите встречается 2 раза, а TRM - один раз. Т.е. не понимаю, что это и для чего оно нужно.
Ответить