Обсуждаем контроллеры компании Atmel.
Ответить

Помогите решить задачу на скорость!

Ср сен 20, 2017 10:34:22

Здравствуйте! Дано - атмега 128, к ней прицеплено 65 килов оперативки.

в оперативке лежит массив объемом 432 х 128.

тоесть 128 строк по 432 8-мибитных значения.

Задача - снаружи атмеги есть 6х3 сдвиговых регистра по 192 бита в каждом. В данный момент все соединены в один огромный сдвиговый регистр длиной в 432 байта. регистры могут схавать до 30 мегагерц по такту.

Собственно надо выплюнуть эти 432 байта в последовательный порт но успеть за 0.2 миллимекунды. Атмега тактуется на 30 мегагерцах работает стабильно глюков нет.

Максимум что я смог добиться используя прерывания и буферизированный уарт1 в режиме SPI мастера - 1.2 миллисекунды! непозволительно долго.
с SPI модулем на прерываниях получалось ещё хуже - 1.6 милисек.
пробовал разбить весь массив регистров на 9 линеек по два регистра в каждой и программно выдавать на порты 9 бит каждому регистру а потом дергать тактовой ногой - получилось 1.1 милисекунда - много занимают операции проверки байта по маске когда побитово передаеш байт. порядов данных в памяти может быть любой - перед этим есть море времени на обработку тасовку и подготовку.

Кто что может предложить как это провернуть быстро? конечно напрашивается вариант перекомутировать регистры в 6 впаралель и 3 последовательно, в памяти подготоврить массив так чтоб в каждом байте массива было тупо то что надо выдавать на порт разом и тогда уже массово слать данные тупо память-порт. но увы не хватит оперативки :)

Кто что может предложить? армы не предлагать - не встречались мне простые дешевые армы с 65 килами оперативки.

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 13:17:29

Здравствуйте! Дано - атмега 128, к ней прицеплено 65 килов оперативки.

в оперативке лежит массив объемом 432 х 128.

тоесть 128 строк по 432 8-мибитных значения.


Сумбурно напписано, но
у тебя сдвигрвые регистры а FPGA? Если да, то что мешает FPGA микросхемой "сесть" на внешнюю шину данных.
а) FPGA сама считыает SRAM и делает, что надо
б) атмега "помогает" (перебирает адреса) внешней SRAM: амега а) устанавливает флаг "операции сдвига" б) делает 432 чтения внешней SRAM в) сбрасывает флаг "операции сдвига". FPGA забирает 432 октета с шины данных (DA7:0) и делает что надо.

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 13:18:50

Может стоит задуматься об смене элементной базы. Взять какой-то STM32F4 с поддержкой внешней RAM (или достаточным количеством встроенный) и загружать в регистры связкой SPI+DMA. Получитсчя быстро и с небольшой нагрузкой на проц.

clawham писал(а):армы не предлагать - не встречались мне простые дешевые армы с 65 килами оперативки.
Насколько МК дешевым должен быть?

STM32F415RGT6 - 1024 КБ Flash, 192 КБ ОЗУ. Стоит 5.86$ https://ru.aliexpress.com/item/STM32F41 ... 01337.html

STM32F405RGT6 - 1024 КБ Flash, 192 КБ ОЗУ. Стоит 6.79$ https://ru.aliexpress.com/item/SF10A400 ... 52314.html

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 13:45:21

А если просто посчитать?
200 мкс для передачи 432 байтов соответствует 0,463 мкс на байт, то есть 58 нс на бит, или битовая скорость 17,2 мегабит/с.
МК у вас тактируется на 30 МГц, т.е. менее чем на вдвое большей частоте.
Какой следует из этого вывод?
ИМХО: невозможно в принципе в заданных условиях задачу решить.

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 14:20:28

Очередное "сотворение светодиодного экрана" по принципу "авось получится".
8)

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 22:02:40

Ох спасибо большое за коменты!
Конечно взять камень потолще с внешней рамой и вуаля. но цена вопроса и размеры.
Да это экран светодиодный с механической разверткой - я не пытаюсь ничего особо делать - просто прикинуть хотелось. Потому что по всем прикидкам должен был пролезть а непролезаю ажно в 10 раз :)

Да я конечно очень сильно смотрю в сторону Xilinx какой-то недорогой - там сделать скоростной пулятор + раздельный доступ к этой раме для атмежки. рамы у меня есть статической на 512 килов с батарейкой на борту - типа эмулятор еепрома. Межка бы потихоньку распаковывала в раму с сдкарты кадры а уже плисина б пуляла. Но чесно скачал квартус и попробовал схемно изобразить счетчик адресов и прочую логику...и в общем в голове каша и когнитивный диссонанс - я програмист с 6-ти лет. Голова блин заточена шагами думать а не потоками шинами и логикой. за пару недель мучений ничего толкового не получилось. Если б кто помог понять плисы и как решаются типичные простые задачи - был бы премного признателен.

По поводу армов - даа...ДМА да побольше оперативки то что надо но они обычно ещё и в огромных корпусах идут. а надо небольшой размер коробочки с процем и флешкой. Всетаки вращающийся элемент и на открытом воздухе - герметичность и т.д. - размер имеет значение. Питание 12 вольт щеткой. в общем пока идеи только таковы чтоб или урезать осетра или взять глотку(арм) потолще.

Ну или подскажите другие драйвера светодиодов! Сейчас TLC5940 и мне 12 бит сильно избыточно. достаточно было бы и 4 бита на канал. ток 10 милиампер. каналов - на 32 РГБ светика. Сейчас это 6 корпусов тлцшек.

Да это не комерческий проект - просто проект для себя. Если получится выложу на коте схему/прошивку/исходник.

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 22:23:00

армы не предлагать - не встречались мне простые дешевые армы с 65 килами оперативки.

STM32F103RC, $1.83, 64КБ RAM(хоть и написано 48), гонится до 144MHz, SPI будет работать на 72MHz. Корпус как у твоей меги128...

ps. Там реально еще и флеша 512КБ, во многих случаях можно обойтись без внешней EEPROM.

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 22:50:49

нуок раз такая пъянка - а кто что скажет за атхмеги?вроде как там до 32 мегагерц и spi скоростной и их дофига? ктонить пробовал - сколько у них там макс частота?

Re: Помогите решить задачу на скорость!

Ср сен 20, 2017 23:13:46

clawham писал(а):кто что скажет за атхмеги
Дороже чем ARM (STM32), а производительность меньше. Вот и думайте.

Re: Помогите решить задачу на скорость!

Чт сен 21, 2017 08:02:39

нуок раз такая пъянка - а кто что скажет за атхмеги?вроде как там до 32 мегагерц и spi скоростной и их дофига? ктонить пробовал - сколько у них там макс частота?

Есть всего одна или парочка XMег у которых 32КБ RAM, явно не дешевых, у остальных максимум 4-16КБ.

Re: Помогите решить задачу на скорость!

Чт сен 21, 2017 08:07:49

у любой атхмеги с ногами больше 32-х есть контроллер внешней оперативы! и причем он не тупой как у старых атмег - только sram давай да защелку для адреса а продвинутый. умеет LPC и SDRAM от старых компьютеров и винтов! 100 грн стоит такой камушек. единственно в даташитах 32 мегагерца максимум пишут но на форуме и в некоторых описаниях 64 проскакивает! кому верить? :)

Re: Помогите решить задачу на скорость!

Чт сен 21, 2017 08:24:32

у любой атхмеги с ногами больше 32-х есть контроллер внешней оперативы! и причем он не тупой как у старых атмег - только sram давай да защелку для адреса а продвинутый. умеет LPC и SDRAM от старых компьютеров и винтов! 100 грн стоит такой камушек. единственно в даташитах 32 мегагерца максимум пишут но на форуме и в некоторых описаниях 64 проскакивает! кому верить? :)

Ты хотел дешево и компактно, я предлагал более производительный мк, которому не нужна внешняя RAM, за 50гр, а тут 100гр только мк, а еще нужна защелка и RAM. И почитай внимательнее какие именно хмеги поддерживают внешнюю память, ни у каких хмег за 100гр ее нет, не говоря уже о поддержке SDRAM. EBI есть у A1 на 100 ног, у предлагаемого мной STM32 поддержка внешней памяти тоже отсутствует и появляется только у 100 пинового.

Re: Помогите решить задачу на скорость!

Чт сен 21, 2017 15:55:11

