глянул - появились у нас в базарном киоске soic8 ATtiny212 ATtiny202, чуть дороже ATtiny13 - а там навалили таймеров для генерации тона
Прям навалили? Захочешь частоту энкодером менять, в AN2434 объясняется как это сделать при помощи двух 16-ти битных таймеров и CLC, итого остается один 12-ти битный таймер... Для сравнения, у любого STM32G0 из десятка таймеров 4 умеют работать с энкодерами.
Собственно относительно ардуиноIDE смысла в отладчике нету. Относительно STM (ARM)... в данном разделе принимается лишь то, что касается применения "в рамках референса" соответствующих платок-платформ (синя таблетка и подобные). Разбор начинки ARM - удел соответствующей ветки. В данном обсуждении предпочтительно или то, что имеется в ардуиноIDE "в рамках референса" или то, что касается семейств MCS51, AVR, PICсреднемладших под ассемблером. Просто невозможно за всеми тонкостями вовремя уследить и качественно разбираться - новый комплект AVRок от микрощипа тому подтверждение.
да по сравнению с тини13 навалили. И речь была о генерации тона - теперь таймеров хватит для этого и пр.. Когда надо энкодер - тут да аппаратный вне конкуренции, проверено. Пока поддержки ардуинщиками 8-и ногих STM32G0 не видно, но тенденция с G0 есть https://www.compel.ru/lib/132248
Досадко, что те новинки "прошли мимо внимания" - не все в полном объеме доступно, да и просто перечитать - там весьма большой объем. Как уже ранее (еще в "винной" предполагалось - пока народ в ARMы уткнулся остальные производители молча "хреНОВИНКИ" готовили. Микрощип успел и PICовые обновить с "улучшенной среднемладшей" и AVRки солидно перепотрошить. К тому времени и ардуинки весьма солидно приросли... В результате на сегодня идет смещение к "мультикристалльным" конструкциям, где одновременно будут применяться МК разных семейств - одни в качестве"голов" другие в качестве СБИС периферии сопровождения. Начало подобному применению положило таки адурино - там наиболее часто стали применять СБИС. Однако простейшую "целевую СБИС" можно и на малолапом МК соорудить самостоятельно. ВОТЬ... Кстати вопрос о "выжимке" предельных возможностей из имеющихся таймеров это как раз из соображений применения "малолапок" в качестве "целевой СБИС" (еще не закрыт анализ DDS или простой счетчик/делитель - по завершении чего-то выложу...)
Относительно ардуино и STM - там ведь "ограничения референса" практически всю прелесть "свободы действий" нивелируют. Второе - сам "референс" относительно STM весьма ХРЕНОВО описан (не сравнить к примеру с теми же Z-Uno - https://z-uno.z-wave.me/technical/ собственно референс https://z-uno.z-wave.me/reference/ )
Относительно ардуино и STM - там ведь "ограничения референса" практически всю прелесть "свободы действий" нивелируют.
Огласите весь список, пожалуйста. Не вижу ограничений - такой же digitalWrite и пр. Документация есть прекрасная на вики https://github.com/stm32duino/wiki/wiki
Если использовать только средства референса, полного управления аппаратной начинкой не получить. Даже для тех же АВРок (не говоря уже о ESPи ARM). В арсенале имеется только определенный "универсальный набор". Самодельные библиотеки на Си(да еще с ассемблерными вставками) не в счет - это уже "расширенное дополнение" написание которого отнюдь не для "рядового пользователя". Добавить сюда "накладки" в случае перекрестного использования аппаратных средств как функционалом IDE, так и свежеизобретенной самодельной прожкой. Так что для соответствующего "аппаратного примитива" придется "полноценный" ЯВУ с элементами ассемблера применять. И ессно полностью документацию на потроха МК прорабатывать. "описание различий"... там и разрядность разная (для АВРок одна, для 32-х разрядных другая) и прочие нюансы. Я ж не зря привел пример трактовок для "стандартного референса" - там ни по гитхабу лазить не требуется, ни дополнительных регистраций. Все возможные отличия/особенности открыто заявлены и сведены в единое руководство. Единственно чего не хватает - так отдельного руководства в оффлайн варианте и в виде *.pdf книжи. Не вечно же "носом в комп" пялиться... Глазки жалко...
Кстати... микрощип таки потихоньку переводит кристаллы к "линейной модели" памяти с непрерывным адресным пространством, включающим и регистр-аккумуляторы и РСФ и ОЗУ-ПЗУ-ЕЕПРОМ... Довольно интересное развитие после классических разделенных адресных пространств...
Если использовать только средства референса, полного управления аппаратной начинкой не получить. Даже для тех же АВРок (не говоря уже о ESPи ARM).
Что за дичь. Зачем тогда написан референс, если "не получить" - это как "немножко беременна". Если почитать референс на ардуино ядро для АРМ - возможностей аппаратной начинки там поболе, чем у AVR. А у ESP например есть аппаратный WiFi и в рамках референса на ядро. Насчет встроенных библиотек для ардуино ARM, описанных референсом - там полно всякого, что и "не снилось нашим мудрецам(c)". См. например CMSIS DSP. Тут надо четко понимать, что они (стандартные библиотеки), даже для AVR, имеют свойства пополняться и расширяться от версии к версии самой ардуино ИДЕ. Пишут зачастую даже - нужно ардуино ИДЕ > 1.6 версии. Или версия ядра - "Available in core version greater than 1.7.0".
Цитата:
"описание различий"... там и разрядность разная (для АВРок одна, для 32-х разрядных другая) и прочие нюансы.
digitalWrite, от того что 32, не так разве работает. Ардуино среде все равно там 32 или 8 - все на себя ядро принимает, потому и одна среда на все ядра - смысл то ардуино в этом.
Цитата:
Я ж не зря привел пример трактовок для "стандартного референса" - там ни по гитхабу лазить не требуется...
Какая разница где лазить - оно выводится все равно на экран, вики структура нагляднее (имхо) и вики-разметка - это облегчённый язык разметки. Сама википедия см. https://ru.wikipedia.org/wiki/MediaWiki Вики можно сконвертить в pdf и распечатать, есть онлайн конверторы, а на экране (хорошем) референс таки удобнее - мышкой тычеш в нужный раздел и ничего лишнего, удобно, а в другом окошке рядом сразу редактирование кода, можно даже копипастить некоторые примеры из референса.
Разница в том, что "НАДО ЛАЗИТЬ", искать по разным страницам в разных источниках, переконвертировать и проччие лишние поползновения делать вместо того, чтоб быстернько и удобненько воспользоваться готовым. Главное пример качественного подхода есть - но не воспринимается как правило для готовки сопровождающей документации. Посему и результат - в основе пользователи библиотек (и то в большинстве случаев в прямом копипасте примеров). Сами библиотеки приходится разбирать - чего там и как - идут практически без необходимых простых описаний. А это - лишнее время... Конечно для учебного интереса чужой код покопать в период обучения можно.... Но в большинстве случаев ИСПОЛЬЗОВАНИЯ как готового материала "раскопки" не слишком удобны. Референс дает готовые функции и ограниченное его рамками управление определенным набором аппаратных средств МК. Естественно неиспользуемые средствами референса аппаратные модули можно программировать, но опять же теми средствами, что "референсом" предоставлены. Ограничения в случае отступлений от "стандартного минимума" напрямую не описываются - дескать "лезьте во дебри" - это подход для разработчиков самой IDE удобен, но не для пользователей. К примеру мы используя тот же ассемблер/Си не лезем изучать как сам компилятор устроен, а пользуемся его описанием пользователя/users manual/ (синтаксис, директивы, макросы, описание команд, правила создания файлов запуска по-максимуму). Так почему же подход к адуринке должен отличаться?
именно не надо "лазить", используется банальный принцип самого интернета, html страниц - нажми на кнопку (ссылку) - получишь результат. Это очень удобно. Да, для тех кто раньше пользовался печатной документацией, не привычно. А принцип должен отличаться - мухи отдельно, котлеты отдельно. Хотя ARM компилятор по вики удобно же https://developer.arm.com/tools-and-sof ... m-compiler
Это СБИС сопровождения/расширения возможностей для МК. Штука весьма хорошая, но пока вопрос вертелся вокруг программного DDS и аппаратного счетчика в обычном МК да сравнения чего удачнее применить можно для генерации частот с возможно меньшей дискретностью перестройки. Чего проще, но при том же и качественнее - учитывая стабильность результата, наименьшие затраты ресурсов и разумную достаточность по "хотелкам". Т.е. - где грань применения простейшего делителя, где уже удобнее программный DDS, а где и внешний кристалл окажется много более удачным решением.
давненько уже упоминаний о СБИС не было - решил освежить (из википедии)
Цитата:
В зависимости от степени интеграции применяются следующие названия интегральных схем: малая интегральная схема (МИС) — до 100 элементов в кристалле средняя интегральная схема (СИС) — до 1000 элементов в кристалле большая интегральная схема (БИС) — до 10 тыс. элементов в кристалле сверхбольшая интегральная схема (СБИС) — более 10 тыс. элементов в кристалле Ранее использовались также теперь уже устаревшие названия: ультрабольшая интегральная схема (УБИС) — от 1-10 млн до 1 млрд элементов в кристалле[9][10] и, иногда, гигабольшая интегральная схема (ГБИС) — более 1 млрд элементов в кристалле. В настоящее время, в 2010-х, названия «УБИС» и «ГБИС» практически не используются, и все микросхемы с числом элементов более 10 тыс. относят к классу СБИС.
У махонького мк мало флеша, в данном случае меньше 1КБ, а для DDS нужны таблицы. К махонькому мк не подключишь кварц, у него нет DAC, а частота ШИМа ограничена низкой частотой самого мк. И DMA у него нет, а брать данные из таблицы и выводить в ШИМ каждое прерывание - это далеко не самая быстрая операция. В то же время сложение и сдвиг двух чисел - это элементарная операция, по крайней мере для ARM. Для PIC она не совсем простая, он 20-ти битные числа складывать напрямую не умеет и сдвигает только на бит за раз, потому для него такой модуль полезен, а для cortex это несколько операций и т.к. DMA у него есть, то он уделает этот PIC по всем параметрам.
// Timer2 configuration for PWM PR2 = 99; // PWM period register for 40 kHz T2CON = 0x04; // Timer2 on // PWM 1 configuration PWM1CON = 0xC0; // PWM1 on, PWM 1 output enable PWM1DCH = 50; // PWM duty initialized to 50% PWM1DCL = 0; PIE1bits.TMR2IE =1; // Timer2 interrupt enable INTCON =0xC0; // Global interrupt enable, peripheral interrupt enable TRISA = 0x00; // Port A as digital output port ANSELA = 0x00; // Port A as digital output port }
void interrupt Timer2_ISR(void) { if (TMR2IF) { ++gDutycount; // Increment the counter variable by 1 if(gDutycount == 39) { gDutycount = 0; } PWM1DCH = SINETABLE[gDutycount]; // Load the duty cycle register according to the sine table TMR2IF = 0; } }
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения