Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Закрытая тема
Опции темы

"delay" не позволяет варировать микросекундами

Непрочитано 16.01.2016, 03:22   #11
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Сообщение от индюк Посмотреть сообщение
за 5 минут
Эта пять+!
Миниатюры:
Нажмите на изображение для увеличения
Название: fry-stress.jpg
Просмотров: 33
Размер:	17.9 Кб
ID:	86836  
Реклама:
STM32F0 вне форума  
Непрочитано 16.01.2016, 03:22   #12
marera
Гражданин KAZUS.RUN
 
Регистрация: 26.09.2005
Сообщений: 572
Сказал спасибо: 58
Сказали Спасибо 506 раз(а) в 134 сообщении(ях)
marera на пути к лучшему
По умолчанию 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.
marera вне форума  
Сказали "Спасибо" marera
begun (16.01.2016)
Непрочитано 16.01.2016, 03:50   #13
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Сообщение от akegor Посмотреть сообщение
счаз насоветуют костылей
Вредная птица явный лидер. Задержка в вечных циклах... это что-то!
STM32F0 вне форума  
Непрочитано 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
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Сообщение от индюк Посмотреть сообщение
там прерывание от таймера отнимает от паблика
Да неужели? Смотрим оригинал месаги.
Сообщение от индюк Посмотреть сообщение
вот они, программисты на си.
знали бы как сам проц устроен все эти полускрипты/макросы нахрен не нужны были бы.
за 5 минут сам бы уж напиал свой делей а не сопли размазывал бы по форуму
void delayms (int ms)
{
c5=10;
TIM3-›ARR = ms;
TIM3-›CR1 = TIM_CR1_ARPE|TIM_CR1_CEN;
while (c5)
{ }
}
Про прерывание нет ни слова!

Дальше. Это вообще офигенный изврат в натуре! Чем отличается обычный цикл от цикла с таймером и прерыванием, в данном случае? Правильно! Таймером и прерыванием, которые по недоумию приклеили скотчем, или выделениями из носа. Вопрос, накуа? У Меги много таймеров? У Меги развитые прерывания?
Даже для STM32 это офигенный изврат, там есть систик.
Так что, как там прозвучало, перестань чушь гнать!
STM32F0 вне форума  
Непрочитано 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
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: "delay" не позволяет варировать микросекундами

Сообщение от begun Посмотреть сообщение
использую футкцию delay_ms(x) c переменным параметром x , значение которого меняется в ходе программы.
...
прошу помочь разобратся в чем тут дело и как сделать в delay нецелечисленную задержку?
с какой точностью задержка необходима (в мкс)?

при активном использовании прерываний delay_ms(100) может дать реальную задержку и в 120 мс и в 200 мс.

мой совет: если алгоритм позволяет - отключать все прерывания перед использованием delay(). функцию сделать свою с использованием delay_us() в цикле. при этом надо стремиться максимально увеличить мнимальный интервал, подставляемый в delay_us() и учесть время выполнения самого цикла.

если алгоритм не позволяет - придётся выделить отдельный таймер и работать через прерывания. Точность можно добиться 5-10 тактов + время выполнения всех прерываний. но в любом случае это будет точнее чем использование delay().
Godzilla82 вне форума  
Непрочитано 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
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию 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().
Если таймер позволяет, можно вообще такт в такт получить.
STM32F0 вне форума  
Непрочитано 16.01.2016, 14:00   #20
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,131
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Сообщение от STM32F0 Посмотреть сообщение
по правильному - 10-100 мС, для нужд ОС.
ну и чо ты мне тогда предлагаешь его использовать для мкс задержек то?
__________________
кагмаподэ магмаподэ
индюк вне форума  
Закрытая тема


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 11:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.