| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
"delay" не позволяет варировать микросекундами
16.01.2016, 03:22
|
#11
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от индюк
|
|
за 5 минут
|
Эта пять+!
|
|
|
|
16.01.2016, 03:22
|
#12
|
|
Гражданин KAZUS.RUN
Регистрация: 26.09.2005
Сообщений: 572
Сказал спасибо: 58
Сказали Спасибо 506 раз(а) в 134 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от begun
|
cпасибо за отзыв
дело в том что delay_us (1500) работает нормально но
delay_us(x);
уже не работает в то время как...
|
Странно! А F1 на delay попробуйте. Там:
void delay_us(unsigned int n)
generates a delay of n m(icro)seconds. n must be a constant expression.
Стало быть х - только константа.
Через это многие проходили в CVAVR. Милисекунды - переменная, микро - константа. Увы!
__________________
Будь проще, дойдет и до синтеза.
Последний раз редактировалось marera; 16.01.2016 в 03:39.
|
|
|
|
16.01.2016, 03:50
|
#13
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от akegor
|
|
счаз насоветуют костылей
|
Вредная птица явный лидер. Задержка в вечных циклах... это что-то!
|
|
|
|
16.01.2016, 12:33
|
#14
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,131
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от STM32F0
|
Вредная птица явный лидер. Задержка в вечных циклах... это что-то!
|
там прерывание от таймера отнимает от паблика, перестань чушь гнать
TIM3-›PSC = 23;
TIM3-›ARR = 480;
TIM3-›CR1 = TIM_CR1_ARPE;
TIM3-›CR2 = 0;
TIM3-›CCR1 = 0;
TIM3-›CCR2 = 0;
TIM3-›CCR3 = 0;
TIM3-›CCR4 = 0;
TIM3-›SMCR = 0;
TIM3-›CCMR1 = 0;
TIM3-›CCMR2 = 0;
TIM3-›CCER = 0;
TIM3-›DIER = 0;
TIM3-›EGR = 0;
TIM3-›DIER = TIM_DIER_UIE;
NVIC_EnableIRQ(TIM3_IRQn);
void TIM3_IRQHandler ()
{
TIM3-›SR = 0;
TIM3-›EGR = 0;
TIM3-›CR1 = 0;
c5=0;
}
void delayms (int ms)
{
c5=10;
TIM3-›ARR = ms;
TIM3-›CR1 = TIM_CR1_ARPE|TIM_CR1_CEN;
while (c5)
{ }
}
__________________
кагмаподэ магмаподэ
Последний раз редактировалось индюк; 16.01.2016 в 13:21.
|
|
|
|
16.01.2016, 13:23
|
#15
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от индюк
|
|
там прерывание от таймера отнимает от паблика
|
Да неужели? Смотрим оригинал месаги.
Сообщение от индюк
|
вот они, программисты на си.
знали бы как сам проц устроен все эти полускрипты/макросы нахрен не нужны были бы.
за 5 минут сам бы уж напиал свой делей а не сопли размазывал бы по форуму
void delayms (int ms)
{
c5=10;
TIM3-›ARR = ms;
TIM3-›CR1 = TIM_CR1_ARPE|TIM_CR1_CEN;
while (c5)
{ }
}
|
Про прерывание нет ни слова!
Дальше. Это вообще офигенный изврат в натуре! Чем отличается обычный цикл от цикла с таймером и прерыванием, в данном случае? Правильно! Таймером и прерыванием, которые по недоумию приклеили скотчем, или выделениями из носа. Вопрос, накуа? У Меги много таймеров? У Меги развитые прерывания?
Даже для STM32 это офигенный изврат, там есть систик.
Так что, как там прозвучало, перестань чушь гнать!
|
|
|
|
16.01.2016, 13:33
|
#16
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,131
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от STM32F0
|
|
Про прерывание нет ни слова!
|
ну ты ж вумный - мог бы и догадаться.
а зачем мне там систик? систик один раз настроил на 10микросекунд и он тебе тикает и вообще он больше для сложных программ, для операционок ваще нужен и генерит он там не 1мкс полюбому. значит 2-3 мкс я не получу.
а тут сколько мне надо столько и поставил. хоть 2мкс хоть 25000.
__________________
кагмаподэ магмаподэ
|
|
|
|
16.01.2016, 13:35
|
#17
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от begun
|
использую футкцию delay_ms(x) c переменным параметром x , значение которого меняется в ходе программы.
...
прошу помочь разобратся в чем тут дело и как сделать в delay нецелечисленную задержку?
|
с какой точностью задержка необходима (в мкс)?
при активном использовании прерываний delay_ms(100) может дать реальную задержку и в 120 мс и в 200 мс.
мой совет: если алгоритм позволяет - отключать все прерывания перед использованием delay(). функцию сделать свою с использованием delay_us() в цикле. при этом надо стремиться максимально увеличить мнимальный интервал, подставляемый в delay_us() и учесть время выполнения самого цикла.
если алгоритм не позволяет - придётся выделить отдельный таймер и работать через прерывания. Точность можно добиться 5-10 тактов + время выполнения всех прерываний. но в любом случае это будет точнее чем использование delay().
|
|
|
|
16.01.2016, 13:40
|
#18
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,131
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
3-5 тактов делается просто при помощи nop
__________________
кагмаподэ магмаподэ
|
|
|
|
16.01.2016, 13:54
|
#19
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от индюк
|
|
ну ты ж вумный - мог бы и догадаться.
|
А я и догадался, что при любом раскладе у тебя чушь!
Сообщение от индюк
|
|
а зачем мне там систик? систик один раз настроил на 10микросекунд и он тебе тикает и вообще он больше для сложных программ, для операционок ваще нужен и генерит он там не 1мкс полюбому. значит 2-3 мкс я не получу.
|
Опять чушь! Систик должен тикать каждые 1-100 мС., по правильному - 10-100 мС, для нужд ОС. Иначе система только и будет занята обслуживанием систика.
Сообщение от индюк
|
|
а тут сколько мне надо столько и поставил. хоть 2мкс хоть 25000.
|
А 1мкс это вообще изврат чистой воды.
Сообщение от Godzilla82
|
|
с какой точностью задержка необходима (в мкс)?
|
Вот это самый правильный вопрос!
|
Цитата:
|
|
при активном использовании прерываний delay_ms(100) может дать реальную задержку и в 120 мс и в 200 мс.
|
100% ! Но в большинстве случаев этого достаточно, поэтому и лепить таймеры или ещё что-то и смысла нет.
Сообщение от Godzilla82
|
|
мой совет: если алгоритм позволяет - отключать все прерывания перед использованием delay(). функцию сделать свою с использованием delay_us() в цикле. при этом надо стремиться максимально увеличить мнимальный интервал, подставляемый в delay_us() и учесть время выполнения самого цикла.
|
Это всё уныло и безнадёжно, можно потерять событие нужного прерывания.
Сообщение от Godzilla82
|
|
если алгоритм не позволяет - придётся выделить отдельный таймер и работать через прерывания. Точность можно добиться 5-10 тактов + время выполнения всех прерываний. но в любом случае это будет точнее чем использование delay().
|
Если таймер позволяет, можно вообще такт в такт получить.
|
|
|
|
16.01.2016, 14:00
|
#20
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,131
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
|
Re: "delay" не позволяет варировать микросекундами
Сообщение от STM32F0
|
|
по правильному - 10-100 мС, для нужд ОС.
|
ну и чо ты мне тогда предлагаешь его использовать для мкс задержек то?
__________________
кагмаподэ магмаподэ
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:43.
|
|