Вместо сдивговых регистров можно использовать МК.
Берете STM8S103, с 1КБ ОЗУ и 16МГц внутреннем генераторе. 16 портов(если не ошибся) и замечательная стоимость, если покупать мешком и поискать нужного продована , то рублей за 20 можно сторговаться или поди еще дешевле.

К сожалению оперативки не так много. Пускай будет 7 портов на пиксели. 7*128=896 оперативки под картинку. 432/7=62 контроллера на видеопамять (вместо сдвиговых регистров) всего экрана.
Пускай Ваша мех. развертка дает синхроимпульс 0 строки и каждой строки. Два порта отдаем под них для каждого МК.
clawham писал(а):65 килов оперативки.
64 наверное? Судя по размеру оперативки, Вы картинку менять не хотели в динамике. Однако и это можно добавить. С помощью какого-нибудь интерфейса и простого протокола , например UART или SPI, еще одного МК (пускай будет AVR чтобы не оффтоп) и флешки можно сделать изменение картинок. Вот только из-за маленькой оперативки STM8S, не удаться сделать буферизацию или картинку гасить на время обновления или будет размазанной смена. Ну или контроллеров в два раза увеличить и тогда будет двойная буферизация.

Пускай обновление (загрузка новой)картинки будет по UART. 128*432*10*1.1=608256 бит на картинку. 10 бит в кадре и +10% на служебную инфу протокола (10% взял от фонаря, можно обойтись и без этой избыточности). Пускай скорость UART 921600 бит/с. 608256/921600=0.66сек. Очень не быстро, но скорость можно поднять. Конечно лучше тактировать все МК от одного источника.
----------
Конечно тут надо все хорошо посчитать. Эти расчеты только прикидочные. Повыбирать контроллеры, может будет иметь смысл взять контроллеры дороже, но с большей памятью, что позволит использовать большее количество портов с одного МК , учесть электрические характеристики, один МК дешевле, зато нагрузка на порт меньше, может транзисторы придется ставить которые тоже денег стоят и т.д.

Re: Помогите решить задачу на скорость!

Чт сен 21, 2017 18:32:57

увы мк не драйвер светиков. а мантулить кроме светиков и драйвера на подвижную планку ещё и 96 резисторов - ну увы никак :) а если и делать на резисторах - то тогда уже на 595 - 2 грн штука :) но тогда цветов всего 12 включая белый и черный - маловато...наверное...но на сдвиговиках всего 27 байт данных надо прогнать - это мизер. это атмега реально в 0.1 мсек уложится. но все усложняется - и разводка платы и ширина платы увеличивается изза резисторов и собственно паять 96 резюков. при этом красному каналу надо свой регулятор напруги вести ибо он самый слабый - на него при одинаковых резюках (берем счетверенные 1206 чтоб меньше паять) надо было больше току - больше напруги давать.зеленому тоже отдельно меньше напруги бо он самый яркий. Это все прекрасно реализовано в tlc5940 - у него под это даж еепром есть но можно просто загрузить дот корекшн и впуть. ну и светики прям на выводы микры вешаются.

Есть конечно вариант tlc5954 - идеально мелкий корпус, корекция тока для группы 1-через-3 светика + каждого светика небольшая корекция 48 бит! но только вкл-выкл. впринципе пошло бы. током управлять яркостью - мне 3 бита на канал яркости более чем достаточно. но где их купить? они только у техаса есть - ни на али ни на ебее ни в местячковых магазах - нету вообще в помине.

Re: Помогите решить задачу на скорость!

Пт сен 22, 2017 05:31:30

clawham
Поставь WS2812 (в ленте) и не трахерь мозгу!
:beer:

Re: Помогите решить задачу на скорость!

Пт сен 22, 2017 08:01:32

ну давай опиши скорость "перерисовки" 32-х всок. сколько на это надо времени?

а я посчитаю для Вас;)

24 бита одна вска, ноль записать - это 0,35 us + 0.8, единицу записать это 0,7+0,6. итого 1,15/1,3 микросекунды * 24 бита * 32 лампочки = 998 микросекунд - или целая миллисекунда! тоесть один-в-один то же самое что есть сейчас и у меня! только на tlc получается 0.6 мсек на 3 полосы сразу + битность - 12 бит на канал с возможностью тонкой подстройки тока каждого светика - дорогого стоит! Посмотрите в инете экраны на этих всках - черного у них нет. и гамма сильно завышенная.


Пришла мне тут мысля :)
У меня есть stm VL discovery
Там проц конечно слабонький совсем - 32f100rbt6 но я его запускал на 48 мегагерцах - работал стабильно!

Вот и вопрос - допустим оперативку нативно к нему не подключить ну да и хрен с ним - подключаем абы-как адреса на один порт а шину данных - на другой. теперь в цикле надо будет что сделать? Выставить нужный адрес на адресном порту, дернуть ногой OE чтоб оперативка прочиталась, считать 8 бит данных и закинуть его в спи. Пока спи шмалит - инкрементируем адресный порт и снова дергаем ногой, опять читаем и опять в спи кидаем.
Фишка в том что я в оперативке буду хранить цвета 4 битные. тоесть 3 байта это 2 rgb светика. ну а процем буду вычитывать последовательно три байта из оперативы и раскладывать . тоесть настрою спи на 12битное слово а кидать буду только хвостики 4 битные. вроде как оптимизация? конечно дма не получится - нет оперативки даже на одну строку. но впринципе-то 32 битная архитектура и скоростной спи на 12 бит слово должны сделать своё дело? Надо будет попробовать на макетке собрать.

Re: Помогите решить задачу на скорость!

Пт сен 22, 2017 11:28:32

Неужели так необходимо непрерывное обновление ВСЕХ СРАЗУ элементов экрана (растровая развертка)?
:roll:

Re: Помогите решить задачу на скорость!

Пт сен 22, 2017 11:33:10

это по типу пропеллерклока я ж сказал. вращающаяся рамка с тремя линейками светиков по 32 штуки вряд под углом 120 градусов. потому и размеры и прочее. скорость вращения 14 об/с. кол-во лучей на оборот - ну планировал 256 но уже хоть бы в 100 пролезть - минимум смотрибельности. ниже скорость вращения делать низзя - итак заметно дрожание.

пути у меня реально получается всего два.
или идти на другой проц - во попробую накидать тестовую прошивку для арма - симуляция чтения срама и пулятор в спи.

ну или атмега328 + плис + срама.

К сожалению вообще не представляю с какой стороны к плисине подойти. Армы тоже немного напрягают жутким разнообразием и полным бардаком в даташитах. СТМ в своем репертуаре - чтоб узнать сколько чего есть в камушке STM32F100RBT6 надо перерыть 5 пдфов под лупой. вообще не понимаю зачем так делать. Кроме того тому кто придумывал распиновку для этих армов просто оторвать бы руки. ну невозможно нормально без 100500 переходных развести порт на адреса и пол порта на даннык к раме. в этом плане снова плисина намного лучшее решение.

Re: Помогите решить задачу на скорость!

Пт сен 22, 2017 12:12:44

Армы тоже немного напрягают жутким разнообразием и полным бардаком в даташитах. СТМ в своем репертуаре - чтоб узнать сколько чего есть в камушке STM32F100RBT6 надо перерыть 5 пдфов под лупой. вообще не понимаю зачем так делать.

Да ладно, в начале каждого DS есть табличка:
СпойлерИзображение

Только зачем тебе медленный F100 с 8К RAM, тебе нужен 103RC, который на самом деле 103RE, если, конечно, все еще хочется 64К RAM, хотя вполне допускаю, что и 103С8 с его 20КБ может хватить еще и останется.

Re: Помогите решить задачу на скорость!

Пт сен 22, 2017 13:27:22

ну Rx есть а что такое B ? чего не написать сразу в столбике?

Кстати снова таки вопрос - Debugwire - это то что есть как программатор-отладчик в stm32vldiscovery? оно получается под любые их процы? только две ноги надо ?

Я чесно говоря не хочу арма. а оперативки мне надо совсем мало. мне хватит всего 4-5 кадров при 8 битах цвета на одну точку на 32 светика.
это ж всего 8 килов при 256 лучах на круг или 3,2 кила на круг при 100 лучах! этого вполне более чем за глаза. 64 кила взялись из попытки заставить мегу тупо копировать оперативка-спи и чтоб больше она ничем не занималась.
Ответить