Jump to content

    

Что вместо атмеги, но быстрее, но с командной строки взять?

Добрый день,

 

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

 

На данный момент пользую или 328/2560 атмеги, а в тех случаях, когда ее скорости/точности не хватает - 5-ый циклон SOC с внешними АЦПшками. Понятно решение с циклоном не для быстрого решения на коленке, да и не дешевое.

 

На кортескы (в основном STMы) много раз пытался перелезть, но не умею девелопить в оболочках - я уже 30 лет сижу с командной строки в виайе (vim) в юниксподобных системах и тяжело менять привычку. Также хочется точно понимать сколько тактов задержки будет в любом месте работы программы. На атмеге всегда можно посмотреть ассемблер после компиляции и понять как это будет работать. В кортексах как-то все не прозрачно.

 

То есть нужен контроллер типа атмеги но с памятью 64К хотя бы, тактовой от 100МГц и хотя бы 12битным АЦП с предуселителем, и чтоб простенькую программу с парой шимов + опросов АЦПшек можно было бы написать на одну страницу, набив в vim и быстро и бкзпроблемно скомпилировать под гнутым компилером в линуксе. Наличие аппаратной плавающей точки или хотя бы 32 битных целых очень желательно.

 

Скажите, пожалуйста, на какой контроллер посмотреть?

 

Спасибо!

 

ИИВ

Share this post


Link to post
Share on other sites

Ну не знаю, чем все таки stm32 не нравятся, у меня нет проблем с тем чтобы писать под них код в vim и собирать из командной строки. С задержками здесь посложнее да, но все решаемо.

Edited by amaora

Share this post


Link to post
Share on other sites

stm8 не вписывается в начальные условия ("побыстрее"). Так что все ж stm32, вероятно...

Share this post


Link to post
Share on other sites

> stm8 не вписывается в начальные условия ("побыстрее"). Так что все ж stm32, вероятно...

верно. Пробовал в 2012-2013 несколько дискавери борд на stm32 - понимаю, что быстро не осилю до того, что полностью буду контролировать как оно будет собираться и функциониировать, поэтому отложил и не стал продолжать. Может тогда в STMах было все сыро и сейчас проще? Думаю. что если тогда очень досконально изучил бы этот контроллер, то на него бы и перешел, сделав достаточно линуксовых мейков и конструкций для сборки и своих заголовочных файлов. Сейчас просто времени нет. SOC пользую, так как там как раз все это пройдено, но если в проекте нужно плату специальную развести, или сотнями воткнуть, получается очень затратно по ресурсам, времени и финансам. Атмеги часто хватает, но, к сожалению. не везде. Хочется куда-то быстро перескочить и времени нет на понимание "почему тут через эту заднюю ногу сделано".

 

Хочется кондовости и предсказуемости. Сам примерно думаю о трех вариантах STM32, PIC32 и старших атмелах. Изучать все три - точно не готов, посему, вопрошаю, скажите, пожалуйста, куда проще будет перепрыгнуть из этого набора, или стоит что-то еще рассмотреть?

 

Спасибо!

Share this post


Link to post
Share on other sites

Из этих трех выбирайте STM32 - дешево и мейнстримно. Про подсчет времени выполнения

в тактах придется забыть, если только не размещать весь код в RAM/TCM.

Share this post


Link to post
Share on other sites

Спасибо!

 

То есть реалтаймности в STM32 нет от слова совсем и сброс кешей памяти может на долгие микросекунды подвесить вычисления? А в других платформах тоже такая бяка? Меня как раз в свое время именно этот факт в STM32 отпугнул.

Share this post


Link to post
Share on other sites

да особой разницы между армами от СТ, микрочипа или nxp, пожалуй нет. особенно если из требований только наличие АЦП, ШИМ и GCC :)

для совсем мелочи можно ещё посмотреть на приятные фичи периферии, SWM у lpc800 позволяет любую периферию замапить на любую ногу, можно не париться с разводкой платы и засунуть в минимальный размер без ухода в совсем мелкие bga корпуса. SCTimer ещё прикольный.

нужен был usb безкварцевый, взял микрочиповый samd21, там ещё и порты по 32 бита собраны, а не по 16, надо было активно ногами дрыгать - удобнее. 

а если нужна вычислительная мощность да ещё и fpu двойной, то тем более без разницы, ядра одинаковые, АЦП у всех почти одинаковые 12бит 1-2МГц.

ну вон у атмеловских M7 у АЦП предусилитель вроде есть, но вряд ли будет главным критерием для выбора такого МК.

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

Share this post


Link to post
Share on other sites
32 minutes ago, iiv said:

То есть реалтаймности в STM32 нет от слова совсем и сброс кешей памяти может на долгие микросекунды подвесить вычисления?

О долгих микросекундах речи не идет, просто "такт в такт" не получить.

Share this post


Link to post
Share on other sites
1 hour ago, _pv said:

