Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
motot
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
#1

синхронизация таймеров - ARM, Cortex, STM32 микроконтроллер

12.06.2016, 13:27. Просмотров 3830. Ответов 10
Метки нет (Все метки)

Нужно оцифровывать данные привязанные ко времени. От RTC не получить нужного мне прерывания, решил взять еще один таймер, т.е. RTC отсчитывает секунды, а TIM6 "внутри секунды". По прерываниям от т6 забираю данные. Собственно хоть вопрос и кажется простым, но так и не придумал как синхронизировать RTC и T6.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2016, 13:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос синхронизация таймеров (ARM, Cortex, STM32 микроконтроллер):

Синхронизация таймеров
Доброго времени суток. Мне необходимо синхронно запустить два таймера которые...

STM32F103, синхронизация таймеров
Итак, задачка из соседней темы. В тему приглашаются гуру RM, помню что dosykus...

Программная синхронизация двух таймеров
Привет. Не нашел как можно синхронизировать два таймера программно. Чтоб...

Работа таймеров в STM8S
Всем привет. Столкнулся с такой проблемой. Задача - затактировать таймер от...

RM0008 описание таймеров
Не могу понять структуру таймеров. В описании указано, что для каждого таймера...

Распиновка таймеров STM32
Здравствуйте! Подскажите, пожалуйста, с решением проблемы. Мне необходимо 5...

10
Pyko4u56
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 287
12.06.2016, 14:28 #2
А если помучиться с нестандартным делителем RTC? Или вообще взять для отсчёта секунд другой таймер...
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,114
12.06.2016, 14:58 #3
Если используется HSE, то завести HSE на RTC, тогда частоты таймеров и RTC будут строго синхронны (при выборе соответствующего пре-делителя), но сдвинуты по фазе.
Для Т6 - при запуске его работы раз в секунду, то, с точки зрения RTC, его прерывание будет вызываться строго раз в секунду, но в неизвестный момент (начало-середина-конец секунды). Впрочем, фаза тоже будет строго фиксирована.
Теоретически, фазу можно подровнять, если запустить RTC по прерыванию от Т6 - тогда прерывание Т6 будет приходиться на конец секунды.
0
motot
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
12.06.2016, 15:22 #4
Цитата Сообщение от Pyko4u56
А если помучиться с нестандартным делителем RTC? Или вообще взять для отсчёта секунд другой таймер...
Цитата Сообщение от u37
Если используется HSE...
мне нужна частота оцифровки 2.2кГц камень stm32l151, не помню название апнота про RTC, но из него понял что столько не выжать. RTC идут от LSE ибо мне нужен stomdby, поэтому вариант hse вообще не катит. Пробовал считать секунды внутри T6, но другие прерывания сбивают секунды за сутки больше чем на полчаса, еще +/- пара минут не страшно, но тут выходит существенно больше.
0
div
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
12.06.2016, 15:36 #5
Что значит синхронизировать? Вариант: по прерыванию RTC запускаем TIM6, он 2200 раз отрабатывает и сам себя останавливает.
0
Ymmortot_Buko
0 / 0 / 0
Регистрация: 03.03.2014
Сообщений: 24
13.06.2016, 12:46 #6
мда...
настроить прескейлер таймера (6го, например) и включить запуск АЦП по триггеру без прерывания.
0
motot
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
13.06.2016, 14:16 #7
Цитата Сообщение от Ymmortot_Buko
мда...
настроить прескейлер таймера (6го, например) и включить запуск АЦП по триггеру без прерывания.
вариант не катит, каналов много и забираю их с разной частотой, просто внутри одного прерывания
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,114
13.06.2016, 14:43 #8
В L151 на ADC есть "очередь" (через список и disc. режим), есть персональная DMA и есть толкающий таймер. Всё можно реализовать аппаратно, с забиранием данных по прерыванию DMA (конец буфера) с периодом единиц раз в секунду.
0
motot
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
14.06.2016, 16:57 #9
Цитата Сообщение от u37
В L151 на ADC есть "очередь" (через список и disc. режим), есть персональная DMA и есть толкающий таймер. Всё можно реализовать аппаратно, с забиранием данных по прерыванию DMA (конец буфера) с периодом единиц раз в секунду.
А можно поподробнее, может я чего то не вкуриваю? У меня есть несколько каналов которые по сути делятся на 1 - 2.2кГц, 2 - 1кГц, 3 - 100Гц. АЦП всего один, поэтому данные могу забирать только с одной какой то частотой, пробовал забирать все данные разом на частоте 2.2кГц, а в конце секунды разгребать, вариант не понравился слишком много оперативы требуется, слишком долго разгребать. По тактам вышло что проще оцифровывать всегда все каналы на максимальной скорости, и через дма складывать в маленький буфер, потом в прерывании смотреть какие данные нужно забирать, а какие нет. Мне не нравится этот способ, но ничего другого не придумал, может есть другой вариант? Проблема теперь забирать эти данные с привязкой ко времени, единственный вариант это как предложил div, просто хотел уточнить нет ли у стмки каких нить фич, чтобы один таймер толкал другой без прерывания?
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,114
14.06.2016, 17:14 #10
У F1 на ADC можно составить не перечень, а список каналов, 16 штук.
Например, А надо оцифровывать 2.2к, Б - 1.1к, а В - 100гц, то список составляется следующим образом:
А-Б-А-В-А-Б-А-В-А-Б-А-В-А-Б-А-В
Оцифровку надо запускать с частотой 4.4к, режим оцифровки discontinuous (по одной за раз). Т.е. длина последовательности 16 отсчетов (32 байта), скорость использования 8.8к/сек. Сколько памяти отведете, так часто и придется обрабатывать. При этом каждый второй отсчет = А, каждый четвертый = Б. На "В" приходится тоже "каждый четвертый", но совершенно не обязательно вычитывать их все.
Потери только на избыточность канала В, но они не так уж и велики (1/8).
Как легкий мод - disc. можно кастроить с n=2, тогда пинание ADC надо делать не с частотой 4.4к, а с 2.2к. Разницы нет никакой, но - как удобнее.

Один таймер может пинать другой без вмешательства программы. Смотрите режимы mostir/slave и источники event в описании таймеров.
0
motot
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
14.06.2016, 18:13 #11
ведь так и знал, что можно сделать проще, u37 вы волшебник, Спасибо.
0
14.06.2016, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 18:13
Привет! Вот еще темы с решениями:

Необъяснимое поведение таймеров
Имеем TYM1 и TIM2. DMA работающий с TYM1 должен слать данные со скоростью не...

STM32F103 Параллельное соединение таймеров
Господа, подскажите. Хотел параллельно соединить таймеры: TIM2 - ведущий, TIM3...

Сброс нескольких таймеров одним сигналом
Доброго всем времени суток! Изучаю таймеры, возникла следующий вопрос: Дино:...

в STM32 у разных таймеров разные источники тактирования?
К примеру у TYM1 если ставишь коэфф. деления 180 - получаешь 200кГц. Прескалер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru