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

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

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

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

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

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

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

 
Опции темы

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

Непрочитано 15.01.2016, 18:51  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию "delay" не позволяет варировать микросекундами

здравствуйте друзья
работаю с мк. AVR в cvavr
использую футкцию delay_ms(x) c переменным параметром x , значение которого меняется в ходе программы.
когда значение х целое все нормально но нужно нецелое значение 1,5msе.
прешел на микросекурды и записал 1500 но появилась cvavr зафиксировал ошибку и выдал запись
-must be constant expression.
прошу помочь разобратся в чем тут дело и как сделать в delay нецелечисленную задержку?
заранее благодарен за любой совет.
Реклама:
begun вне форума  
Непрочитано 15.01.2016, 19:05  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

не делать delay, делать через таймеры, все равно к этому придете ))
ну или делать через два delay, подряд, сначала большую часть миллисекунды, потом остаток микросекунды.
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Сказали "Спасибо" E_C_C
begun (16.01.2016)
Непрочитано 15.01.2016, 19:06  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Вот содержимое заголовочного файла delay.h
PHP код:
// CodeVisionAVR C Compiler
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.

#ifndef _DELAY_INCLUDED_
#define _DELAY_INCLUDED_

#pragma used+

void delay_us(unsigned int n);
void delay_ms(unsigned int n);

#pragma used-

#endif 
Как Вы хотите присвоить дробное значение инту?
А вот почему ошибка при значении 1500 - Вам видней.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 15.01.2016 в 19:18.
akegor вне форума  
Сказали "Спасибо" akegor
begun (16.01.2016)
Непрочитано 15.01.2016, 20:32  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

cпасибо за отзыв
дело в том что delay_us (1500) работает нормально но
delay_us(x);
x=3000;
уже не работает в то время как
delay_ms(x);
x=3;
работает нормально.
begun вне форума  
Непрочитано 15.01.2016, 20:46  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Код:
x=30;
     for(i=0;i‹=x;i++)
       { delay_us(100)}

будет 3000мс =3сек
можно и так, но это в корне неверный подход
запускайте таймер на счет микросекунд, в прерывании таймера инкрементируйте переменную- счетик, в основной программе анализируйте состояние счетчика и будет Вам счастье.
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 15.01.2016, 21:11  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Мега и мегаписатели это просто мегаудовольствие!
Сообщение от E_C_C Посмотреть сообщение
не делать delay, делать через таймеры, все равно к этому придете ))
А что, в Меге куча таймеров, как в последних ПИКах или СТМ32? Их просто девать некуда? Или они только для задержек и годятся?
Сообщение от E_C_C Посмотреть сообщение
можно и так, но это в корне неверный подход
Чем же интересно? Потому что кто-то когда-то сказал?
Сообщение от E_C_C Посмотреть сообщение
запускайте таймер на счет микросекунд, в прерывании таймера инкрементируйте переменную- счетик, в основной программе анализируйте состояние счетчика и будет Вам счастье.
Нифига себе счастье! Это просто мегасчастье!
Это типа мегаSysTick ? Ух ты! А что, Мега настолько развита, что может прервать по человечески другое прерывание? Или прерывания тоже только для задержек и годятся?
STM32F0 вне форума  
Непрочитано 15.01.2016, 23:05  
zöner
Гражданин KAZUS.RUN
 
Регистрация: 16.02.2012
Сообщений: 440
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
zöner на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

попробуйте как-то так:
Код:
#define _delay_ms(ms) \
    for (uint8_t i=0; i‹(uint8_t)(ms); i++) delay_us(1000); \
    delay_us( (uint16_t)(((ms) * 1000.0) % 1000.0) );
zöner вне форума  
Сказали "Спасибо" zöner
begun (16.01.2016)
Непрочитано 16.01.2016, 00:13  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

Сообщение от begun Посмотреть сообщение
delay_us(x);
x=3000;
уже не работает
Все работает у меня. Работает в диапазоне беззнакового целого, а это 65 миллисекунд.
Или ищите блуд у себя, или счаз насоветуют костылей (уже есть желающие).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 16.01.2016, 01:35  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

akegor

у меня стоит XP
cvavr 25 версия
но ничего не получается. прямо как закалдованный круг.
раз у вас работает, я попробую запустить cvavr на ноутбуке и там попробовать.
begun вне форума  
Непрочитано 16.01.2016, 01:42  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,122
Сказал спасибо: 202
Сказали Спасибо 3,283 раз(а) в 2,149 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: "delay" не позволяет варировать микросекундами

вот они, программисты на си.
знали бы как сам проц устроен все эти полускрипты/макросы нахрен не нужны были бы.
за 5 минут сам бы уж напиал свой делей а не сопли размазывал бы по форуму

void delayms (int ms)
{
c5=10;

TIM3-›ARR = ms;
TIM3-›CR1 = TIM_CR1_ARPE|TIM_CR1_CEN;
while (c5)
{ }


}
__________________
кагмаподэ магмаподэ
индюк вне форума  
 
Опции темы

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

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

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


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


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