Easyelectronics.ru

Электроника для всех
Текущее время: 23 июл 2018, 07:23

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: DELAY
СообщениеДобавлено: 12 авг 2016, 16:51 
Заглядывает иногда

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 101
Откуда: BELARUS
Собственно CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);должно быть 16 МГц .На данный момент delay_ms(100); получается около 1сек .Почему?


Вложения:
delay].jpg
delay].jpg [ 107.85 Кб | Просмотров: 1926 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 17:00 
Старожил
Аватара пользователя

Зарегистрирован: 10 фев 2012, 18:04
Сообщения: 826
Откуда: Україна
При такой "задержке" оно Вам ничего не должно.
И потом, тт алгоритм некорректный, number только первый раз декрементируется от переданного в функцию значения до 0, а потом отрабатывает все 32 бита...

_________________
"Если вы такие умные, что ж вы строем не ходите?"

Легче зажечь одну маленькую свечу, чем постоянно жаловаться на тьму...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 17:39 
Заглядывает иногда

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 101
Откуда: BELARUS
DOOMSDAY писал(а):
При такой "задержке" оно Вам ничего не должно.
И потом, тт алгоритм некорректный, number только первый раз декрементируется от переданного в функцию значения до 0, а потом отрабатывает все 32 бита...


Код:
void delay_ms(unsigned int number)
{
    int n;
    for (uint16_t i = 1000;i>0;i--){
    n=number;
    while (n -- > 0);
}

delay_ms(1000); сейчас порядок.


Последний раз редактировалось elisey 13 авг 2016, 00:30, всего редактировалось 1 раз.
Для оформления кода нужно использовать тэг [code]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 17:45 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 590
Откуда: Киев
Скажите, а у вас четвёртый таймер запрещён к работе?
Просто ждать целую секунду, перемалывая незначащие числа, зап**ло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 18:06 
Заглядывает иногда

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 101
Откуда: BELARUS
Да нет думал об этом.Надо будет сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 19:48 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 590
Откуда: Киев
BorisBritwa писал(а):
Да нет думал об этом.Надо будет сделать.

Вот готовое. Нет ни одного проекта без него
Show



Использование:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 22:55 
Старожил

Зарегистрирован: 08 окт 2012, 00:25
Сообщения: 871
И в чём кайф... такого применения таймера??? Минус таймер... и минус прерывание...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 12 авг 2016, 23:42 
Заглядывает иногда

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 101
Откуда: BELARUS
Лучше уж первый вариант),вариант с 4 таймером можно использовать
например примерно так,где нужно выполнять что-то с постоянной периодичностью.
Код:
#define SET_TIMER    100
#define SET_TIMER_2 1000

if( ((sys_time() - timer_ms) < SET_TIMER)){
    do something;
    timer_ms = sys_time ();
}

if( ((sys_time() - timer_ms_2) < SET_TIMER_2)){
    do something_2;
    timer_ms_2 = sys_time ();
}


Последний раз редактировалось elisey 13 авг 2016, 00:29, всего редактировалось 1 раз.
Для оформления кода нужно использовать тэг [code]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 14 авг 2016, 11:58 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 590
Откуда: Киев
Наверное, вам никогда не приходилось делать несколько одновременно работающих процессов.
Тогда, при использовании конечных автоматов, возможна полностью независимая работа неограниченного количества программ.
Просто потому, что во время ожидания контроллер свободен.
Имея счётчик миллисекунд и счётчик секунд, легко сделать задержку от 1 мс до 18 суток.

У меня есть ещё два способа задержек, но я специально упростил программу для того, чтобы был понятен принцип.
Например, задержки в контексте конечного автомата реализуются следующим образом:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 29 ноя 2017, 23:37 
Только пришел

Зарегистрирован: 05 мар 2016, 12:40
Сообщения: 10
SOVA писал(а):
BorisBritwa писал(а):
Да нет думал об этом.Надо будет сделать.

Вот готовое. Нет ни одного проекта без него
Show



Использование:
Show

Зачем в файле Timer.c в формуле переменная F_MASTER если мы регистрами определяем частоту 16 МГц, и SYSTICK_SPEED если это 1 и больше нигде не используется?
Вот эта строка
INTERRUPT_HANDLER (SysTick_Timer_ISR, 23)
{
аналогична
#pragma vector=TIM4_OVR_UIF_vector
__interrupt void SysTick_Timer_ISR (void)?
И не совсем понятно как пользоваться. Где вводить необходимое число Х мс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 30 ноя 2017, 14:37 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 590
Откуда: Киев
Строка равна прагме, просто прагма свёрнута в макрос.
Х мс вводить в условие ожидания, в примере SET_TIMER
Вначале переменная timer_ms равна системному времени. Разница определяет, сколько времени прошло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 30 ноя 2017, 19:59 
Только пришел

Зарегистрирован: 05 мар 2016, 12:40
Сообщения: 10
Спасибо за ответ.
У меня еще вопрос, может даже не по теме, зачем к 1000 приписали UL?
Почему мы негде не определяли переменную system_count_sec и system_ms?
system_time автоматически обнуляется после 65535?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DELAY
СообщениеДобавлено: 04 дек 2017, 17:37 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 590
Откуда: Киев
Valek174 писал(а):
Почему мы негде не определяли переменную system_count_sec и system_ms?

В контексте данного примера они не применяются.
Valek174 писал(а):
system_time автоматически обнуляется после 65535?

Да. Условия составлены таким образом, что переполнение счётчика не влияет на результат сравнения.
1000 приписали UL - исторически так сложилось, не приписывайте.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB