Поздравляем 2nd с днём рождения!
- Помогите идеей - как детектить наличие-пропадание меандра 80Гц в
течении 0.3 секунды на ноге проца (stm32f4)? Есть FreeRTOS с тиком
1ms и прерывания на ноге. Точность +-10гц подойдет. В голову
приходит кольцевой буфер с замерами и скользящее окно. Как то все
не то. - Mty1(30.12.2024 00:22, ARM, полностью)
- Пропадание меандра - это 0? Или 1? Или отсутствие смены? - max(31.12.2024 00:38)
- А что ответы с использованием AI теперича под запретом? Я смотрю
ответы Бомжа удалили. Хорошо успел скопировать в ворд самый
интересный. AI технология нового технологического уклада - на
Сахаре под запретом? - Mty1(31.12.2024 00:35)
- Отставить. Таймера нет. Ок, прерывание EXTI обнуляет счётчик.
Прерывание системного таймера счётчик увеличивает. Если счётчик
превысил 300 - алярм. LightElf(346 знак., 30.12.2024 16:21)
- Одноточечное Фурье. Причем по меандру. Практически так.
Заготавливаешь табличку IBAH(573 знак., 30.12.2024 15:37)
- Просто же. В прерывании обнуляешь инкрементальный счетчик, что в
ртос, что в систике, если он достиг критического потолка - твоих
300 мс. имеешь событие и ветвление. - bnb62(30.12.2024 13:26)
- Не нужен кольцевой буфер. Достаточно скользящей средней суммы.
Через каждые 1 мс если вход = 1, то прибавляем 1 к сумме до
достижения ей какого-то определенного верхнего уровня (скажем
количество тиков за 1,5-2-3 периода), если на входе 0, то уменьшаем
на 1 вплоть до нуля. И делаем сравнение с пороговыми уровнями. Если
выше верхнего порога, то значит меандр превратился в устойчивое
состояние 1. Если ниже нижнего уровня, то значит "застрял" в
устойчивом состоянии 0. reZident(186 знак., 30.12.2024 12:53)
- С использованием аппаратного таймера измерять ширину импульса. - Cкpипaч(30.12.2024 10:31)
- Звук! - Kpoк(30.12.2024 08:35)
- Ну вот как я определяю пропадание 50 Гц на ноге stm32 с тиком 1
мсек. Есть признак "1" и "0" на выводе. Они должны чередоваться .
Каждые 10 мсек. Если "1" или "0" зависли на время бОльшее чем 1
период (у меня 30 мсек) - пропал меандр. Это я делаю в прерывании
systick. - Лaгyнoв(30.12.2024 07:13)
- древний стандартный селектор импульсов - "оцифровываешь сигнал со
сдвигом 90 градусов - то есть квадратурно" что эквивалентно
цифровому гетеродинирования в ноль. если частота априрно изветгна =
80Гц то и фильровать ничего не нало - есть сигнал хотя бы на одном
из выходов - значит есть пилот тон. нет - то значит тишина.
Преплетать FreeRTOS не нужно - тамером сделать 80Гц и от него через
DMA грабить вход. разве не хорошо так будет? - klen(30.12.2024 00:29)
- не могу решить задачку для двоечников - stm32/ch32:таймеры -
сгенерить импульсы с выровненными фронтами по старту таймера в
режиме однократного импулса(one-pulse mode). что бы не делел -
выровнены спадом по заду периода. направление счета менял - почему
то ничего не меняется. на интервале когда счетчик не активен -
выходы должны быть в нуле. klen(1 знак., 22.12.2024 15:54, ARM, картинка, полностью)
- У WCH заявились мелкокристаллки для всяческих моторчиков. Серия
CH32M. LightElf(2 знак., 17.12.2024 18:07, ARM, ссылка, ссылка, полностью)
- Сегодня дописал дотестил. ch32v307 можно распердолить на 240МГц,
делители ahb, apb1, apb2 равны 1. Использую eth, i2c 1.8MHz, uart 1
мегабит, rng, crc, таймеры .... но есть нюанс - во флеш лучше нe
обращатся, упадет в трап. - klen(20.12.2024 02:45, ARM, полностью)
- Artery AT32F407, АЦП. Всё время получаю значение 0. Настроил всё
верно, проверял раз сто уже. И тактирование, и порты, и настройку
самого измерения. В чём может быть проблема ещё, никто с таким не
сталкивался? FDA(1448 знак., 14.12.2024 00:32, ARM, полностью)
- китайцы что то изобретают - ch32v006/ch32v007/ch32m007 : Streamlined Timer. непонятое... но интересное klen(218 знак., 18.05.2024 16:48, ARM, ссылка, картинка, полностью)
- Спешу поделиться с коллегами по пескам. AT32F435. Работает связка
TMR5->start->TMR20CH1->ADC1->DMA. В прерывании
по DMA останавливаем TMR20. Проблема состояла в том, что работало
только один раз. Потом транзакции прекращались и в прерывание по
DMA код не влетал. Проблема разрешилась выключением/включением бита
ADC1->ctrl2_bit.ocdmaen перед запуском очередной сессии DMA.
Напомню, что этот бит переключает целевой флаг периферии (в данном
случае АЦП) на my504(192 знак., 12.12.2024 15:28, ARM, полностью)
- Вопрос по плагину egit для CubeIDE и git for windows. Если я
сконфигурю репозиторий для проекта stm32 при помощи git for windows
и начну с ним работать, то потом egit плагин для Cube с ним будет
корректно работать? (Пытался начать с egit сразу, но понял, что без
основ command line нихрена не понимаю логику работы) - Mty1(13.12.2024 01:53, ARM, полностью)
- Единый разъем Jtag для Stm32f4 и Altera ПЛИС MaxV - чтобы грузить
прошивку и отлаживать Stm32 - такое возможно? - Mty1(09.12.2024 13:25, ARM, полностью)
- А вот (чисто теоретически). USB Host требует стабильную частоту 48
МГц. Или не сильно стабильную? Много лет у меня в STM32L476 48 МГц
получались из MSI, частота которого подстраивалась от LSE. А я взял
и убрал LSE. Нету его. Значит не подстраивается MSI. А Host у меня
нормально работает. Или это потому что комнатная температура? А на
морозе MSI уйдет на 8% и ку-ку? Хотя на минус 40 точно никому не
нужно пихать флэшки в USB. :-) Итак - сколько процентов можно
сдвинуть 48 Лaгyнoв(4 знак., 07.12.2024 14:55, ARM, полностью)
- Предположу, что ежели подключенный девайс умеет в Crystal-less - то
пофиг. Уедут они оба синхронно. - LightElf(10.12.2024 19:11)
- Резюмэ? При работе с USB обязательно применяем внешний кварц, а то
и термостатированный TCXO корпус, обеспечивая тайминг входа в майн
луп 2 минуты для стабилизации частоты? - bnb62(08.12.2024 09:16)
- у gd32f450 по этой теме отдельный IRC48 для USB, все работает,
подробности по точности не смотрел - Aleksey_75(07.12.2024 21:31)
- И не только у него. Это называется Crystall-less USB Device. Тут
главное - DEVICE!!!. Есть проверенный рабочий механизм, позволяющий
USB Device подстраивать свой генератор по пакетам SOF, которые USB
Host выдает с интервалом 1мс (для Full-Speed). Естественно, что
дискретность подстройки генератора у USB Device должна быть меньше
необходимой точности. - il-2(08.12.2024 11:33)
- Для GD32F450 начальная точность IRC48M составляет ±2% @ 25ºC,
пользовательская подстройка позволяет получить примерно ±0,12%.
Если я ничего не путаю, устройства USB device могут подстраивать
свое тактирование по SOF (начало фрейма). reZident(1 знак., 07.12.2024 22:11, картинка)
- Ну видимо всё-таки в заданном температурном диапазоне по точности
все устраивает, ну аудиофилы могут подстроить поточнее, на слух ))) - Aleksey_75(07.12.2024 22:14)
- 0,12% это 1200ppm, что заведомо меньше, чем 2500ppm требуемые для
FullSpeed согласно спецификации USB2.0. Для USB FlashDrive, с
которыми можно работать в FS-режиме, такой точности вполне
достаточно. reZident(1 знак., 07.12.2024 22:22, ссылка)
- Это если у вас есть возможность сравнить текущую частоту с опорой и
подстроить встроенный RC. Если вы сам и есть хост, то вам нужна
опора (кварц, часы, GPS). Nikolay_Po(193 знак., 08.12.2024 16:07)
- Вы невнимательно читаете? Я же написал, что такой точности
достаточно для USB FlashDrive, работающим в режиме Full-Speed. USB
FlashDrive относятся к категории USB-device, а не USB-Host. - reZident(08.12.2024 16:19)
- Вы не уточнили роль МК с обсуждаемым генератором. Я утверждаю, что
USB-флешка может не заработать с МК, работающим от IRC48. У меня
есть задача, заставить работать МК с пользовательской USB-флешкой.
Поэтому мыслил именно в этом направлении. - Nikolay_Po(08.12.2024 19:25)
- Я понимаю, что вы имеет право понимать не так, как я написал, а
по-своему. Но попробуйте все же включить разум. Я нигде не писал,
что USB-Host может работать от IRC48M, а только в применении к USB
FlashDrive, устройству которое выполняет функции device, а не host.
Если у себя в голове вы как-то связали мое сообщение, написанное в ответ на сообщение Aleksey_75, с вопросом именно ТС (Лагунова), то почему это должно быть моей
проблемой? P.S. в наших проборах, где reZident(113 знак., 08.12.2024 19:40)
- Если USB3 флешка, может и не заработать, не уверен, что там без
кварца. - Andreas(08.12.2024 19:31)
- а можно подробности ? почему так думаете ? - Aleksey_75(08.12.2024 19:28)
- Вы невнимательно читаете? "IRC48M oscillator Frequency accuracy,
User trimming step 0.12% typ." Это типовой шаг пользовательской
подстройки, а не точность. Nikolay_Po(377 знак., 08.12.2024 19:22, картинка)
- И хост тоже? Вроде, сейчас большинство устройств - дивйсов -
безкварцевые - подстраивают свою частоту по хосту автоматически. Nikolay_Po(154 знак., 07.12.2024 21:44)
- USB2.0 Specification, 7.1.11 Data Signaling Rate - il-2(07.12.2024 16:26)
- Интересно, зачем в таком вопросе вам непременно слухи ОБС? Не
логичнее ли обратиться непосредственно к спецификации USB? Вот что
говорится в USB Specification Rev. 2.0 reZident(2 знак., 07.12.2024 16:22, ссылка, картинка)
- ставлю кварц, ЕМНИП на 8 МГц, чтобы от HSE подстраивать HSI, после
чего отключаю HSE, ну а USB от HSI через PLL, ну и спатоньки.
UART-ы - от HSI без PLL - будятся автоматом, USB-device вместе с
PLL поднимается по ручному мониторингу ноги VBUS, ну и ядро
переключаю на HSI через свою PLL. - Vit(07.12.2024 16:10)
- И всё таки решился. Убираю нафиг LSE. Делаю внешний RTC на DS3231
(SO-8)/ Очень душевная штука оказалось. Главное, что ничего
внешнего не надо. Прицепил параллельно к EEPROM и вуаля. Пугали
меня потреблением. В рабочем режиме от +3 - 80 мкА. От 2032 меньше
1 мкА. Да пусть даже там его макс. 3 мкА будут. У меня пульты чаще
всего круглосуточно работают. Ну и обычный кварц на 8 МГц всё же
ставлю. - Лaгyнoв(10.12.2024 11:09, ARM, полностью)
- А не попадался ли кому Ethernet бутлоадер для CH32F? Собрался
соорудить такой, но может быть можно уменьшить градус
велосипедостроения? Алгоритм работы видится весьма простым: в
основной программе поднять FTP/TFTP/что-то подобное, принимаемый
файл запысывать в не занятую под программу часть флэши, которой у
CH32 с избытком, в отличии от STM32, при перезапуске МК
переписывать принятое на место старой программы крошечным, очень
простым загрузчиком. AlexG(48 знак., 06.12.2024 19:39, ARM, полностью)
- впервые понадобилось capture в таймере STM32. В моем 8-битнике всё
было просто и понятно. Тут какой-то дурдом. Так-то понял, что по
фронту на выводе TIM8 CH1 можно быть где-то сохранить текущее
значение счетчика. Но будет дальше считать? И чтоб пустить с начала
- только по прерыванию? В моем 8-битнике можно было просто задать
перезапуск. И тогда в соответствующем регистре всегда была
требуемая величина. Или я не туда полез? Мне просто надо, не
используя никаких прерываний , в Лaгyнoв(122 знак., 04.12.2024 14:14, ARM, полностью)
- завел такое вот интересное - С++20 Coroutine на К1948ВК018,
прикольно. оно работает. можно делать несложне шедуллеры не выбегая
за средства языка. миленько компактненько простенько. Для
контроллеров с озу 2к флеша 8к просто огонь! klen(9461 знак., 01.10.2024 13:25 - 16:05, ARM, ссылка, картинка, полностью)
- Что-то не понял, как работает caxapa.ru, не регистрирует. xray(206 знак., 29.11.2024 11:15,
)
- Невероятно красиво. Но мне увы не понять. Не владею плюсами. Но
эстетично. - vesago(20.11.2024 07:45)
- сделал сферического коня в вакуме - чистый проект. без crt , без
обработки прерываний по таймеру для событй, без cout. только прыжок
в main по ресету, и код шедуллинга четырех корутин для удобного
наблюдения без шелухи. 940 байт кода и 32 байта данных. листинги
символов и асма. цикловая работа задач - выполнить одн nop. klen(23818 знак., 02.10.2024 12:05)
- Когда очень хочется понять.. но нет времени и вообще влом
разбиратся klen(1 знак., 02.10.2024 02:21, картинка)
- Круто - изобрели PL-I (без стёба - это нужная штука) - symbions(01.10.2024 17:21)
- Это всё жуть как интересно, но ты скажи, все корутины имеют
выделенный стек или што? Или как? Можно юзать вызовы функций и
скока и как настроить? - =AlexD=(01.10.2024 13:41)
- какой умный и правильный вопрос!! уважаю! я сам долго отдуплял
смыслы это твоерниия: Сопрограмма — это функция, которая может
приостановить выполнение, чтобы возобновить его позже. Сопрограммы не имеют стека: они приостанавливают выполнение, возвращаясь к вызывающей
стороне, а данные, необходимые для возобновления выполнения, хранятся
отдельно от стека. Это позволяет использовать последовательный код, который выполняется асинхронно (например, klen(177 знак., 01.10.2024 14:36)
- Не-не вопросов меньше не стало. Т.е. это особый тип функции,
поддержка которых осуществляется на уровне компилятора, а не
библиотеки? А может стек всё же используется, но данные с него
копируются в динамическую память, выделяемую "на лету"? Каковы
накладные переключения корутин? Растут ли они с ростом локальных
данных? Как это вообще выглядит в ассемблере? - =AlexD=(01.10.2024 14:49)
- просьба почитать маериалы -я в первом сообщении накидал, это тремя
словами не выразишь. потом разжую детали. например то что компиллер
это делает все и как - это не либа, это алгоримы кодогенерации в самам компиляторе. наиболее обще
нужно понимать так - есть такие обхекты языка как переменные,
функции, классы и тд, и у них есть поведение согласно стандарту
С++, а теперь есть еще и co_routine. С++20 для поддержки этых
механизмов добавляет ключевые слова языка : klen(28 знак., 01.10.2024 15:05)
- Глянул одним глазком. Ну точно, состояние сопрограммы сохраняется в
куче, размер фрейма должен быть известен на момент компиляции, что
из этого следует - хз, вероятно рекурсии запрещены, может ещё чо. - =AlexD=(01.10.2024 15:54)
- Не обязательно в куче. Могу этот пример с корутинами накидать для
тривиальная прилагуха где нет malloc и new. В promise я опредеояю
где и как выделять фрейм для корутины. Это педаль для настройки. Я
всетаки реализую кучу чтоб юзать всю мощь STL... хотя и его можно
без кучи юзать переопределив аллокатрры на свои. - klen(01.10.2024 16:04)
- Дык какая польза от своих аллокаторов? Только если ты знаешь что и
когда выделяется и подсунуть статические массивы. А таг только
возня лишняя. - =AlexD=(01.10.2024 16:08)
- Я постиг смысл использовать перегрузку new, когда делал свои
визуальные классы. Экземпляров визуальных классов много, а работает
в данный момент времени всегда только один. Поэтому - выделил
статичный буфер памяти, чтобы влезал экземпляр максимального
размера (через union {}). Ну и перегрузил new в базовом визуальном
классе - чтобы возвращался всегда адрес буфера. il-2(264 знак., 01.10.2024 17:08)
- Раз ты такой въедливый - нааа... все ответы тут, реализация
внутренней механики в gcc klen(119 знак., 01.10.2024 16:25, ссылка, ссылка)
- Ты не знаешь, компилятор знает и спускает аллокатору размер фрейма.
Откуда он знает? Он есть построитель дерева и его анализатор.
Прежде чем ты от него получишь целевой асм, он на виртуальной
машине его эмулирует и смотрит что по чем и куда. - klen(01.10.2024 16:13)
- да на хабре про корутины нормально расписано в ряде статей.. а что
не расписано - то и знать ни к чему прогеру - POV(01.10.2024 14:51)
- Коллеги! а вот этих кто-то юзает? обсуждали? sav6622(1 знак., 22.11.2024 19:58, ARM, ссылка, полностью)