-
- случайно к АЦП DMA не прикручен? - Vit(03.11.2021 18:09)
- Точно нет! - Aleksey_75(03.11.2021 18:14)
- Ну и напрасно :) - ЫЫyкпy(04.11.2021 08:05)
- Точно нет! - Aleksey_75(03.11.2021 18:14)
- Использую такой. USB Host, MassStorage Class. И АЦП измеряет с
периодичностью 1мс (по таймеру, без прерываний АЦП). Неприятностей
не наблюдал. il-2(132 знак., 03.11.2021 16:59)
- Спасибо! гляну, но отключаемый код это ADC1->CR2 |=
ADC_CR2_SWSTART; ,все остальное отключил, "проверяем флаг,
сбрасываем, запускаем преобразование" сейчас даже DR не читаю - Aleksey_75(03.11.2021 17:05)
- Как это
неработает. Реальный случай, аналогичный твоему: il-2(939 знак., 04.11.2021 05:49)- И мне как-то аналогично повезло. :-) И именно таким макаром - вылезал за пределы массива. Ломалось то, что всё жизнь работало. :-) - Лaгyнoв(05.11.2021 20:24)
- СПАСИБО!!! Даже представить не мог чтоб звезды так сошлись, ломало размерность данных в cdc rx буфере, соответственно принятые данные не сохранялись т.к. срабатывала проверка на выход за пределы массива.. - Aleksey_75(05.11.2021 20:22)
- Ага, похожий случай. Поэтому и требуют после изменения ПО проводить испытания в полном объеме. - symbions(04.11.2021 10:41)
- А если чуть по-другому Vit(228 знак., 03.11.2021 18:26)
- АЦП молотит непрерывно? А если покрутить частоту молотилки (через
время выборки, например) и посмотреть, будет ли влияние на глюки
usb? - SciFi(03.11.2021 17:09)
- да, ацп по кругу опрашивает 5 каналов (с одним каналом тоже самое).
частоту и время крутил туда сюда, без результатов, делитель ацп и
время выборки сейчас на максимум - Aleksey_75(03.11.2021 17:12)
- Да ну нафиг. Не верю. Предлагаю не "комментировать ADC1->CR2
|= ADC_CR2_SWSTART;", а делать запуск или остановку АЦП отладчиком,
без кода. Чтобы исключить влияние меняющегося кода на это дело. - SciFi(03.11.2021 17:17)
- сек! Ну так все ок, но я не могу запускать преобразование по
завершению. если "тыкать" ручками все ок - Aleksey_75(03.11.2021 17:26)
- В каком смысле "запускать по завершению"? Разве АЦП сам по кругу не
бегает? Там через код зацикливание? - SciFi(03.11.2021 17:26)
- яж выше написал, в коде "проверили флаг готовности данных, сбросили
флаг, запустили новое" это хоть в отладке, хоть в работе, хаотично
ломает прием по cdc.. яб использовал инжектированные каналы, но их
всего 4, а у меня 5 - Aleksey_75(03.11.2021 17:30)
- Зачем "закат солнца вручную"? Образуется непредсказуемость. Я бы оставил автозапуск без автоматического сканирования каналов. По готовности очередного отсчёта, входим в прерывание. Забираем готовый отсчёт и вручную устанавливаем номер канала для послеследующего канала (следующий канал уже зафиксирован из прошлого прерывания). Так получаете стабильную выборку и, в то же время, произвольную последовательность каналов. - Nikolay_Po(03.11.2021 19:50)
- Процессорного времени хватает на обработку USB? Может, проц занят
только ожиданием флага АЦП? - SciFi(03.11.2021 17:54)
- С этим все норм, проверил, из main, раз в 5 мс. Да и усб на
прерываниях, не может друг другу мешать - Aleksey_75(03.11.2021 17:57)
- Я делаю так: В обработчиках прерываний, в прологе, устанавливаю диагностический выход в единицу. А в main(), в конце цикла, сбрасываю тот же выход в ноль. И смотрю осциллографом на ножке, как загружен процессор. Сразу видны проблемы со скоростью, если есть. - Nikolay_Po(03.11.2021 22:56)
- И вот это "из main, раз в 5 мс" вообще не понимаю. Опять же, если
"усб на прерываниях, не может друг другу мешать", значит, можно в
main() вставить "while (1) {}", и всё будет работать? Советую
проверить. - SciFi(03.11.2021 20:08)
- так в main Aleksey_75(134 знак., 03.11.2021 23:10 - 23:37)
- Завязывай писать if (что-тотам == true) RxTx(1 знак., 04.11.2021 15:45, ссылка)
- чуток в сторону, но true часто всё, что не false. а читается конструкция вааще странно. я бы предположил, что от get_systick() получаем число, но никак не bool - Vit(04.11.2021 07:43)
- Если каждые 5 мс, тогда непонятно, зачем "проверили флаг готовности
данных, сбросили флаг, запустили новое". Можно просто "запустить
новое", ведь старое за 5 мс точно закончилось? - SciFi(03.11.2021 23:27)
- привычка выработанная годами, как и проверка указателя на NULL )) ну это не сильно важно - Aleksey_75(03.11.2021 23:36)
- так в main Aleksey_75(134 знак., 03.11.2021 23:10 - 23:37)
- Всё равно хочется исключить влияние изменения прошивки при
комментировании. Тогда "static int volatile test;" и участок с
проверкой и перезапуском АЦП обернуть "if (test) { ... }". Потом
отладчиком переключаем test и смотрим, остался ли эффект. - SciFi(03.11.2021 18:00)
- Через пару часов буду за компом проверю отпишусь - Aleksey_75(03.11.2021 18:15)
- С этим все норм, проверил, из main, раз в 5 мс. Да и усб на
прерываниях, не может друг другу мешать - Aleksey_75(03.11.2021 17:57)
- яж выше написал, в коде "проверили флаг готовности данных, сбросили
флаг, запустили новое" это хоть в отладке, хоть в работе, хаотично
ломает прием по cdc.. яб использовал инжектированные каналы, но их
всего 4, а у меня 5 - Aleksey_75(03.11.2021 17:30)
- В каком смысле "запускать по завершению"? Разве АЦП сам по кругу не
бегает? Там через код зацикливание? - SciFi(03.11.2021 17:26)
- сек! Ну так все ок, но я не могу запускать преобразование по
завершению. если "тыкать" ручками все ок - Aleksey_75(03.11.2021 17:26)
- Да ну нафиг. Не верю. Предлагаю не "комментировать ADC1->CR2
|= ADC_CR2_SWSTART;", а делать запуск или остановку АЦП отладчиком,
без кода. Чтобы исключить влияние меняющегося кода на это дело. - SciFi(03.11.2021 17:17)
- да, ацп по кругу опрашивает 5 каналов (с одним каналом тоже самое).
частоту и время крутил туда сюда, без результатов, делитель ацп и
время выборки сейчас на максимум - Aleksey_75(03.11.2021 17:12)
- Как это
- Спасибо! гляну, но отключаемый код это ADC1->CR2 |=
ADC_CR2_SWSTART; ,все остальное отключил, "проверяем флаг,
сбрасываем, запускаем преобразование" сейчас даже DR не читаю - Aleksey_75(03.11.2021 17:05)
- ну накидайте хоть каких версий, у меня уже моск сломан в трех
местах... - Aleksey_75(03.11.2021 16:19)
- Код АЦП точно не блокирующий? Вложенность прерываний разрешена? Nikolay_Po(205 знак., 03.11.2021 19:44)
- Прерываний по ацп не используется! - Aleksey_75(03.11.2021 20:03)
- Ну и не используйте прерываний. По флагу готовности, забирайте
результат, указывайте канал для следующий выборки и всё. Пусть
выборки начинаются автоматически. Nikolay_Po(285 знак., 03.11.2021 22:49)
- да причем здесь обработка данных с ацп? как только запускаю ацп херится прием по cdc... ну если интересно, смотрю ногодрыгом на анализаторе, проверка флагов и обработка данных с ацп занимает 70мкс каждые 200мс, каждые 5мс тупо прибавление результата ацп (скользящее среднее) - Aleksey_75(03.11.2021 23:02)
- Ну и не используйте прерываний. По флагу готовности, забирайте
результат, указывайте канал для следующий выборки и всё. Пусть
выборки начинаются автоматически. Nikolay_Po(285 знак., 03.11.2021 22:49)
- Прерываний по ацп не используется! - Aleksey_75(03.11.2021 20:03)
- Если отдельно каждый байт отправляете, то можно попробовать
отправлять массивом по размеру конечной точки USB. - PeterD(03.11.2021 18:05)
- Отправка стандартизированным пакетом, минимум 12 байт, максимум 2048 (естественно разбитыми подьразмер ендпоинта 64 байта ) - Aleksey_75(03.11.2021 18:17)
- Говнокод. Это версия, если что. - SciFi(03.11.2021 16:22)
- в каком месте ?? usb комфортно работает и обрабатывает практически
все возможные интерфейсы, spi на 4 слейва, 2can, 4 uart, io...
затык только с ацп - Aleksey_75(03.11.2021 16:23 - 16:25)
- "Может быть, тебе дать еще ключ от квартиры, где деньги лежат?"©
:-) Отладчик в зубы — и вперёд. - SciFi(03.11.2021 16:25)
- 2 дня с отладчиком и анализатором... просто не падает в usb
прерывание с самым высоким приоритетом - Aleksey_75(03.11.2021 16:27)
- Errata? - Evgeny_CD(03.11.2021 16:28)
- смотрел, ничего там про это нету - Aleksey_75(03.11.2021 16:28)
- для теста, вдруг usb косячит, гоняю 4мб массивы
пк->stm->spi флеш и обратно (контроль по crc32). все ок,
более того девайс по таймстепу четко шлет статусные пакеты и
принимает командные.... как запустил ацп отправка ок, прием через
раз, причем очень хаотично - Aleksey_75(03.11.2021 16:37)
- В еррате вот что есть: "In order to guarantee correct operation of
the USB OTG FS peripheral, the AHB frequency should be configured
to be not less than 14.2 MHz". Соблюдаем? - SciFi(03.11.2021 16:40)
- еще как Aleksey_75(41 знак., 03.11.2021 16:47, картинка)
- Всё-таки куб? Ну тогда есть ответ на вопрос "в каком месте говнокод?" В кубе же. - SciFi(03.11.2021 16:49)
- еще как Aleksey_75(41 знак., 03.11.2021 16:47, картинка)
- В еррате вот что есть: "In order to guarantee correct operation of
the USB OTG FS peripheral, the AHB frequency should be configured
to be not less than 14.2 MHz". Соблюдаем? - SciFi(03.11.2021 16:40)
- для теста, вдруг usb косячит, гоняю 4мб массивы
пк->stm->spi флеш и обратно (контроль по crc32). все ок,
более того девайс по таймстепу четко шлет статусные пакеты и
принимает командные.... как запустил ацп отправка ок, прием через
раз, причем очень хаотично - Aleksey_75(03.11.2021 16:37)
- смотрел, ничего там про это нету - Aleksey_75(03.11.2021 16:28)
- Errata? - Evgeny_CD(03.11.2021 16:28)
- 2 дня с отладчиком и анализатором... просто не падает в usb
прерывание с самым высоким приоритетом - Aleksey_75(03.11.2021 16:27)
- "Может быть, тебе дать еще ключ от квартиры, где деньги лежат?"©
:-) Отладчик в зубы — и вперёд. - SciFi(03.11.2021 16:25)
- в каком месте ?? usb комфортно работает и обрабатывает практически
все возможные интерфейсы, spi на 4 слейва, 2can, 4 uart, io...
затык только с ацп - Aleksey_75(03.11.2021 16:23 - 16:25)
- Код АЦП точно не блокирующий? Вложенность прерываний разрешена? Nikolay_Po(205 знак., 03.11.2021 19:44)
- случайно к АЦП DMA не прикручен? - Vit(03.11.2021 18:09)