увеличить количество аппаратных прерываний в ардуино

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
Ну,во-первых,даташиты читать лучше именно на английском. Переводчики тоже люди и могут маааааалость ошибиться,не там запятую поставить,а ты потом месяц голову ломай почему железяка не работает.
Во-вторых,аппаратные прерывания,конечно,хороши для точных таймингов,но джиттер будет всегда присутствовать. Если максимально упростить,то одно прерывание вроде 12 тактов занимает,умножаем на 12 прерываний получаем 144 такта.
Если все прерывания совпадут,то последнее выполнится с опозданием в 9 мкс при 16 МГц. Это много или мало? Не понятны требования к точности.

300 раз в секунду прерывание датчика скорости,всего 6...итого 1800 раз,на каждый 12 тактов и в сумме имеем 21600 тактов только на вход-выход из прерывания. Вроде немного. Но неясно что именно будет внутри прерываний происходить,и какой джиттер допускается. Да ещё и интерфейсы работают,ещё плюс 1-2 прерывания.
Сложно гадать на кофейной гуще,очевидно лишь что МК "на грани",тут и серъезно продумывать алгоритм с кодом и Microchip Studio в помощь. В котором я лично и анализирую время выполнения разных кусков кода при отладке.
Посудите сами,серъезные механизмы,как станки с ЧПУ имеют автономные блоки,содержащие двигатель,микроконтроллер и шины связи. 1 двигатель=1 микроконтроллер. Там положение,скорость,ускорение и момент высчитываются МК помощней 8ми битника,и то не без труда.
И да,моторчики же не телепатией управляются? Это тоже ресурсы МК требует.
Тут либо требования к точности занижать,либо какой-нибудь Cortex H7 применять,либо вообще ПЛИС.

Пы.сы. если очень надо,завтра вечером могу про прерывания на русском отсканить.
 
Изменено:
  • Лойс +1
Реакции: avan

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,416
976
58
Марий-Эл
Ну,во-первых,даташиты читать лучше именно на английском. Переводчики тоже люди и могут маааааалость ошибиться,не там запятую поставить,а ты потом месяц голову ломай почему железяка не работает.
Мало того. В даташитах то же есть ошибки, а переводчики просто их переводят.
 
  • Лойс +1
Реакции: Andrey12 и te238s
6 Янв 2020
122
-4
Переводчики тоже люди
Это как у Райкина - почему жена, полный дилетант и не учившаяся этому делу, готовит лучше, чем профессиональный повар в столовой...
Т.е. любой и каждый самочинно - лучший переводчик, чем профессионал, согласовавший перевод с производителем...
Microchip Studio в помощь
имеется ли здесь ввиду, что это лучше сделать на ПИКе, где открытый код программирования?

Про выбор других процессоров пока не буду - так можно бесконечно покупать один за другим, бесконечно тратить время и деньги (если они у кого есть), и оттягивая хоть какой-то результат в неизвестную даль.
Если МЕГА назвался груздем - должен быть в кузове. Ведь не для моргания же светодиодом придумана такая сложность!
поморгать и на КР1006ВИ1 можно...

одно прерывание вроде 12 тактов занимает,
Это действительно так?????
Помню, лет 30 назад в самых первых микроконтроллерах было такое - 12 тактов на одну команду,
а 20 лет назад уже был один такт на команду.
Сейчас такой регресс?

В даташитах то же есть ошибки, а переводчики просто их переводят.
тогда проще застрелиться....
* * *

Сейчас я рассматриваю одну задачу - создать для мега2560 код максимально короткий и по записи, и по времени выполнения, и для этого собираю информацию
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
Мотор - БКД, с редуктором 100:1, на выходе порядка одного оборота в секунду, за оборот один датчик даёт один импульс (прерывание) при прохождении через нулевое положение механизма, другой датчик - порядка 300 (когда всё соберу и подключу осцил, может выясниться, что и 150, и 900)
Ну вот с этого и надо было начинать :) Если еще добавите крутится ли мотор в обратную сторону и предполагается ли ситуация что мотор нужно остановить/развернуть между 2мя сигналами от датчика фазы, то можно получить уже какие-то цифры по требуемому быстродействию. А управляется мотор ШИМом с тогоже контроллера? Я вообще не спец по моторам, но по-моему это совсем не жесткие условия для 16МГц чипа.

