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

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

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

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

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

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

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

 
Опции темы

Проблема с функцией задержки

Непрочитано 20.05.2014, 20:31  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Проблема с функцией задержки

Такого не должно быть. Весь проект в студию. Чем проверяете задержку?
Реклама:
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
insiderbik (22.05.2014)
Непрочитано 21.05.2014, 08:51  
Nikolaysherbakov
Временная регистрация
 
Регистрация: 28.07.2011
Адрес: Петропавловск, Казахстан.
Сообщений: 62
Сказал спасибо: 10
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Nikolaysherbakov на пути к лучшему
По умолчанию Re: Проблема с функцией задержки

Подтверждаю, функциям delay_ms(); и delay_us(); доверять не стоит НИКОГДА, они не корректно отрабатывают время(компилятор CVAVR, тестил на Mega8, Mega16, Mega32). Пользуйте прерывание любого удобного таймера и будет Вам счастье. Учтите, использование подобных функций занимает определенное время, в течении которого, контроллер тупо ждет и ни чего не делает. При использовании таймера, Ваша программа может спокойно что-то делать, а про прерыванию отработать обработчик и вернуться к выполнению обязанностей.
Nikolaysherbakov вне форума  
Сказали "Спасибо" Nikolaysherbakov
insiderbik (22.05.2014)
Непрочитано 21.05.2014, 15:38  
С.М.С
Гражданин KAZUS.RUN
 
Аватар для С.М.С
 
Регистрация: 03.07.2010
Сообщений: 842
Сказал спасибо: 156
Сказали Спасибо 377 раз(а) в 189 сообщении(ях)
С.М.С на пути к лучшему
По умолчанию Re: Проблема с функцией задержки

Ему может и не надо что-то ещё делать.


Сообщение от insiderbik Посмотреть сообщение
подключаемая функция delay.h содержит следующие строки:

Код:
// 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
не видно тут процедуры "delay_us", то что вы привели, только объявляет её, ищите в файле с расширением ".с", т.е "delay.c"
С.М.С вне форума  
Сказали "Спасибо" С.М.С
insiderbik (21.05.2014)
Непрочитано 21.05.2014, 18:35  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Проблема с функцией задержки

Сообщение от Nikolaysherbakov Посмотреть сообщение
Подтверждаю, функциям delay_ms(); и delay_us(); доверять не стоит НИКОГДА, они не корректно отрабатывают время(компилятор CVAVR, тестил на Mega8, Mega16, Mega32).
Вот не надо. Эти функции - тупо задержка на нужное количество циклов, которое расчитывается компилятором с учётом тактовой частоты.

Реально получается на несколько десятков тактов больше за счёт накладных расходов загрузки значения задержки в регистры, вызова подпрограммы задержки и т.п.

Если на момент выполнения функции задержки прерывания запрещены или не происходят, то задержка будет достаточно точная.

Естесственно, если в момент выполнения функции задержки возникают прерывания, то задержка увеличивается на время, требуемое для выполнения возникших прерываний. Просто это надо знать и учитывать.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
insiderbik (22.05.2014)
Непрочитано 21.05.2014, 18:37  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Проблема с функцией задержки

Сообщение от С.М.С Посмотреть сообщение
не видно тут процедуры "delay_us", то что вы привели, только объявляет её, ищите в файле с расширением ".с", т.е "delay.c"
Искать не надо. В CV эти функции скрыты в недрах компилятора. Но можно посмотреть дизассемблер. Многое прояснится.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
insiderbik (21.05.2014)
Непрочитано 21.05.2014, 19:14  
IOPA4
Почётный гражданин KAZUS.RUN
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,290
Сказал спасибо: 452
Сказали Спасибо 501 раз(а) в 267 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Проблема с функцией задержки

Сообщение от insiderbik Посмотреть сообщение
delay_ms(3000);
PORTB.2 = 0;
delay_ms(3000);
PORTB.2 = 1;
Попробуйте так:
Цитата:
PORTB.2 = 1;
delay_ms(3000);
PORTB.2 = 0;
delay_ms(3000);
Возможно из-за оптимизации кода компилятор не понимает, зачем сначала задержка, а потом действие.

Последний раз редактировалось IOPA4; 21.05.2014 в 19:25.
IOPA4 вне форума  
Сказали "Спасибо" IOPA4
insiderbik (21.05.2014)
Непрочитано 21.05.2014, 22:22  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Проблема с функцией задержки

Сообщение от IOPA4 Посмотреть сообщение
Возможно из-за оптимизации кода компилятор не понимает, зачем сначала задержка, а потом действие.
Речь идёт о CV. Так что оптимизация не причём. Возможные причины.

1. неправильно измеряется задержка
2. тактовая частота в настройках проекта не совпадает с реальной
3. во время второй задержки возникает куча прерываний

P.S. Просил выложить весь проект.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
insiderbik (22.05.2014)
Непрочитано 22.05.2014, 10:26  
insiderbik
Временная регистрация
 
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
insiderbik на пути к лучшему
По умолчанию Re: Проблема с функцией задержки

Сообщение от Godzilla82 Посмотреть сообщение
Речь идёт о CV. Так что оптимизация не причём. Возможные причины.

1. неправильно измеряется задержка
2. тактовая частота в настройках проекта не совпадает с реальной
3. во время второй задержки возникает куча прерываний

P.S. Просил выложить весь проект.
1. Задержки смотрятся на экране осциллографа - ошибки быть не может.
2. Тактовая частота в настройках совпадает с реальной - без вопросов.
3. Скорее всего в прерываниях дело и было ....

Я обошелся задержкой таймером. Всем поучаствовавшим огромное спасибо.
insiderbik вне форума  
Непрочитано 22.05.2014, 19:41  
IOPA4
Почётный гражданин KAZUS.RUN
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,290
Сказал спасибо: 452
Сказали Спасибо 501 раз(а) в 267 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Проблема с функцией задержки

Сообщение от Godzilla82 Посмотреть сообщение
Речь идёт о CV. Так что оптимизация не причём. Возможные причины.
А, что CV без оптимизации? А режимы - по скорости, по размеру, максимальная, так, для красного словца.
IOPA4 вне форума  
Непрочитано 22.05.2014, 20:59  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Проблема с функцией задержки

Сообщение от IOPA4 Посмотреть сообщение
Возможно из-за оптимизации кода компилятор не понимает, зачем сначала задержка, а потом действие.
Вот твердили же сколько раз: встроенные фичи недокомпиляторов -зло.
Тем более задержки с гигантскими параметрами.
Сделайте свою функцию с вызовом delay_ms() , delay_ms() передавать минимальный параметр.
К примеру .
Код:
  void wait ( uint16_t count)
{
   while (count--){delay_ms(1)};
}
__________________
Осторожно , злой кот
dosikus вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с FT232BM (FT232BL) anbsoft Микроконтроллеры, АЦП, память и т.д 27 07.08.2010 09:33
Проблема с DC/DC locostudy Источники питания и свет 2 03.11.2008 12:10
p30f6010A проблема с переключением состояния портов Ilya Микроконтроллеры, АЦП, память и т.д 8 22.09.2008 09:14
FT232BM проблема с прошивкой EEPROM zms2003 Микроконтроллеры, АЦП, память и т.д 3 27.06.2008 07:18
Проблема с ЛСД Zemlyanov Делимся опытом 4 12.01.2007 20:53


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


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