Например TDA7294

Форум РадиоКот • Просмотр темы - Как отсчитать равный промежуток тактов на stm32f1
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 02:18:23

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 00:26:56 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
Суть вопроса заключается в следующем. Мне нужно, чтобы, например, после прерывания А, прерывание Б происходило ровно, скажем, через 600 тактов. Вопрос решается, скажете вы, довольно просто, запусти таймер на 600 тактов, который вызывает прерывание. Ан нет, давно уже мучаюсь с этим, но ничего не выходит. Прерывание происходит не ровно через 600 тактов, а через 601-602 и т.д. в зависимости от фоновых действий.

То есть я запускаю таймер 1 с прерыванием. Он его генерит. В прерывании запускается таймер 2 на 600 тактов. Я что-то делаю в первом прерывании и выхожу из него. Срабатывает второе... но проходит не ровно 600 тактов! И как решить эту задачу я уже голову сломал. Да, счётчик таймера я сбрасываю.

Пробовал делать всё в одном прерывании, просто запомнить значение другого таймера в начале прерывания. Сделать какие-то дела в прерывании. И дождаться нужного значения в эти 600 тактов просто в вайле, но не тут то было! Арм и тут меня подловил и судя по всему иногда происходит, а иногда не происходит лишняя инструкция сравнения, но стабильности нет.

Пока единственный способ решения задачи, который я нашёл - просто ждать в for опрелённое количество цыклов в одном прерывании до события Б. Тогда выходит, что всегда отсчитывается нужное значение от начала прерывания А до события Б. Но! Это же такая бессмысленная трата ресурсов, которые мне очень нужны. Прошу помощи в решении этой нелёгкой задачи.

Единственное решение, которое я сейчас предполагаю - как-то отправить камень в сон и ждать прерывания от второго таймера после действий в событии А. Тогда, предположительно, он всегда будет одинаково выходить из сна и я буду получать свои фиксированные 600 тактов, но как это сделать я так и не понял. Ну или как-то ждать в самом прерывании значения таймера без вайла, какой-то скрытой командой, о которой я ничего не знаю.

Хочу сделать ремарку, что 600 тактов число навсидку. Мне просто нужно всегда чтобы событие Б происходило через фиксированное количество тактов от события А.

_________________
Собираю самопальный мини-компьютер


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 01:34:17 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 12
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 200
Рейтинг сообщения: 0
Виновата флешпамять.
Доступ к данным не мгновенный и зависит от латентности (FLASH->ACR). Вариант - выполнять программу из памяти.

_________________
sRtoS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 02:33:18 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
после прерывания А, прерывание Б происходило ровно, скажем, через 600 тактов.

надежно - никак.
Единственное решение, которое я сейчас предполагаю - как-то отправить камень в сон и ждать прерывания от второго таймера после действий в событии А. Тогда, предположительно, он всегда будет одинаково выходить из сна

с режимами сна я особо не ковырялся, но емнип первое, что делает контроллер по пробуждении - дожидается стабилизации частоты тактового генератора. Это время не фиксировано.
Мне просто нужно всегда чтобы событие Б происходило через фиксированное количество тактов от события А.

а зачем, если не секрет?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 03:49:14 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
Виновата флешпамять.
Доступ к данным не мгновенный и зависит от латентности (FLASH->ACR). Вариант - выполнять программу из памяти.


Nope, попробовал через конфиг кейла закидывать функции в рам - не помогло.

Цитата:
с режимами сна я особо не ковырялся, но емнип первое, что делает контроллер по пробуждении - дожидается стабилизации частоты тактового генератора. Это время не фиксировано.


Ну я предполагал, что есть режим сна, в котором тактирование не отключается. Впрочем, он так глубоко уходит в сон по WFI, что до него даже программатор достучаться не может.

Цитата:
надежно - никак.


Печалька. Но, отвечая на ваш последний вопрос - вывод на vga. Я давно с ним воюю. Но в итоге победил, не знаю как, но мне удалось методом проб и ошибок добиться того, чтобы более менее фиксированный был промежуток между синхроимпульсом в первом прерывании и началом отрисовки во втором. Остаётся только дивиться, как люди умудряются на восьмибитках его (vga) поднимать.

Ответ на свой вопрос я получил, спасибо. (никак)

_________________
Собираю самопальный мини-компьютер


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 07:42:09 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
вывод на vga

может поглядеть как тут сделано:
http://bitboxconsole.blogspot.com/p/blog-page.html


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 14:21:44 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
вывод на vga

может поглядеть как тут сделано:
http://bitboxconsole.blogspot.com/p/blog-page.html


В stm32f4 многое по другому и проще. Речь идёт именно о серии stm32f1.

_________________
Собираю самопальный мини-компьютер


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:11:23 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Тогда забудьте про подсчеты тактов а'ля авр , и читайте здесь https://www.artekit.eu/vga-output-using-a-36-pin-stm32/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:23:46 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Цитата:
В прерывании запускается таймер 2 на 600 тактов. Я что-то делаю в первом прерывании и выхожу из него. Срабатывает второе... но проходит не ровно 600 тактов!


Ошибка в самом построении задачи.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:31:53 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
Тогда забудьте про подсчеты тактов а'ля авр , и читайте здесь https://www.artekit.eu/vga-output-using-a-36-pin-stm32/

Я читал. Там одноцветная картинка через SPI. Идея понятна, но не подходит, я хочу цвет.

Цитата:
Ошибка в самом построении задачи.

Не очень понял, в чём ошибка.

_________________
Собираю самопальный мини-компьютер


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:35:59 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
Black_lizard, у меня все работает, не важно из флеша выполнять или RAM. Пишу в CCR1 600, в прерывании сохраняю в массив текущее значение счетчика, CCR1 увеличиваю на 600, когда массив заполняется сверяю разницу между соседними значениями массива и она всегда равна 600.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:37:21 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Цитата:
Не очень понял, в чём ошибка.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:39:16 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
Black_lizard, у меня все работает, не важно из флеша выполнять или RAM. Пишу в CCR1 600, в прерывании сохраняю в массив текущее значение счетчика, CCR1 увеличиваю на 600, когда массив заполняется сверяю разницу между соседними значениями массива и она всегда равна 600.


Хм. Возможно тогда это где-то всё-таки моя ошибка была. Спасибо.

Цитата:
Ошибка в использовании прерывания для запуска кода, особенно если нужен точный тайминг.


Ну если он успевает выполниться до следующего прерывания, то в чём проблема?

_________________
Собираю самопальный мини-компьютер


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 15:41:37 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Цитата:
Ну если он успевает выполниться до следующего прерывания, то в чём проблема?

В чем проблема вы вроде сами выше написали. Надеюсь, вы в курсе, что пока код выполняется, вы сидите в прерывании?

Собственно, Reflector предложил одно из возможных ее решений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 16:16:52 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Речь идёт именно о серии stm32f1

с F1 мало дела имел, но таймер там вроде умеет запускать другой таймер, DMA вроде тоже есть - разве нельзя на F1 так типа сделать:
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 18:12:37 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
Цитата:
Ну если он успевает выполниться до следующего прерывания, то в чём проблема?

В чем проблема вы вроде сами выше написали. Надеюсь, вы в курсе, что пока код выполняется, вы сидите в прерывании?

Собственно, Reflector предложил одно из возможных ее решений.


Конечно, в курсе. И что прерывание не сработает до тех пор, пока мы сидим в прерывании с большим приоритетом. Тем не менее ранее я всех поблагодарил за помощь и написал, что решением проблемы нашлось. И, видимо, это была моя ошибка. Во всяком случае стабильности я добился.

oleg110592, с DMA я делал изначально и всё бы хорошо, но на его работу воздействует фоновая программа. То есть DMA нормально работает только если на фоне крутится цыкл while(1);. Начинаешь делать вычисления - и начинаются проблемы. На V-Sync вообще не нужен отдельный таймер, достаточно считать строки в прерываниях на H-sync. По статьям я понял, что эта проблема с DMA решается тем, что в мк несколько независимых блоков SRAM памяти и можно выводить данные с блока, который не будет затронут. МБ я ошибаюсь, но нормальную цветную картинку я пока видел только на F4 )

_________________
Собираю самопальный мини-компьютер


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 18:31:20 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Кстати, в проекте по линку от dosikus столкнулись с похожей на вашу проблемой:

Цитата:
One curious fact was that we had to move the interrupt handlers to a fixed position at the end of the flash because adding code before those functions (in terms of position in flash) made the SPI to start sooner or later, depending on the added code. I believe in some flash fetching delay depending on the function location.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как отсчитать равный промежуток тактов на stm32f1
СообщениеДобавлено: Пт окт 13, 2017 20:03:34 
Мучитель микросхем

Карма: 11
Рейтинг сообщений: 35
Зарегистрирован: Ср окт 15, 2008 09:33:03
Сообщений: 475
Откуда: Воронеж
Рейтинг сообщения: 0
Примерно похожую задачу решали здесь http://we.easyelectronics.ru/STM8/progr ... ast-2.html. Там нужно было начать выполнять код через фиксированное время после первого фронта USB пакета. Где то было продолжение уже для m0.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y