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

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

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

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

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

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

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

 
Опции темы
Непрочитано 26.04.2022, 10:13  
alexbmd
Прописка
 
Регистрация: 10.01.2016
Адрес: Молдова, Кишинёв
Сообщений: 126
Сказал спасибо: 31
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alexbmd на пути к лучшему
По умолчанию Куда пропадает точность _delay_ms() ?

Привет

atmega328p
настраиваю таймер 0 в режиме Normal, предделитель 64, по сравнению 250 тиков (1 мс)
делаю
Код:
int a = 0, b = 0;
a = millis();
_delay_ms(7100);
b = millis();
#ifdef _UTIL_DELAY_H_
terminal ‹‹ a ‹‹ " " ‹‹ b;
#endif
получаю 7179 разницу.
если использую delay из ардуино то там точно.

как можно повысить точность дилей от авр ?
Реклама:
alexbmd вне форума  
Непрочитано 26.04.2022, 10:34  
sanya
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 57
Сказал спасибо: 6
Сказали Спасибо 18 раз(а) в 15 сообщении(ях)
sanya на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Проверь настройки:

TCCR0A=(0‹‹COM0A1) | (0‹‹COM0A0) | (0‹‹COM0B1) | (0‹‹COM0B0) | (1‹‹WGM01) | (0‹‹WGM00);
TCCR0B=(0‹‹WGM02) | (0‹‹CS02) | (1‹‹CS01) | (1‹‹CS00);
TCNT0=0x00;
OCR0A=0xF9;
OCR0B=0x00;
TIMSK0=(0‹‹OCIE0B) | (1‹‹OCIE0A) | (0‹‹TOIE0);

interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
}

Функция _delay_ms() чисто циклами реализована, если при этом работают прерывания-точность никакая. Попробуй перед вызовом блокировать прерывания.

Последний раз редактировалось sanya; 26.04.2022 в 10:45.
sanya вне форума  
Непрочитано 26.04.2022, 13:29  
alexbmd
Прописка
 
Регистрация: 10.01.2016
Адрес: Молдова, Кишинёв
Сообщений: 126
Сказал спасибо: 31
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alexbmd на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Сообщение от sanya Посмотреть сообщение
TCCR0A=(0‹‹COM0A1) | (0‹‹COM0A0) | (0‹‹COM0B1) | (0‹‹COM0B0) | (1‹‹WGM01) | (0‹‹WGM00);
это СТС . у меня Нормал. хотя что так что так. это влияет на подсчет милис но не на дилей функцию
в остальном одинаково.

Последний раз редактировалось alexbmd; 26.04.2022 в 13:39.
alexbmd вне форума  
Непрочитано 26.04.2022, 13:39  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,416
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

А в Ардуине же delay() вроде на таймере реализована?
baiderin вне форума  
Непрочитано 26.04.2022, 14:31  
sanya
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 57
Сказал спасибо: 6
Сказали Спасибо 18 раз(а) в 15 сообщении(ях)
sanya на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Сообщение от baiderin Посмотреть сообщение
А в Ардуине же delay() вроде на таймере реализована?
Так то в дурине. Вопрос про AVR GCC. Там на циклах.
sanya вне форума  
Непрочитано 26.04.2022, 14:49  
alexbmd
Прописка
 
Регистрация: 10.01.2016
Адрес: Молдова, Кишинёв
Сообщений: 126
Сказал спасибо: 31
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alexbmd на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Сообщение от baiderin Посмотреть сообщение
А в Ардуине же delay() вроде на таймере реализована?
ну привязан к микрос да. вопрос про дилей от авр

Последний раз редактировалось alexbmd; 26.04.2022 в 17:12.
alexbmd вне форума  
Непрочитано 26.04.2022, 15:19  
sanya
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 57
Сказал спасибо: 6
Сказали Спасибо 18 раз(а) в 15 сообщении(ях)
sanya на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Вот код функции в WinAVR (GCC):

void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__count)
: "0" (__count)
);
}

void _delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp ‹ 1.0)
__ticks = 1;
else if (__tmp › 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
}
return;
}
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}

Все задержки на циклах. Если нужна точность при работающих прерываниях-только таймер!
В чем проблема его использовать. Кстати а F_CPU правильно выставлена?

Последний раз редактировалось sanya; 26.04.2022 в 15:32.
sanya вне форума  
Непрочитано 26.04.2022, 17:16  
alexbmd
Прописка
 
Регистрация: 10.01.2016
Адрес: Молдова, Кишинёв
Сообщений: 126
Сказал спасибо: 31
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alexbmd на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

sanya,
ну таймер (прерывание) у меня выставлен на 1 мс. каждую мс тикает и акумулирует в глобальную перемнную. функция милис возвращяет эту глобальную.
городить еще один таймер и глобальную для дилей как то ну незнаю

F CPU 16000000 вроде правильно
alexbmd вне форума  
Непрочитано 27.04.2022, 00:00  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Я надеюсь, миллисекундные задержки в рилтайме не используются - только во время конфигурации?
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 27.04.2022, 01:35  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 943
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Куда пропадает точность _delay_ms() ?

Сообщение от alexbmd Посмотреть сообщение
делаю
Сообщение от alexbmd Посмотреть сообщение
получаю 7179 разницу.
Сообщение от alexbmd Посмотреть сообщение
ну таймер (прерывание) у меня выставлен на 1 мс. каждую мс тикает и акумулирует в глобальную перемнную. функция милис возвращяет эту глобальную.
И шо вас таки удивляет? То, что в посчитанное компилятором число тактов, и, в соответствии с этими расчётами, сформованными наборами циклов, вы 7100 раз добавляете время выполнения вашего "прерывания 1 мс"?
Someone вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обзоры покупок товаров на GEARBEST.COM mikesmith Барахолка электронных компонентов 397 12.10.2018 22:51
Пропадает байт 0x55 при передачи USART vavan1983 PIC 2 12.02.2015 23:19
Помогите с лампой - куда чего sobyninsk Источники питания и свет 11 05.09.2013 20:46
Как рассчитать точность измерения напряжения? alenka_fml Электроника - это просто 22 27.05.2012 23:10
Точность GPS Angel_leo Автоматика и аппаратура связи 2 05.07.2010 15:42


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot