Pull to refresh

Comments 11

Неплохо бы в начале статьи рассказать для непосвященных, что такое UDB.

Это сделано в разделе «Ссылки на теорию»

Просто статья получилась и так громоздкая. А рассказать, что такое UDB — займёт ещё столько же места. По первой ссылке из того раздела суть UDB подробно показывается.
Не люблю видеотуториалы и не понимаю устный английский.
Это разве не встроенный в микроконтроллер CPLD (блок программируемой логики)?
Блок UDB (Universal Digital Block) содержит:

1) Две ПЛМ (PLD по-английски, но ПЛМ К556РТ1 и РТ2 даже наша промышленность выпускала)
2) Регистры управления и статуса, либо реализуемый на тех же ресурсах семиразрядный счётчик
3) Блок DataPath, состоящий из пары аккумуляторов, пары регистров данных, пары FIFO, простенького АЛУ и кучки компараторов.

Подробнее — тут www.cypress.com/file/41531/download

То есть, в PSoC нет CPLD. Там есть много PLD, но они образуют не классическую CPLD, а нечто особенное (набор UDB, в состав которых они входят).
В чем причина такого звона на осциллограммах? Влияние щупов?
Особенности конструкции макетки. Макетка — CY8CKIT-059. У неё USB разъём без оплётки. Земля идёт по тоненькому проводочку. А крокодилом взять не за что — пришлось за корпус ЭВМ щуп землить. Со всеми вытекающими. Когда потом понадобилось снимать более скоростные осциллограммы (играл в управление шаговыми двигателями — проверял, вставляется ли такт при определённых условиях, будет интерес к теме — опишу результаты в отдельной статье) — чтобы уменьшить звон, подключил ещё кабель Micro USB в надежде, что через него контакт земли станет лучше. Не помогло. Оказалось. что у того разъёма оплётка не соединена с землёй тоже. В общем, земля у измеряемой макетки отвратительная. Но для данной задачи — суть и так видна.
Для STM32 кроме хранения изображения в готовом для вывода в интерфейс RGB-светодиодов виде, возможен и другой подход — хранение графических данных в традиционном компактном формате 8R-8G-8B или 5R-6G-5B, и преобразование их на лету, при выводе на светодиоды. DMA-контроллер STM32 в циклическом режиме может генерировать прерывания по окончанию передачи половины буфера, и всего буфера. В обработчике этих прерываний можно заполнять половину буфера DMA, преобразовывая компактный RGB в данные для выбранного периферийного устройства. В качестве такого устройства кроме таймера и SPI можно использовать и UART. Если, к примеру, выдавать данные в SPI, кодируя 1 бит светодиодов 4-мя битами SPI, и сделать буфер DMA на 64 cветодиода, то прерывания по выдаче половины буфера будут идти с интервалом около 1 мс. Если развернуть цикл перекодировки скажем 1 байта на STM32F103, работающем на 72МГц, — можно получить загрузку процессора около 5% во время выдачи кадра, а сама выдача кадра размером 200 пикселей с частотой 50Гц займёт лишь 29% времени, то есть средняя загрузка процессора этой задачей — около 2%. Размер буфера DMA при этом — 768 байт, независимо от размера кадра. Можно сделать буфер и меньше, тогда загрузка процессора немного вырастет.
В целом, тоже неплохо. Но я в тексте отметил. что «Не то, чтобы нерешаемая задача, просто хороший повод изучить UDB». А так — спасибо, запомнил. Хотя бы потому, что STM32F103 — дешевле и проще доставаем. Но использование UDB для некоторых других задач открывает новые горизонты, а на светодиодах просто удобно набивать руку.
Так а где то что показывает осциллограф для вашего варианта? Ожидал увидеть это в завершении статьи.
Если бы я в статье улучшал временные характеристики — это было бы нужно. Но увы, я наоборот взял вариант с идеальными времянками и сделал их посредственными, но приемлемыми, о чём честно сообщил в тексте (зато устранил плюху и уменьшил потребляемые ресурсы, на чём и сосредоточился в рассказе). Так что считаю, что в статье им не место. Со всеми подробностями и пояснениями они ещё пару экранов займут, а текст и так огромный. Читатель просто бросит его.

А вот в комментариях — с удовольствием покажу, без особых пояснений.

Вот я посылаю константу 0xF0 с широкой развёрткой



На ней я курсорами намерял, что

T1H = 760 нс при норме 750-1050
T1L = 412 нс при норме 200-500

T0H = 377 нс при норме 200-500
T0L = 807 нс при норме 750-1050

Вот другая развёртка, чтобы проверить, что все биты целы

Sign up to leave a comment.

Articles