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

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

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

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

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

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


 
Опции темы

многозадачный таймер на millis для Ардуино

Непрочитано 17.11.2020, 17:29  
parovoZZ
Почётный гражданин KAZUS.RUN
 
Регистрация: 15.11.2010
Сообщений: 2,376
Сказал спасибо: 337
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Сообщение от ProtAS-13 Посмотреть сообщение
Здесь ЭЛЕМЕНТАРНАЯ алгоритмическая ошибка.
А где алгоритм, представленный ТС? По криво вставленному коду реверсировать алгоритм мало кто возьмётся.

Сообщение от dgrishin Посмотреть сообщение
надо учитывать отрицательные числа тоже.
не надо. У него беззнаковые переменные. Системный таймер также беззнаковый.


Сообщение от ProtAS-13 Посмотреть сообщение
Когда сработает ветка со вторым if, если первая if ветка всегда выполняется первой?
лично мне вообще без разницы, что, когда и где выполнится или не выполнится. Сказано же: ардурины здесь нет.
Реклама:
parovoZZ вне форума  
Непрочитано 17.11.2020, 18:05  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Сообщение от ProtAS-13 Посмотреть сообщение
Исчерпывающий ответ
Я всё объяснил раньше. Если вы не понимаете, что такое декремент, то это не мои проблемы.
Протас как всегда - ничего не понял, но понтов нагнал много, а результат - пшик и пук. Он просто никогда не делал программные таймеры, потому и не понимает, как это делается.

Если опираться на значение системного тика, то он имеет свойство переполняться через некоторый интервал времени. К тому же, для циклических таймеров вообще это излишне - в каждом цикле вычислять приращение систиков, а в каждом систике вычислять разницу между целевым и текущим значениями.
Гораздо эффективнее заводить таймер с обратным отсчетом, который при каждом системном тике будет уменьшаться на 1 до 0. Это и обрабатывается быстрее, и позволяет легко перезапускать цикл счета, записывая стартовое значение после окончания декрементов.
Абсолютно ничего сложного, безопасно от переполнения счетчика систиков, да и алгоритмически верно.

Последний раз редактировалось NewWriter; 17.11.2020 в 18:44.
NewWriter вне форума  
Непрочитано 17.11.2020, 19:24  
dgrishin
Почётный гражданин KAZUS.RUN
 
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,162
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Сообщение от NewWriter Посмотреть сообщение
Если опираться на значение системного тика, то он имеет свойство переполняться через некоторый интервал времени.
У Ардуино все интереснее - функция возвращает время в мс с момента старта системы. И у нее периодичность около 50 дней. То есть если время работы системы меньше 50 дней - то на переполнение можно забить, а если больше и про эту фичу не вспомнить - то через 50 дней можно получить непредсказуемый результат.
dgrishin вне форума  
Непрочитано 17.11.2020, 19:44  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Даже если так, то всё равно, вычисление приращения многобайтного систика на 8-битной системе гораздо тормознутее работает, нежели декрементный счет таймера. И это особенно актуально на ардуйне. Впрочем, ардуйня - она потому и ардуйня, что никто не думает за быстродействие.
NewWriter вне форума  
Непрочитано 17.11.2020, 20:32  
ProtAS-13
Вид на жительство
 
Регистрация: 17.03.2015
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 229 раз(а) в 131 сообщении(ях)
ProtAS-13 на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Сообщение от NewWriter Посмотреть сообщение
Протас как всегда - ничего не понял, но понтов нагнал много, а результат - пшик и пук. Он просто никогда не делал программные таймеры, потому и не понимает, как это делается.
Каюсь. Я действительно не понял.
Не понял как Вы вообще пишете код?
Так и представляю в ваших "творениях" гроздья ПОСЛЕДОВАТЕЛЬНО расположенных операторов if, выполняющих проверку ОДНОГО И ТОГО ЖЕ условия.
Простите, что вмешался в спор "продвинутых", я бы даже сказал - "альтернативно продвинутых"
ProtAS-13 вне форума  
Непрочитано 17.11.2020, 20:51  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

ProtAS-13, то, что вы навоображали себе, не имеет отношения к действительности. Вы никогда не использовали программные таймеры на основе одного системного, потому для вас вообще сложно понять алгоритм работы декрементных счетчиков.

