FreeRTOS ADC

Уборка сахарного тростника. Сезонная. Пайка кастрюль. Сдельная. Предложения работы.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

Всем привет.

Нужна помощь в написании таски во FreeRTOS для STM32F103C8T6, измеряющей напряжения. Подробнее - в ЛС.
Реклама
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Сообщение pixar »

Пример из SPL 103 непрерывная работа с DMA.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Так а что там писать то? Создали задачу, в её цикле пишите софтовый запуск АЦП с выбранного канала (каналов) и ожидаете флага завершения преобразования. Получив флаг, читаете регистр данных и пересчитываете значение в напряжение. Затем останавливаете задачу на некоторое число тиков систаймера.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

[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);
	}
}
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

Нужна помощь в написании таски, измеряющей напряжения. То есть несколько каналов одного АЦП. Один канал я и сам измеряю, а вот несколько - не получается.

Вот само задание (если совсем в идеале), в нем же ссылка на проект в кубе и кейле. Хотелось бы хотя бы измерять несколько каналов АЦП.
https://docs.google.com/document/d/1pGB ... sp=sharing
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Мы, обычно, если чето не получалось, мы читали мануалы. Там, в принципе, по тому же принципу, только внести в список каналов нужные, и они друг за другом будут запускаться каждый раз, когда устанавливается бит запуска.
Ну ладно, а сколько вы готовы оплатить за сию поделию? А то в первом мессаге нужно было только одну эту таску написать (я написал!), а тут уже выясняется, что надо целый прожэкт под ключ, да еще и с объяснениями что куда. Курсовик чтоль? Ээээ блин, чувак, щас надо страну возрождать из руин, а вы...
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

Уважаемый, ты лишний раз доказываешь тезис о том, что на зарубежном форуме на заданный вопрос человеку получает ответ, а на российском форуме человеку объясняют, что он не прав.

Нет, это не курсач, да и я давно вышел из студенческого возраста - я разбираюсь для себя.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Вот и задайте на зарубежном форуме вопрос :) Подобные вопросы на русских форумах просто не возникают, потому как наш народ умеет самостоятельно решать такие мелочи. Ну и коль вопрос задан в разделе "Есть работа", то такая работа подразумевает оплату. В противном случае - задавать надо в общем разделе.
Хотя, я тут уже всё рассказал - просто внесите в список каналов все необходимые каналы и запускайте преобразование программно, ожидая его завершения. Все каналы будут поочередно измеряться, по этому списку.

ЗЫ. Про зарубежные форумы. Хех, вышеприведенная байка - всего лишь байка, почти не имеющая оснований. У них, у басурман, зачастую под напускной вежливостью скрывается простое незнание того, о чем спрашивают, либо неумение читать между строк и просьба конкретно описывать от и до. В этом случае ихний ответ выглядит так: "Боюсь, мы не понимаем, какая проблема у вас возникла. Опишите более подробно." Как-то давно на одном ихнем вебинаре как раз по FreeRTOS я отнефик делать задал дежурный вопрос (ответ на который знал и сам), просто для поддержания беседы и якобы заинтересованности. И минут 15 пытался объяснить им че я хочу услышать, а в ответ был такой вот тупняк "Боюсь, мы не понимаем, с какой проблемой вы столкнулись". При том, что мой английский был вполне нормальный, я даже на всякий случай перепроверял через переводчик.
Последний раз редактировалось НовыйДень Вс апр 10, 2022 13:02:34, всего редактировалось 2 раза.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

То есть без прерываний и без DMA?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Ну да. А че такого то. Это же RTOS, тут вообще пофик. Ну, почти пофик. Большой разницы в данном прожэекте вообще не будет, через DMA делать или программно поочереди.
А коль всенепременно хотите через DMA, тогда перед запуском цикла преобразований в начале цикла задачи вносите в список АЦП каналов нужные каналы, настраиваете число преобразований. Настраиваете и запускаете канал DMA, указав то же самое число замеров, и включаете прерывания по завершению передач DMA. Однократно запускаете преобразование и ожидаете семафора (а лучше приема уведомления Task Notification) из прерывания по заверению передач DMA. После получения Task Notification читаете принятые через DMA данные, переводите их в вольты, закидываете их в очередь для дисплея. И отправляете задачу в ожидание на некоторое время, чтобы получить некоторые интервалы замеров, например 10 раз в секунду.
Пишите обработчик прерываний DMA, в котором по завершении транзакций DMA выставляете семафор (а лучше даете Task Notification).
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

Неактуально
Ответить

Вернуться в «Есть работа»