Нужна помощь в написании таски во FreeRTOS для STM32F103C8T6, измеряющей напряжения. Подробнее - в ЛС.
FreeRTOS ADC
Всем привет.
Нужна помощь в написании таски во FreeRTOS для STM32F103C8T6, измеряющей напряжения. Подробнее - в ЛС.
Нужна помощь в написании таски во FreeRTOS для STM32F103C8T6, измеряющей напряжения. Подробнее - в ЛС.
- Реклама
- Сообщения: 314
- Зарегистрирован: Чт ноя 29, 2012 08:27:22
- Сообщения: 362
- Зарегистрирован: Вс апр 03, 2022 07:01:29
Так а что там писать то? Создали задачу, в её цикле пишите софтовый запуск АЦП с выбранного канала (каналов) и ожидаете флага завершения преобразования. Получив флаг, читаете регистр данных и пересчитываете значение в напряжение. Затем останавливаете задачу на некоторое число тиков систаймера.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4211444#p4211444"]Так а что там писать то? Создали задачу, в её цикле пишите софтовый запуск АЦП с выбранного канала (каналов) и ожидаете флага завершения преобразования. Получив флаг, читаете регистр данных и пересчитываете значение в напряжение. Затем останавливаете задачу на некоторое число тиков систаймера.[/uquote]
Очень рад за Вас, если для Вас это так просто. У меня не получается, поэтому обращаюсь за помощью.
Очень рад за Вас, если для Вас это так просто. У меня не получается, поэтому обращаюсь за помощью.
- Сообщения: 362
- Зарегистрирован: Вс апр 03, 2022 07:01:29
В общем случае выглядит вот так:
Код: Выделить всё
void prvVoltage(void *pvParameters)
{
int voltage;
#define SCALE_FACTOR 10000 / 4096
for(; ;)
{
ADC1->CR2 |= ADC_CR2_ADON;
while(!(ADC1->SR & ADC_SR_EOC));
voltage = ADC1->DR * SCALE_FACTOR;
vTaskDelay(200);
}
}
- Реклама
Нужна помощь в написании таски, измеряющей напряжения. То есть несколько каналов одного АЦП. Один канал я и сам измеряю, а вот несколько - не получается.
Вот само задание (если совсем в идеале), в нем же ссылка на проект в кубе и кейле. Хотелось бы хотя бы измерять несколько каналов АЦП.
https://docs.google.com/document/d/1pGB ... sp=sharing
Вот само задание (если совсем в идеале), в нем же ссылка на проект в кубе и кейле. Хотелось бы хотя бы измерять несколько каналов АЦП.
https://docs.google.com/document/d/1pGB ... sp=sharing
- Сообщения: 362
- Зарегистрирован: Вс апр 03, 2022 07:01:29
Мы, обычно, если чето не получалось, мы читали мануалы. Там, в принципе, по тому же принципу, только внести в список каналов нужные, и они друг за другом будут запускаться каждый раз, когда устанавливается бит запуска.
Ну ладно, а сколько вы готовы оплатить за сию поделию? А то в первом мессаге нужно было только одну эту таску написать (я написал!), а тут уже выясняется, что надо целый прожэкт под ключ, да еще и с объяснениями что куда. Курсовик чтоль? Ээээ блин, чувак, щас надо страну возрождать из руин, а вы...
Ну ладно, а сколько вы готовы оплатить за сию поделию? А то в первом мессаге нужно было только одну эту таску написать (я написал!), а тут уже выясняется, что надо целый прожэкт под ключ, да еще и с объяснениями что куда. Курсовик чтоль? Ээээ блин, чувак, щас надо страну возрождать из руин, а вы...
Уважаемый, ты лишний раз доказываешь тезис о том, что на зарубежном форуме на заданный вопрос человеку получает ответ, а на российском форуме человеку объясняют, что он не прав.
Нет, это не курсач, да и я давно вышел из студенческого возраста - я разбираюсь для себя.
Нет, это не курсач, да и я давно вышел из студенческого возраста - я разбираюсь для себя.
- Сообщения: 362
- Зарегистрирован: Вс апр 03, 2022 07:01:29
Вот и задайте на зарубежном форуме вопрос
Подобные вопросы на русских форумах просто не возникают, потому как наш народ умеет самостоятельно решать такие мелочи. Ну и коль вопрос задан в разделе "Есть работа", то такая работа подразумевает оплату. В противном случае - задавать надо в общем разделе.
Хотя, я тут уже всё рассказал - просто внесите в список каналов все необходимые каналы и запускайте преобразование программно, ожидая его завершения. Все каналы будут поочередно измеряться, по этому списку.
ЗЫ. Про зарубежные форумы. Хех, вышеприведенная байка - всего лишь байка, почти не имеющая оснований. У них, у басурман, зачастую под напускной вежливостью скрывается простое незнание того, о чем спрашивают, либо неумение читать между строк и просьба конкретно описывать от и до. В этом случае ихний ответ выглядит так: "Боюсь, мы не понимаем, какая проблема у вас возникла. Опишите более подробно." Как-то давно на одном ихнем вебинаре как раз по FreeRTOS я отнефик делать задал дежурный вопрос (ответ на который знал и сам), просто для поддержания беседы и якобы заинтересованности. И минут 15 пытался объяснить им че я хочу услышать, а в ответ был такой вот тупняк "Боюсь, мы не понимаем, с какой проблемой вы столкнулись". При том, что мой английский был вполне нормальный, я даже на всякий случай перепроверял через переводчик.
Хотя, я тут уже всё рассказал - просто внесите в список каналов все необходимые каналы и запускайте преобразование программно, ожидая его завершения. Все каналы будут поочередно измеряться, по этому списку.
ЗЫ. Про зарубежные форумы. Хех, вышеприведенная байка - всего лишь байка, почти не имеющая оснований. У них, у басурман, зачастую под напускной вежливостью скрывается простое незнание того, о чем спрашивают, либо неумение читать между строк и просьба конкретно описывать от и до. В этом случае ихний ответ выглядит так: "Боюсь, мы не понимаем, какая проблема у вас возникла. Опишите более подробно." Как-то давно на одном ихнем вебинаре как раз по FreeRTOS я отнефик делать задал дежурный вопрос (ответ на который знал и сам), просто для поддержания беседы и якобы заинтересованности. И минут 15 пытался объяснить им че я хочу услышать, а в ответ был такой вот тупняк "Боюсь, мы не понимаем, с какой проблемой вы столкнулись". При том, что мой английский был вполне нормальный, я даже на всякий случай перепроверял через переводчик.
Последний раз редактировалось НовыйДень Вс апр 10, 2022 13:02:34, всего редактировалось 2 раза.
- Сообщения: 362
- Зарегистрирован: Вс апр 03, 2022 07:01:29
Ну да. А че такого то. Это же RTOS, тут вообще пофик. Ну, почти пофик. Большой разницы в данном прожэекте вообще не будет, через DMA делать или программно поочереди.
А коль всенепременно хотите через DMA, тогда перед запуском цикла преобразований в начале цикла задачи вносите в список АЦП каналов нужные каналы, настраиваете число преобразований. Настраиваете и запускаете канал DMA, указав то же самое число замеров, и включаете прерывания по завершению передач DMA. Однократно запускаете преобразование и ожидаете семафора (а лучше приема уведомления Task Notification) из прерывания по заверению передач DMA. После получения Task Notification читаете принятые через DMA данные, переводите их в вольты, закидываете их в очередь для дисплея. И отправляете задачу в ожидание на некоторое время, чтобы получить некоторые интервалы замеров, например 10 раз в секунду.
Пишите обработчик прерываний DMA, в котором по завершении транзакций DMA выставляете семафор (а лучше даете Task Notification).
А коль всенепременно хотите через DMA, тогда перед запуском цикла преобразований в начале цикла задачи вносите в список АЦП каналов нужные каналы, настраиваете число преобразований. Настраиваете и запускаете канал DMA, указав то же самое число замеров, и включаете прерывания по завершению передач DMA. Однократно запускаете преобразование и ожидаете семафора (а лучше приема уведомления Task Notification) из прерывания по заверению передач DMA. После получения Task Notification читаете принятые через DMA данные, переводите их в вольты, закидываете их в очередь для дисплея. И отправляете задачу в ожидание на некоторое время, чтобы получить некоторые интервалы замеров, например 10 раз в секунду.
Пишите обработчик прерываний DMA, в котором по завершении транзакций DMA выставляете семафор (а лучше даете Task Notification).


