|
Модераторы: PILOT, ManiaK, Mazzi |
|
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Простите, если тема уже поднималась. Очень требуется решить вопрос.
Инициализирую LCD, в даташите оговорено, поставьте тут задержку 37 микросекунд, там 20 милисекунд и ещё вот тут 200 микросекунд. Реализацию задержки на милисекунды нашёл на систике.
Всё работает. Задерживает точно. А вот задержка на микросекунды - там мнения расходятся. Кто-то говорит сделать на таймере, кто-то ещё на чём-то. Но неужели нет какого-нибудь очень простого и надёжного способа? Конечно если речь идёт о точности, то таймер скорее всего единственное решение. А если этот таймер, последний понадобится для другого? У меня мысль возникла, может сделать в цикле for, только вот как узнать сколько времени занимает 1 итерация цикла, что бы точно выставить число, до которого считать |
|||
|
||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
все данные в даташите на проц.... а если время вывода не критично , все микросекунды замени задержкой в 1 мс
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
baldman88 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 210 Регистрация: 18.1.2009 Репутация: 1 Всего: 7 |
Все зависит от используемого контроллера. Точнее от его частоты. Организация задержек с микросекундной длительностью с помощью SysTick возможна на контроллерах с частотой от 72 МГц. Все дело в том, что в таком случае используются прерывания. А на вход в прерывание нужно 14 тактов. Плюс декремент счетчика и выход из прерывания. В общем получаем около 20 тактов. Если контроллер работает на 24 МГц, то из 24 тактов в микросекунду, около 20 (возможно даже больше 24) будут уходить на обработку прерывания SysTick. А когда работать остальному коду? На 48 МГц на обработку прерывания будет уходить половина процессорного времени. А вот на 72 МГц уже можно себе это позволить.
Но перед тем, как делать микросекундные задержки нужно настроить SysTick. Я, обычно, делаю так:
Это сообщение отредактировал(а) baldman88 - 24.6.2016, 08:11 |
|||
|
||||
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
У меня 24 мГц ((. Придётся делать 1 милисекундную задержку(
|
|||
|
||||
baldman88 |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 210 Регистрация: 18.1.2009 Репутация: 1 Всего: 7 |
Если не нужна супер точность, то можно сделать проще. Каждая итерация (инкремент или декремент) цикла while занимает 4 такта. Поэтому можно сделать так (для 24 МГц -- 1 микросекунда = 24 такта, а так как итерация занимает 4 такта, то значение задержки нужно умножато на 6):
Учитывая что еще будут затрачиваться такты на вход и выход из функции (около 10-ти тактов), а так же на расчет переменной counter, задержка будет, примерно, на пол микросекунды больше. Хотя можно это учесть отняв эти расходы от counter. Возьмем в сумме 12 тактов накладных расходов, тогда нужно будет отнять 3 (12 / 4 = 3). Получится как-то так:
Сам не пробовал, но, по идее, должно получиться. Это сообщение отредактировал(а) baldman88 - 24.6.2016, 22:11 |
||||
|
|||||
Курсант |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Здравствуйте!
Обычно я для таких целей использую метки времени и измерение временных интервалов между метками времени. Сейчас я использую 64-разрядные метки времени, которые не переполняются более 100 лет Если все временные интервалы будут небольшими, можно использовать и 32-разрядные метки времени. Нужно запустить таймер. Ещё нужна функция получения метки времени:
После этого необходимы функции определения временных интервалов.
Теперь отсчёт требуемого интервала будет выглядеть так:
Т.е. где-то у себя в коде можно записать так:
ИМХО. Пишу по памяти, без контрольной компиляции и на ходу улучшая когда-то работавший код. Ногами не пинайте если что. Это сообщение отредактировал(а) Курсант - 19.7.2016, 14:17 |
||||||||
|
|||||||||
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Спасибо! Это очень интересный вариант.
|
|||
|
||||
Crystaly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Эти микросекунды, которые вы указываете, скорее всего МИНИМАЛЬНЫЕ значения задержек. Реально можно больше. Программно делать такие задержки (имхо) бред. (но не все делается программно, есть еще направление аппаратных разработок ПЛИС и т.п. вот там это важно соблюдать) Это сообщение отредактировал(а) Crystaly - 18.5.2018, 09:57 |
|||
|
||||
Queenswu666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.9.2020 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |