Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло... При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?! Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра! И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах. (это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )
Вообще молодец наконец то прогрессивные ролики на РУ ! Делай больше HAL, скоро у sapiess (уркои STM32) инициативу перхватишь :) тому хоть в лоб стреляй, что SPL - УТИЛЬ :) Япошка с st/e2e ясно сказал больше эту шнягу не поддерживаем !, тем более сейчас HAL сделали под все семейства, вкл дешевку 1 и 0.
Заметил у тебя STM Studio стоит оч. наглядно можно показывать что где, как раз для видео роликов. Сейчас сам случайно запустил, считай осциллограф 8 канальный вышел :)
+ali ali00ff Осциллограф наврятли. Там все тормозит если напрямую выводить данные в программу .К примеру выводил синус на осциллографе синус отправляю значения в программу там уже треугольники рисовало.Все красиво если частота маленькая .Там в настройках указано макс. время. сканирования 1мс помоему может и ошибаюсь .
Мне нужно получить максимальное быстродействие при измерении двух параметров. Как Вы полагаете, не будет ли быстрее измерять двумя АЦП? Как вообще измерить скорость считывания?
А нет ли ошибки в этой строке "HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_value, 3);"??? Учитывая, что ADC_value массив и его имя и есть адрес. Не лишний ли знак "&"? И автор так уверенно, мол смотрите как все работает, цифирки бегают!! Ха-ха-ха!
Привет ! Столкнулся тут с небольшой неприятностью - что типа дребезга АЦП . т.е. при регулярном измерении тысячные и сотые вольта, а то десятые скачут ! типа 2,0156; 2,0745; 2,0004 :( Попробовал емкостей навешать и чуть чуть стало лучше,но все же молотит :( . Как бороться ? Может наводка с соседнего висящего в воздухе ? у меня 8 регулярных в ряд, пока 4 использую. Вот не помню - пробовал я отключить инициализацию не используемых или нет, кажется да, но еще раз попробую. Подскажи чего полезного пожалуйста ! Может ф-цию написать для вывода усредненного результата ?
Что-то я не понял. Функция ожидает массив unit32 - Каждый элемент 4 байта. Авто сделал массив unit16 (каждый элемент 2 байта) и явно преобразовав тип передал его в функцию. По моему это явный косяк, функция будет писать за пределы массива, а обращение к элементам массива будет возвращать чушь.
+Artem Kuchin до конца видео смотрели ? Все показывало правильно.Но никто вам не мешает передать массив uint32_t в функцию без преобразования.У меня так)
+ElectroHobby (BARYS ILKAVETS) До конц, конечно. Вижу что вроде работает. Но допускаю, что это совпадение. Бывало такое много раз, что работает, но не должно. Ну например, буфер оверфлоу имеет место быть, но никуда в страшное место не попали данные и потом процедуры вывода опять нужный тип ожидает. Но тут отладчик, так что скорее совпадание. Интересно было бы объявить массив uint16 на 6 элементов и посмотреть что происходит с элементами 3-5. Ну и разумеется, никто не мешает сделать все правильно :) Посмотрел другие туториалы, там массив 32бита. Зачем он такой, если порты 16 битные, АЦП 12битный - хрен знает. А вообще, конечно, спасибо. Мигрирую с AVR на STM32.
Не будет писать за пределы массива. В кубе настроили передачу 16 бит на канал. ДМА 3 раза положит эти 16 бит по указателю на ADC_value подряд (16+16+16). Для эстетически красивого кода надо в кубе настроить передачу 32 бит (раз уж функция так хочет получить указатель на 32 битную переменную) вместо 16 бит (поставить word вместо half word), объявить массив из 32 битных величин, и передать без преобразования типов указатель на первый элемент массива.
Спасибо за видео! Просто супер. А как делать непрерывное преобразование, что бы в отладке постоянно кнопки не дёргать, а что бы всё непрерывно считывалось. Я пытался делать, но у меня теперь на все ноги мусор приходит. Хотелось бы знать как это сделать по науке.
Спасибо огромное тебе ! ....надеюсь :) Тут то все понятно, а вот самое сложное за кадром осталось. Забирать то как ?! 3ий день ебусь с эти ADC+DMA. Уже научным таком начал все калбаки из hal_adc тыкать И никак :( случайным образом данные хватаються то с 1ого то со 2ого канала ацп. Хотя вроде и стопорю dma, и прерывания торможу, сгружаю поочередно в буфера, а не :( Уууй уже чердак свистит. Гору примеров EVAL-овских перебрал, даже старые на кривом SPL и как сговорились все - 1 ацп на проект. С 1им как раз то проблем нет ! HAL_ADC_Start_DMA(хуемаё (uint32_t*) VALUE ) и все Oк Надеюсь дальше покажешь ! :) ps : радует что люди по чуть цивилизации приобщаются, я имею ввиду HAL Зачет ! пойду смотреть твой плейлист дальше. Спасибо !
Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло... При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?! Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра! И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах. (это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )
Привет. Так в видео вроде как раз и используется ДМА. Ложатся показания с АЦП в массив.В основном цикле программы ничего нет?HAL_ADC_GetValue(&hadc1) не используется в данном видео?
отлично, 7 минут и всё встаёт на свои места, чего вечно не хватает в ST "документации"(им кажется, мы рождены для чтения неделями их мутных пдфов)!
Все отлично, но лучше подобный урок сокращать до 3 минут!
+Сергей Филимонов да к сожалению с монтажом видео пока не все гуд.
я увеличиваю скорость воспроизаведения
Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло...
При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?!
Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра
с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра!
И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах.
(это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )
Вообще молодец наконец то прогрессивные ролики на РУ !
Делай больше HAL, скоро у sapiess (уркои STM32) инициативу перхватишь :) тому хоть в лоб стреляй, что SPL - УТИЛЬ :) Япошка с st/e2e ясно сказал больше эту шнягу не поддерживаем !, тем более сейчас HAL сделали под все семейства, вкл дешевку 1 и 0.
+ali ali00ff Sappise оч нравятся его уроки.Но блин пропал он где-то .Давно уже видео небыло.
Заметил у тебя STM Studio стоит оч. наглядно можно показывать что где, как раз для видео роликов.
Сейчас сам случайно запустил, считай осциллограф 8 канальный вышел :)
+ali ali00ff Осциллограф наврятли. Там все тормозит если напрямую выводить данные в программу .К примеру выводил синус на осциллографе синус отправляю значения в программу там уже треугольники рисовало.Все красиво если частота маленькая .Там в настройках указано макс. время. сканирования 1мс помоему может и ошибаюсь .
Мне нужно получить максимальное быстродействие при измерении двух параметров. Как Вы полагаете, не будет ли быстрее измерять двумя АЦП?
Как вообще измерить скорость считывания?
А нет ли ошибки в этой строке "HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_value, 3);"??? Учитывая, что ADC_value массив и его имя и есть адрес. Не лишний ли знак "&"? И автор так уверенно, мол смотрите как все работает, цифирки бегают!! Ха-ха-ха!
Привет ! Столкнулся тут с небольшой неприятностью - что типа дребезга АЦП . т.е. при регулярном измерении
тысячные и сотые вольта, а то десятые скачут ! типа 2,0156; 2,0745; 2,0004 :( Попробовал емкостей навешать и чуть чуть стало лучше,но все же молотит :( . Как бороться ? Может наводка с соседнего висящего в воздухе ?
у меня 8 регулярных в ряд, пока 4 использую. Вот не помню - пробовал я отключить инициализацию не используемых или нет, кажется да, но еще раз попробую. Подскажи чего полезного пожалуйста !
Может ф-цию написать для вывода усредненного результата ?
Что-то я не понял. Функция ожидает массив unit32 - Каждый элемент 4 байта. Авто сделал массив unit16 (каждый элемент 2 байта) и явно преобразовав тип передал его в функцию. По моему это явный косяк, функция будет писать за пределы массива, а обращение к элементам массива будет возвращать чушь.
+Artem Kuchin до конца видео смотрели ? Все показывало правильно.Но никто вам не мешает передать массив uint32_t в функцию без преобразования.У меня так)
+ElectroHobby (BARYS ILKAVETS) До конц, конечно. Вижу что вроде работает. Но допускаю, что это совпадение. Бывало такое много раз, что работает, но не должно. Ну например, буфер оверфлоу имеет место быть, но никуда в страшное место не попали данные и потом процедуры вывода опять нужный тип ожидает. Но тут отладчик, так что скорее совпадание. Интересно было бы объявить массив uint16 на 6 элементов и посмотреть что происходит с элементами 3-5. Ну и разумеется, никто не мешает сделать все правильно :) Посмотрел другие туториалы, там массив 32бита. Зачем он такой, если порты 16 битные, АЦП 12битный - хрен знает. А вообще, конечно, спасибо. Мигрирую с AVR на STM32.
+Artem Kuchin мне больше SPL по душе).
Не будет писать за пределы массива.
В кубе настроили передачу 16 бит на канал.
ДМА 3 раза положит эти 16 бит по указателю на ADC_value подряд (16+16+16).
Для эстетически красивого кода надо в кубе настроить передачу 32 бит (раз уж функция так хочет получить указатель на 32 битную переменную) вместо 16 бит (поставить word вместо half word), объявить массив из 32 битных величин, и передать без преобразования типов указатель на первый элемент массива.
Спасибо за видео! Просто супер. А как делать непрерывное преобразование, что бы в отладке постоянно кнопки не дёргать, а что бы всё непрерывно считывалось. Я пытался делать, но у меня теперь на все ноги мусор приходит. Хотелось бы знать как это сделать по науке.
+Никита Мальцев все просто не используй отладчик KEIL, а закидывай нужные перемеренные в STMStudio там наглядно можно график можно в виде таблицы.
+Борис Ильковец (BARYS ILKAVETS) Ну эта же штука не должна от среды разработки зависеть..
Зайди ко мене в ВК.Напиши подробно,что тебе нужно сделать.Я постараюсь помочь.
Спасибо огромное тебе !
....надеюсь :)
Тут то все понятно, а вот самое сложное за кадром осталось. Забирать то как ?!
3ий день ебусь с эти ADC+DMA. Уже научным таком начал все калбаки из hal_adc тыкать
И никак :( случайным образом данные хватаються то с 1ого то со 2ого канала ацп.
Хотя вроде и стопорю dma, и прерывания торможу, сгружаю поочередно в буфера, а не :(
Уууй уже чердак свистит. Гору примеров EVAL-овских перебрал, даже старые на кривом SPL
и как сговорились все - 1 ацп на проект.
С 1им как раз то проблем нет !
HAL_ADC_Start_DMA(хуемаё (uint32_t*) VALUE ) и все Oк
Надеюсь дальше покажешь ! :)
ps : радует что люди по чуть цивилизации приобщаются, я имею ввиду HAL
Зачет ! пойду смотреть твой плейлист дальше.
Спасибо !
+ali ali00ff
uint16_t ADC_1 = ADC_value[0];
uint16_t ADC_2 = ADC_value[1];
uint16_t ADC_3 = ADC_value[2];
Так чтоли не работает?
Как называются такие коннекторы?
Не знаю (
Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло...
При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?!
Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра
с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра!
И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах.
(это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )
Привет.
Так в видео вроде как раз и используется ДМА. Ложатся показания с АЦП в массив.В основном цикле программы ничего нет?HAL_ADC_GetValue(&hadc1) не используется в данном видео?