| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Вопрос с delay
18.03.2010, 23:30
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Вопрос с delay
дорогие друзья!
Наверно программируя микроконтроллеры часто используете функцию
задержки "delay"
Вродебы какие тут проблемы но увы оказывается и тут есть вопросительные знаки
Вобщем формируя разные задержки использую функцию
delay_ms(a); где а объявлена как переменная int a;
в программе меняется а и соотвественно безпроблем меняется и величина задержки в миллисекундах.
Стоит мне вместо миллисекунды "ms" ,указать микросекунды
delay_us(a); как
компилятор указывает на ошибку типа :
"must be constant expression" Все попытки выити из положения напрасны.
Вроде все тоже самое, просто перешол в микросекунды ,что могло произайти не понятно.
надеюсь и на этот раз протяните руку помощи, ведь благодаря этому отличнейшему форуму ,с участие мастеров своего дело, я смог преодолеть не мало для меня проблем.
заранее благодарен.
|
|
|
|
19.03.2010, 00:12
|
|
|
Гражданин KAZUS.RUN
Регистрация: 21.08.2006
Адрес: РА г.Майкоп
Сообщений: 864
Сказал спасибо: 32
Сказали Спасибо 221 раз(а) в 122 сообщении(ях)
|
Re: вопрос с delay
Поподробней....У меня на CV 1.25.8 нормально формирует задержки, в смысле не ругается. Может с такт маленький?
|
|
|
|
19.03.2010, 00:26
|
|
|
Прохожий
Регистрация: 25.02.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: вопрос с delay
Цитата из help CvAVR 2.04:
The functions are:
void delay_us(unsigned int n) generates a delay of n mseconds. n must be a constant expression
delay_us требует переменную объявленную как const а значит гибко менять ее в течении выполнения программы не получиться
Выходы:
- реализовывать задержку пустыми циклами
- подумать о использовании таймеров
- использовать старый компилятор - CV 1.25.8 (пост выше)
|
|
|
|
19.03.2010, 00:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
|
Re: вопрос с delay
микро секндные интервалы соизмеримы с тактовой частотой контроллера, поэтому в некоторых случаях они формируются компилятором как набор пустых комманд, и если к примеру Вы захотите сделать переменную задержку в диапазоне 1-200 мкС у крнтроллера с достаточно низкой тактовой, то может получится так, что компилятор на сможет дать универсальный набор комманд. Вероятнее всего так и получается в Вашем случае.
|
|
|
|
19.03.2010, 00:33
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: вопрос с delay
Вообще говоря, это плохая команда. Если параллельно использовать прерывания, а без них жизнь не возможна, то цикл delay может вытянуться. Лучше использовать таймер.
Не знаю, какой компилятор вы используете, но в MikroE есть команда vdelay_ms и vdelay_us для паузы переменной длительности.
|
|
|
|
19.03.2010, 00:59
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Re: вопрос с delay
друзья1
Я глубоко тронут вашим вниманием. Большое спасибо за оперативный отзыв. Столько дельных советов ,что сразу все переварить трудно.
Использую cvavr 1.25.9.
задержка меняется в пределах (1-10)ms,шагом 1ms, но нужен шаг 0,5ms,
поэтому перешел на микросекунды, ибо не знаю как сделать дробный шаг и вобще возможно ли это? Использую Atmega 8 кварц 4 Мгц.все происходит в прерывании по INT1.
Если не трудно ,поделитесь пожалуйсто вопросом по поводу дробного шага ,возможно ли его применение?
Спасибо.
|
|
|
|
19.03.2010, 07:14
|
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 339
Сказал спасибо: 2
Сказали Спасибо 34 раз(а) в 30 сообщении(ях)
|
Re: вопрос с delay
Сообщение от begun
|
|
все происходит в прерывании по INT1.
|
Вы в прерывании используете delay???
Если так, то категорически советую изменить Ваш стиль программирования!
delay в прерываниях недопустимы!
Сообщение от begun
|
|
... по поводу дробного шага ,возможно ли его применение?
|
Если надо сделать например 1.5мс, то делаете 2 задержки, на 1мс и на 500мкс.
Других вариантов, используя стандартную функцию delay в CVAVR нет.
Последний раз редактировалось mrKirill; 19.03.2010 в 07:18.
|
|
|
|
19.03.2010, 08:49
|
|
|
Гражданин KAZUS.RUN
Регистрация: 24.06.2005
Сообщений: 530
Сказал спасибо: 262
Сказали Спасибо 216 раз(а) в 118 сообщении(ях)
|
Re: вопрос с delay
Насколько я помню, в CodeVision переменную (менять значение) можно использовать при ms, но не в us. При мкс - только константа.
Последний раз редактировалось delay; 19.03.2010 в 08:54.
|
|
|
|
19.03.2010, 08:57
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: вопрос с delay
Сообщение от begun
|
|
задержка меняется в пределах (1-10)ms,шагом 1ms, но нужен шаг 0,5ms
|
Ну так укажите в свойствах проекта что частота кварца 2 МГц, установите в программе задержку 1 мс, потом подключите кварц 4 МГц - и в реале будет задержка 0,5 мс...
|
|
|
|
19.03.2010, 10:12
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Re: вопрос с delay
друзья !
Спосибо за ценейшие для меня советы!
niXto
Нетерпится попробовать Ваше предложение на счет 2 мгц
Wustrik
Я кже пробовал пусрой цикл Вроде есть надежда.
Попробую и старую версию cvavr
Яmrkirill
если не трудно хоть чуточку поясните пожалуйсто причину категорического запрета использования delay в прерываниях .Это я слышу впервы и хочется удостоверится глубже.
друзья !
проработаю все предложения и представлю "отчет".
Большое спасибо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:21.
|
|