Про выбор других процессоров пока не буду
А зря... атмега устарел морально настолько что всерьез его рассматривать для каких-то новых разработок это просто терять время. Тем более если полагаться на среду ардуино. Это для учебы и хобби и это надо быстро перерасти.
Хотите поглядеть на возможности современного "ширпотреба" на который так много все полюются и обзывают игрушкой для школьников? Поглядите на ESP32. Я серьёзно, погодите кидаться ссаными тряпками :) esp32 это не только (и не столько про WiFi). Например в нем есть аппартно реализованный счетчик импульсов. Он решает 3/4 вашей задачи на аппаратном! уровне - 8 полностью независимых блоков, которые могут считать импульсы на инкремент/декремент, определаять угловую скорость/направление вращения, настраиваемые прерывания по событиям значение/угол/скорость, быстродействие до 40 МГц по входу. Плюс это все работает под RTOS - вам тут и треды и семафоры и очереди и прочие плюшки вместо непредсказуемого ардуино лупа, 2 ядра в подарок - на одном крутите моторы, на другом общайтесь с внешним миром. Ну и совсем бонусом - отдельный ШИМ движек не окусывающий аппаратные таймеры чтобы крутить этими же моторами. Полная документация по SDK для каждой функции, примеры. Хотите залезть еще ниже на уроверь регистров - есть tech guide с полным описаним движка, его регистров, прерываний, диаграммы работы (см 17ю главу).
А вы будете тратить время пытаясь отловить 12 прерываний по пинам на атмеге, а потом мучаться чтобы их кое-как обработать и превратить в углы, скорости и пр. Слезте уже с дохлой лошади, не теряйте свое драгоценное время.
 
6 Янв 2020
122
-4
но по-моему это совсем не жесткие условия для 16МГц чипа
вот и я так считал

что-то подобное я тоже купил ещё в прошлом году, ESP8266, там 80 мГц, но руки не него так и не дошли, лежит где-то в коробочке.
Знаю про него я столько же, сколько и про мегу2560 (т.е. почти ничего).
Считаете, правильнее сразу заняться им?
правда, у него ногов существенно меньше...

крутится ли мотор в обратную сторону и предполагается ли ситуация что мотор нужно остановить/развернуть между 2мя сигналами от датчика фазы
да, это всё предполагается.
шесть моторов крутятся, в какую сторону - определяется для каждого соответствующим битом на одной из ножек процессора,
даже если по 500 прерываний от каждого в секунду, итого 3000 прерываний, в каждое зайти, продвинуть счётчик на 1 в ту или иную сторону (в зависимости от вышеуказанного бита), потом проверить ножку процессора, куда приходит сигнал от другого датчика - хрен с ним, обойдёмся 6-ю прерываниями, которые часты, а те , которые редки - будем просто проверять соответствующую ножку процессора внутри частого прерывания -да-да, нет - нет, и выход из прерывания.
Имеется ввиду, что после выхода из прерывания должно быть куча времени до наступления следующего прерывания,
за которое процессор думает над глобальными проблемами, в том числе : сравнить показания 6 счётчиков (поняв положение вала каждого мотора), и, в зависимости от внешних команд и внутреннего разумения, увеличить или уменьшить скорость тому или иному мотору, исправив параметры действующему "его" ШИМу,
а моторам, которые заслуживают - и направление..
 
Изменено:

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
имеется ли здесь ввиду, что это лучше сделать на ПИКе
Нет,Atmel слилась с Микрочипом, и Atmel Studio 7.0 переименовали в Microchip Studio.

@avan,имеется ввиду сохранение в стек регистров,переход в обработчик прерывания,выход,восстановление регистров из стека. Примерно 12 тактов
 
  • Лойс +1
Реакции: avan
6 Янв 2020
122
-4
имеется ввиду сохранение в стек регистров,переход в обработчик прерывания,выход,восстановление регистров из стека. Примерно 12 тактов
а если при выходе из прерывания он узнает, что пока он прерывался, поступило ещё пять прерываний (висит пять флагов), то он пять раз будет совать стек туда-сюда по 12 тактов, или сразу пойдёт обрабатывать все остальные?
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
Это действительно так?????
Помню, лет 30 назад в самых первых микроконтроллерах было такое - 12 тактов на одну команду,
а 20 лет назад уже был один такт на команду.
Сейчас такой регресс?
У меги сейчас на большинство команд 1-2 такта, максимум до 5 тактов.
Даташит - 404-я страница. (34. Instruction Set Summary)
А 12 тактов - это чтобы запомнить состояние и перебросить исполнение на подпрограмму прерывания, потом еще столько же чтобы вернуться из прерывания.
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
@avan, каждое прерывание управляется отдельно. И 12 тактов, как мне кажется, ещё довольно мало. Но точно посчитать можно только по ассемблерному коду. Но я также хочу подчеркнуть, что это только подготовительные операции, а ведь внутри прерывания тоже нужно что то сделать.
 
  • Лойс +1
Реакции: te238s

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
ESP8266, там 80 мГц, Знаю про него я столько же, сколько и про мегу2560 (т.е. почти ничего).
8266 тоже уже устаревший чип, смотрите esp32 или esp32-s3.

да, это всё предполагается.
аппетит приходит во время еды :) не знаю за что вам браться, смотрите сами по своим силам. Если чувтсвуете что реализуете всё что нужно используя одни лишь сигналы прерываний, то все равно какой чип взять ) Но, вариант где больше половины вашей работы уже сделано на аппаратном уровне я вам в пример привёл. Если есть опыт работы с РТОС - дерзайте.

в какую сторону - определяется для каждого соответствующим битом на одной из ножек процессора
я не оч понял, но не суть если вы про ДУП в том или инном виде. Собственно счетчик импульсов в есп32 как раз и предназначен для считывания и обработки таких датчиков, в частности энкодеров. Вот вам как пример готовая библиотека использующая этот движёк.

а те , которые редки - будем просто проверять соответствующую ножку процессора внутри частого прерывания
ну строго говоря идея так себе. "Бест-практис" это когда в обработчике прерываний вы выполняете только "безопасные" функции - выставить семафор, дернуть флаг, стрельнуть сигналом по таске... А читать пины и прочее это уже не по фен-шую. К моменту входа в обработчик вы уже должны знать что там у вас на нужных пинах, либо отложить это действо на потом.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
8266 тоже уже устаревший чип,
ESP-01 (тот-же 8266) до сих пор актуален из-за своих размеров.
Но обычным модулем я-бы уже ставил ESP32.
И нужно понимать, что на низком уровне под ESP особо не попишешь, почти вся периферия только через SDK.
 
Изменено:
  • Лойс +1
Реакции: Andrey12

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
@avan,при выходе из прерывания МК выполняет одну инструкцию основной программы и снова те же 12 тактов очередного прерывания.
Опять же,это в среднем. На Си у меня выходило от 8 до 30,смотря какой обработчик. На ассемблере можно и в 2-4 такта уместить,если продумать всё.

пять раз будет совать стек туда-сюда по 12 тактов, или сразу пойдёт обрабатывать все остальные?
Увы,но да. Если писать на Си.
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
3 такта на синхронизацию флага прерывания, 2 такта на переход на обработчик, 4 такта на RETI, т.е. 9 тактов - только "служебные" команды. Загнать один регистр в стек (PUSH) - 2 такта, вынуть (POP) - ещё два такта. Без регистров делать в процедуре нечего, так что минимальное время - 13 тактов, не считая реальной обработки внутри.
 
  • Лойс +1
Реакции: vortigont и te238s

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
ESP-01 (тот-же 8266) до сих пор актуален из-за своих размеров.
есть esp32-c3 примерно в тех же габаритах. 8266 акуален разве что если уже есть нужная готовая прошивка.

И нужно понимать, что на низком уровне под ESP особо не попишешь, почти вся периферия только через SDK.
это тоже справедливо только для 8266. Под есп32 почти вся периферия кроме радиомодуля открыта, есть довольно подробная документация по всем регистрам/прерываниям. Если чего-то не хватает в хал от esp-idf можно самому поправить/свое написать.
 
6 Янв 2020
122
-4
есть довольно подробная документация по всем регистрам/прерываниям. Если чего-то не хватает в хал от esp-idf можно самому поправить/свое написать
да уж... если я займусь сейчас переводом книги на 700 страниц, то не сделаю ничего ни в этом году, ни в следующем.
А к концу перевода и этот есп32 устареет.
Но всего через три месяца вся эта работа (разработка собственно устройства и ПО) уже будет никому не нужна.
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
@avan,зачем 700 страниц сразу? Я Атмел 8 битки по даташитам изучал года 3. Смотреть нужно то что интересует по периферии,а это не так много,даже для АРМов.
Тут два пути. Либо изучаешь сам,либо платишь деньги тому,кто уже изучил)
 
  • Лойс +1
Реакции: Andrey12 и vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
да уж... если я займусь сейчас переводом книги на 700 страниц, то не сделаю ничего ни в этом году, ни в следующем.
вы же сказали что про атмел тоже ничего не знаете, так какая разница что изучать. Я вам выше кидал ссылку на готовую библиотеку использующую этот движёк - разберитесь как она работает, уточните нюансы по документации и пишите свой код. Программисты обычно овладевают техническим английским раньше чем научатся программировать, поэтому переводы даташитов никому не нужны кроме как для сертификации.
А при сроках в 3 месяца надо не думать как в прерываниях разбираться и доки переводить, а хватать готовые контроллеры и попытаться успеть для них соорудить обвязку, схему управления с внешним интерфейсом и бегом клепать тестовый образец и тестировать. Но я "не настоящий сварщик", просто мысли в слух.
 
  • Лойс +1
Реакции: Andrey12 и te238s
6 Янв 2020
122
-4
либо платишь деньги тому,кто уже изучил
тут два момента:
1) то, что наконец изучил другой - уже устарело
2) сам останешься пожизненно неучем - откуда тогда деньги?


А при сроках в 3 месяца надо не думать как в прерываниях разбираться
тут в процессе общей и крайне полезной дискуссии выяснились очень интересные вещи - некоторые "другие" процессоры делают аппаратно то, что на исходном требовалось бы делать программно. Это может стать решающим фактором.
но когда немерянные тонны текста по всевозможным процессорам, и все на иностранном языке,
и чтобы узнать то, что нужно, нужно перевести 99, 99999999% того, что не нужно....
В общем, попытаюсь разобраться во всех прозвучавших советах, тогда появятся вопросы....
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
есть esp32-c3 примерно в тех же габаритах. 8266 акуален разве что если уже есть нужная готовая прошивка.
Да, подотстал я. Нашел вот такие модули а-ля ESP-01: https://aliexpress.ru/item/1005003741851551.html
Но и не мудрено, размеры чипа те же самые, можно с минимальными переделками плату от ESP-01 использовать.
 
  • Лойс +1
Реакции: vortigont
6 Янв 2020
122
-4
Почитал.
Выяснилось, что у готовых плат-контроллеров с esp32-s3 мало ног. Не годится.
Да и заточены они в основном на ви-фи и интернет, а мне ни того, ни другого не надо.
Да и 240 МГц - это перебор. И осцил нужно покупать специальный.
Пока попробую приручить Мегу-2560, - возможно, всё и обойдётся...
Может,попробую и с имеющейся 8266 - если Мега не будет успевать. Частота в ней 80 Мгц - куда ещё больше?
Но ESP-32 38P на всякий случай заказал
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
Да и заточены они в основном на ви-фи и интернет, а мне ни того, ни другого не надо.
Да и 240 МГц - это перебор. И осцил нужно покупать специальный.
звучит так как будто вы сами себя отговариваете :) ну вам виднее. То что они умеют wifi не значит что от этого они хуже дрыгают ножками (а скорее всего даже лучше). Ядро есп32 может работать на частоте от 10 МГц если 240 для вас слишком много.
Вообще я за есп32 не агитирую, я к тому что сейчас есть много других чипов во всех аспектах лучших чем 8 битные атмелки. А писать контроллер моторов опираясь лишь на прерывания от пинов и никакущий ШИМ в атмелке это надо быть или крутым эмбедером или отчаяным :)
В любом случае успехов вам!
 
  • Лойс +1
Реакции: Andrey12

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
@avan,имеется вввиду функционал.
Авр 8 бит:
Режимы PWM,CTC,счетчик,захват,асинхронный вход
А на "крутых" МК всякие DMA,узлы управления 3х фазным мотором и прочее.
 
  • Лойс +1
Реакции: Andrey12

poty

★★★★★★✩
19 Фев 2020
3,237
942
А какое отношение имеет DMA к PWM?
Трёхфазным мотором может и AVR управлять. Примеры, насколько я помню, есть даже здесь, у Гайвера.
 
6 Янв 2020
122
-4
Трёхфазным мотором может и AVR управлять
У меня всё проще. Управление двигателем осуществляет готовый покупной драйвер, у которого два входа: задаваемая скорость (ШИМ) и направление - бит,
и два выхода от датчиков: реальная скорость - последовательность импульсов и импульс (фронт) перехода через нулевое положение механизма