Платформы UC для более быстрого процессора и 30+ контактов GPIO

Я создаю проект Persistence of Vision со 120 светодиодами RGB (всего = 360 строк для управления). Мы остановились на TLC5940 для управления светодиодами (и могли бы изменить это), однако теперь у нас есть проблема с достаточно быстрой передачей данных на микросхемы драйверов светодиодов. В настоящее время мы используем чипы класса ATmega328/ATmega128, максимальная частота которых составляет 20 МГц, и мы не можем достаточно быстро обрабатывать данные, загружаемые в TLC5940. Должны ли мы рассмотреть другой UC? Желательны:

  • Низкая стоимость/нК
  • Низкие начальные затраты (например, CPLD требуют определенных первоначальных инвестиций для начала работы)
  • 3,0-5,0 В
  • Идеально доступен в корпусе DIP для упрощения прототипирования
  • 30+ линий GPIO (для параллельной загрузки контроллеров светодиодов)

Этот вопрос может быть интеллектуальным бедным родственником этого вопроса , однако я думаю, что наши требования несколько отличаются.

Подробности: почему ATmega328 недостаточно быстр (пока)

В идеальном мире мы должны иметь возможность загружать данные для всех светодиодов менее чем за 746 мкс (это требования проекта), и опять же, теоретически, если мы будем работать со скоростью 2 тактовых импульса/бит, мы сможем сделать это за 108 мкс при 20 МГц. , тем не менее, весь сдвиг битов, чтобы решить, какую интенсивность посылать каждому светодиоду прямо сейчас, дает нам время загрузки 1536 мкс. Это с avr-gcc OPTLEVEL=2или OPTLEVEL=3, всевозможные циклы, развернутые вручную, параллельная загрузка всех контроллеров светодиодов и все способы экономии времени, которые только можно придумать.

Почему ты бьешь часы? Используйте встроенные модули SPI или USART. Это должно быть достаточно быстро.
Основная причина заключается в том, что с помощью битбанга я могу поместить до 8 линий данных (по одной для каждого драйвера) на каждый порт, а затем загрузить 8 бит одновременно, пробуя их тактовые линии вместе. Я думаю, что это быстрее, чем загружать их последовательно. В любом случае, большую часть времени занимает не столько «выталкивание битов из портов», сколько принятие решения о том, какие биты должны идти сюда: множество битовых переборок, которые занимают кучу времени. Возможно, я должен опубликовать код для этого?
В этом случае вам, возможно, следует более четко указать, что вы ограничены процессором, а не вводом-выводом. Таким образом, «быстрый GPIO» не имеет особого значения, вам в первую очередь нужно больше мощности процессора.
Я думаю ты прав. Тема соответственно изменилась. Спасибо.
Может быть, взгляните на Parallax Propeller , который также доступен в DIP по цене около 10 евро за единицу.
Да, звучит многообещающе. - Кстати, вы программируете на C? Кодирование частей на ассемблере может значительно улучшить производительность, особенно когда речь идет о побитовых операциях, за счет полного использования всех флагов в SREG.
Да, я смотрю на это.

Ответы (4)

Я бы перешел на дешевый ARM. Вы можете получить Freedom Board , который представляет собой Cortex-M0 +, который может работать на частоте до 48 МГц. Кроме того, будучи рукой, вы получите 32-битные регистры, чтобы вы могли делать больше для каждого кода операции. Кроме того, он имеет механизм прямого доступа к памяти, поэтому вы можете разгрузить загрузку светодиодов в DMA, пока процессор обновляет память. Вы можете получить их от Digikey , а также других обычных подозреваемых.

Из средств разработки есть CooCox , mbed и CodeWarrior .

Эта плата также поддерживает платформу mbed, которая представляет собой простую в использовании платформу разработки с инструментами, библиотеками и большим сообществом, подобным Arduino. Это поможет вам начать работу в кратчайшие сроки. mbed.org/handbook/mbed-FRDM-KL25Z

Линия Atmel XMEGA рассчитана на частоту до 32 МГц, довольно дешева и поставляется в корпусах до 100 контактов.

У Sparkfun есть готовый макет для xmega128A1 для прототипирования: https://www.sparkfun.com/products/9546 — есть также куча наборов для разработки, включая плату Atmel XPLAIN.

Мы рассмотрели XMega, однако, учитывая, что он менее чем в 2 раза превышает тактовую частоту ATmega, казалось, что это не будет идеальным решением, учитывая, что нам нужно загружать светодиоды в два раза быстрее.

Я бы, наверное, посмотрел на платформу mbed . Возможно, вы сможете использовать один из их DIP-модулей в качестве «uC DIP», хотя он также будет содержать необходимые окружающие периферийные устройства (кристалл, питание и т. д.). Хотя это будет значительно дороже, чем покупка голых чипов микроконтроллера, похоже, что вы не производите их массово, так что это не должно быть большой проблемой.

Существует большое сообщество разработчиков, и аппаратное обеспечение определенно может удовлетворить ваши требования к вводу-выводу и скорости. Благодаря легкодоступным средствам разработки у этих довольно сложных микроконтроллеров почти не будет времени на запуск.

АРМ, да. Но, вероятно, не mbed, так как это просто задерживает несколько дней, необходимых для обучения работе с голыми частями - лучше убрать это заранее и не иметь никаких ожидающих сюрпризов. TQFP вполне доступны.

PIC24EP256GP204 — это 16-разрядная машина, которая может работать со скоростью 70 MIPS и имеет 35 линий ввода-вывода . К сожалению, это недоступно в DIP.

Он не нуждается во внешнем генераторе и представляет собой устройство с напряжением 3,3 В. Его можно запрограммировать внутри схемы с помощью недорогих программаторов, таких как PICkit3 (около 70 долларов США), он имеет бесплатный неоптимизирующий C-компилятор (XC16 — лицензирование дает вам оптимизацию) и две бесплатные IDE с симуляторами (MPLAB 8 и MPLAB X). .

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