![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
Здравствуйте.
Делаю таймр под avr tiny 13 Подскажите как сделать функцию(подпрограмму) которая будет просто ожидать указанное время минут и секунд. Как работать с таймерами? Читал много мануала, но до конца всё равно не понял как допустим просто сделать паузу в 1 секунду. Заранее благодарен. --------------------
воин dzen'a |
|||
|
||||
| Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Я конечно не претендую на правильность, но у меня тупая задержка времени стоит... Я поставил три вложенных счетчика...
точно в асме не помню как, но примерно так:
смысл такой, что пройдет целая куча тактов, прежде чем программа доберется до метки "4". Но это конечно жуткий быдлокод, а вот чтобы программировать в реальном времени - это наверное сложнее, может какой watchdog применить или считать такты - тут не знаю... Сам пока не дошел... |
|||
|
||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
да такого рода я делал, но высоая погрешность....
копаю в сторону TCCNT...как я поняял это банальный счётчик команд.. но как с ним совладать я не знаю...... Если кто в курсе отзавитесь) Заранее благодарен. --------------------
воин dzen'a |
|||
|
||||
| Mazzi |
|
|||
|
Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Используй библиотечную функцию delay для требуемой задержки.
-------------------- Мне нужны помощники. |
|||
|
||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
А где эту функцию взять?
--------------------
воин dzen'a |
|||
|
||||
| UniBomb |
|
||||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
hawk3500, где, где... Вот ты не указал, чем ты пользуешся (avr-gcc, iar, icc, avrstudio), и Mazzi решил промолчать
Ну а вообще для задержек (если действительно нужно задержка без выполнения других действий) можно использовать "бесполезный" цикл. В простейшем случае он выглядит так:
Данный код не делает ничего полезного, но при этом он занимает систему на определённое время. Была даже выведенная формула, по которой можно было определить на сколько тактов он займёт систему, но за давностью лет я её не помню Если максимально-возможная задержка окажется недостаточной (из-за ограничения на аргумент в 255), то можно использовать аналогичные вложенные циклы:
С учётом вложенности циклов формула расчёта итоговой задержки будет немного отличаться от предыдущей. В качестве домашнего задания предлагаю вывести формулу для этого "двойного" цикла самостоятельно. Ну и далее по наитию - этот цикл можно наворачивать до тех пор, пока регистры общего назначения не кончатся. Но и при этом следует помнить, что полученная задержка будет измеряться тактами. Что бы сделать задержку по времени нужно время перевести в количество тактов, и это количество тактов передать в качестве аргумента в эти подпрограммы f(cpu) - это частота, на которой работает мк. Иными словами за одну секунду мк выполнит f тактов. А нам нужно t секунд. Тогда количество тактов будет равно t(сек)*f(такт/сек). Только не забудь время задержки перевести в секунды Это сообщение отредактировал(а) UniBomb - 25.4.2011, 08:27 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
3 варианта:
|
|||
|
||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
я делаю вот так. Пишу в avr studio. Хотелось бы сделать так как вы гоорите: " Настроить прерывание от его (таймера) переполнения и в обработчике прерывания увеличивать (или уменьшать) счетчик." Но как это сделать я не знаю. Подскажите пожалуйста. Это сообщение отредактировал(а) hawk3500 - 26.4.2011, 14:59 --------------------
воин dzen'a |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
||||
|
||||
| UniBomb |
|
||||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
И всё равно мне не понятен сакральный смысл применения в этом случае таймера. Ведь программа (как я понял) всё равно ничего не будет делать, пока таймер не отсигнализирует о прошествии необходимого времени. Ведь лезвие достопочтенного Уильяма Оккамы не зря гласит "не следует плодить сущности без крайней на то необходимости". Таймер он ведь может понадобится в другом месте. Ну да ладно.
hawk3500, во-первых на какой частоте работает твой мк? Именно от этой частоты нужно плясать при настройке таймера. Настрой его на период срабатывания в 1 миллисекунду. Без знания частоты и без даташита (не использую я тиньки
Далее - заводишь ещё одну переменную под миллисекунды (.def msec=r17) и в обработчике прерывания от таймера пишешь нечто подобное:
Хотя обработчик наверное можно и более красиво написать, но у меня давно не было практики в ассемблере Это сообщение отредактировал(а) UniBomb - 27.4.2011, 08:56 |
||||
|
|||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
А, пока писал забыл о чём вопрос
|
|||
|
||||
| smalcom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 494 Регистрация: 16.10.2004 Где: Dnepr Репутация: 4 Всего: 7 |
>>но до конца всё равно не понял как допустим просто сделать паузу в 1 секунду.
Что сложного? 1. Загрузил в таймер нужное значение 2. подождал пока не сработает прерывание по переполнению 3. PROFIT??? -------------------- What DA F...??? |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
smalcom, спасибо, капитан!
|
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |