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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

- а зачем вам яблоки?
- не понимаю, зачем вам яблоки, когда полно отличных груш
...
ProtAS-13 вне форума  
Непрочитано 17.11.2020, 21:49  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,045
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
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, время: 16:46.


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