да особой разницы между армами от СТ, микрочипа или nxp, пожалуй нет. особенно если из требований только наличие АЦП, ШИМ и GCC :)

...

Огромное спасибо за классные и понятные объяснения!

 

Пожалуйста, позвольте спросить про средства разработки... Грубо говоря, пусть у меня надо что-то типа PID контроллера сделать - по нескольким АЦПшкам что-то измеряется и по нескольким ногам что-то включается-выключается (типа софтверного шима). Попутно или ком-порт для общения с внешним миром и скидыванием статистики или usb. На атмеге код в одну страницу получается, ну может в две. Хочется того же, но чуть быстрее. На STM32 как-то получались тонны софта, и из-за этого я не прошел таки на тот уровень, когда моя программа становилась такой понятной и короткой, но это было давно и с тех пор я их не трогал.

 

Скажите, пожалуйста, что из этого всего выбрать, чтоб gcc подсекло и сразу поехало? И может какое-то простое руководство для чайников как такой hello-world сделать?

 

Ножки переназначать - это клево и по первости очень помогает экономить на разводке. А еще вроде psoc-и есть, но правильно ли это - не знаю.

 

Спасибо!

Share this post


Link to post
Share on other sites

В PIC32 с таймингом всё прозрачно. Да и со встроенными интерфейсами у них лучше, чем у STM32. Правда, я только в MPLAB с ними работал.

Share this post


Link to post
Share on other sites

С такими запросами берите подходящий Cortex-M0, при этом проблем с кэшами не будет :). Сравнительно простые, математику считают после AVR поразительно быстро, диапазон тактовой то-же резко вырастает. Сообщество большое, производителей куча. Что еще надо?

Share this post


Link to post
Share on other sites
3 hours ago, iiv said:

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

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

Share this post


Link to post
Share on other sites

Тоже перелезал с пиков и авров на кортекс М3 (Миландровский).

Реалтайм там достигаеся не подсчетом тактов ассемблерных команд, а грамотным использованием периферии совместно с DMA. Никакая обработка прерываний такой точности временных соотношений не даст, в критичных к дрожаниям фронтов случаях вообще отказался от прерываний. 

Share this post


Link to post
Share on other sites
7 hours ago, iiv said:

Пожалуйста, позвольте спросить про средства разработки...

Скажите, пожалуйста, что из этого всего выбрать, чтоб gcc подсекло и сразу поехало? И может какое-то простое руководство для чайников как такой hello-world сделать?

Я как-то gdb из консоли так и не осилил, куда приятнее в любой ide мышкой тыкать, смотреть как программа по строчкам исполняется и сразу видеть в соседнем окошке как регистры/переменные меняются.

Поэтому советчик из меня так себе, я взял как-то crossworks, ограничение в 32к не мешает, в мелких M0 часто флэша примерно столько и есть.

Есть ещё на её основе segger studio, чем отличаются - не знаю.

В составе идёт и gcc и clang, если так хочется ну можно их руками из командной строки / из makefile самому позвать.

7 hours ago, iiv said:

На STM32 как-то получались тонны софта, и из-за этого я не прошел таки на тот уровень, когда моя программа становилась такой понятной и короткой, но это было давно и с тех пор я их не трогал.

Как правильно заметил amaora, не надо просто с самого сначала тащить все эти "готовые" SPL, HAL, прочие библиотеки и генерить код дурацкими визардами.

Периферия конечно несколько более сложная чем у авр, но инициализация таймера для шима или АЦП не сильно отличается,

Да, по сравнению с авр, надо отдельно включить клоки для определённой периферии/шины, сконфигурировать io (перед этим включить ему клоки), и т.д. ну и у самой периферии больше настроек.

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

Таймеры, АЦП, dma и io могут сами дергать друг друга без участия процессора вообще.

Для примера у того же lpc800 можно spi внутри завернуть на таймер, который имеет настраиваемый конечный автомат, и может, например, сам клоки и данные spi перекодировать в 1 проводный интерфейс для светодиодов ws2812, где 1/0 кодируется разной скважностью. В зависимости от внешних событий (sclk и mosi) переключается в различные состояния считает по разному.

То есть процессор настраивает spi, таймер, говорит dma какой массив данных запихнуть в spi, и идёт спать или заниматься другой общественно полезной деятельностью, вместо того чтобы как авр по прерыванию таймера на каждый бит руками дергать io.

7 hours ago, iiv said:

Ножки переназначать - это клево и по первости очень помогает экономить на разводке. А еще вроде psoc-и есть, но правильно ли это - не знаю.

В псоки засунули несколько ячеек CPLD и мультиплексоров для аналоговой периферии, это здорово конечно, но имхо перестарались самую малость, и слишком уж специфичная должна быть задача чтобы без этого обойтись нельзя было, ну и своя ide для конфигурации всего этого добра. для того чтобы просто включить шим и прочитать АЦП несколько избыточно.

У микрочипа кстати тоже есть немного простой конфигурироемой логики в мелких армах M0.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now