Я не разбирал творения топикстартера, поскольку незачем его разбирать. Есть другой вариант, гораздо более экономичный. У вас просто мозгов не хватает, чтобы увидеть его. Протас, разберитесь с декрементными таймерами - и вам всё станет понятно, что и как работает, и что там нет ничего такого, над чем у вас, Протас, тут возникли сложности.

Последний раз редактировалось NewWriter; 17.11.2020 в 21:01.
NewWriter вне форума  
Непрочитано 17.11.2020, 21:11  
ProtAS-13
Вид на жительство
 
Регистрация: 17.03.2015
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 229 раз(а) в 131 сообщении(ях)
ProtAS-13 на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Сообщение от NewWriter Посмотреть сообщение
Я не разбирал творения топикстартера, поскольку незачем его разбирать. Есть другой вариант, гораздо более экономичный.
Сорри за офтоп.
Цитата:
Американский форум:
- здравствуйте, где можно купить яблок?

- в магазине "Трейдер Джойс"
- можно заказать он-лайн вот на этом сайте
...

"продвинутый" форум:
- здравствуйте, где можно купить яблок?

- а зачем вам яблоки?
- не понимаю, зачем вам яблоки, когда полно отличных груш
...
ProtAS-13 вне форума  
Непрочитано 17.11.2020, 21:49  
dgrishin
Почётный гражданин KAZUS.RUN
 
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,162
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

Если вы очень хотите помигать 4-мя разными светодиодами с разной частотой - то вот как это должно выглядеть.

unsigned long Start_Timer0, Start_Timer1, Start_Timer2, Start_Timer3, Current_Timer;
unsigned lowHIGH_0 = 0; // текущее состояни пина.

void setup()
{
pinMode(2, OUTPUT);// выход
pinMode(3, OUTPUT);// выход
pinMode(4, OUTPUT);// выход
pinMode(5, OUTPUT);// выход
Start_Timer0 = millis();
Start_Timer1 = Start_Timer0;
Start_Timer2 = Start_Timer0;
Start_Timer3 = Start_Timer0;
}
void loop()
{
Current_Timer_ms = millis(); // function calls only one time per loop() call

if (Current_Timer_ms - Start_Time0 = 3000) {Start_Timer0 = Current_Timer_ms;
if(lowHIGH_0 == 0) digitalWrite(2, LOW);
else digitalWrite(2, HIGH);

lowHIGH_0 ^= 1;
}
/////////////////////////////////////////////////////////////////////////////////
// для timer1, timer2 and timer3 - аналогично
////////////////////////////////////////////////////////////////////////////////
}

Но проблема периода 50 дней здесь не учитывается.
dgrishin вне форума  
Сказали "Спасибо" dgrishin
Владимир 013 (17.11.2020)
Непрочитано 17.11.2020, 22:47  
Владимир 013
Частый гость
 
Регистрация: 07.11.2019
Сообщений: 15
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Владимир 013 на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

спасибо я нашел пример по нему сделал макетный вариант код изменил значительно , тема с декрементами интересна еще не изучал это , просто у меня задача в программе заменить задержки delay на millis что бы не тормозили код в цикле , но я смотрю там настолько заморочено и приходиться усложнять код и использовать больше ресурсов Ардуино что в худшем варианте может и оставлю delay ну будут датчики опрашиваться не постоянно а раз в 15 сек
Владимир 013 вне форума  
Непрочитано 17.11.2020, 22:59  
Владимир 013
Частый гость
 
Регистрация: 07.11.2019
Сообщений: 15
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Владимир 013 на пути к лучшему
По умолчанию Re: многозадачный таймер на millis для Ардуино

со светодиодами это просто макетный вариант для проверки как это все работает , основная задача при выполнении определенных условий в программе сделать нужную задержку и исполнить код вот и все , задержи будут : секунды , минуты , часы . по истечении 50 суток обнулиться счетчик думаю на мои задержки не должен повлиять хотя нужно все проверять , программа должна работать 7 мес в году все таки отопительный котел
Владимир 013 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с ардуино уно begun Делимся опытом 1 24.05.2017 13:37
Быстро проверить исправность Ардуино. 123ksn AVR 9 25.11.2014 11:54
"Шахматный" таймер на ATmega 8515 Bahmut_aiirsoft Песочница (вопросы новичков) 14 17.11.2013 14:14
Сторожевой таймер в ATtiny25/45/85 mike124 Proteus 11 30.10.2012 11:19
таймер и симуляция в MPLAB Sim lisergin Микроконтроллеры, АЦП, память и т.д 0 16.01.2006 15:35


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


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