как делать маленькие паузы?

vde69
Offline
Зарегистрирован: 10.01.2016

нужно делать небольшие паузы, что лучше и в чем отличие?

delayMicroseconds(1000)  или  delay(1)

msng
Offline
Зарегистрирован: 07.06.2012

второй вариант, скетч меньше места занимает...

ps а в другом случае наоборот...

Logik
Offline
Зарегистрирован: 05.08.2014

милисекунда - не маленькая пауза. это 16000 тактов. делать без делея на micros() или использовать прерывания.

Вобще подход  к способу реализации с временной точки выглядит так: быстрое, до 5мкс - аппаратно или просто ногодрыг паузу на циклах или прямой работой с  таймером, далее до 200-1000мкс - прерывания таймера с машинкой состояний или аппаратно , далее машинка состояний в лупе. Времена даны очень ориентировочно, для 16МГц и в зависимости от задачи могут сильно отклонятся.

vde69
Offline
Зарегистрирован: 10.01.2016

microc сам выполняется дольше.... а пауза мне нужна именно с остановкой основной программы, эта пауза должна компенсировать время вереключения тригеров в max485, пока точно размер и место паузы еще не знаю, но совсем без нее как-то криво работает 

Logik
Offline
Зарегистрирован: 05.08.2014

Вы часом мили с микро не попутали? microc за несколько микросекунд возвращает, у него дискретность 4мкс. Тригера обычно переключаются еще быстрей.

vde69
Offline
Зарегистрирован: 10.01.2016

Logik пишет:

Вы часом мили с микро не попутали? microc за несколько микросекунд возвращает, у него дискретность 4мкс. Тригера обычно переключаются еще быстрей.

может и перепутал :)  ладно пока сам поразбираюсь

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В целом да. Логика можно только уточнить: delayMiocroseconds() сам отрабатывает не более 3.5мкс, и то если до конца доходит, а не вываливается раньше.

Короткие паузы проще всего отрабатывать макросами delayMicro8() или delayMicro16() это из моего, они же находятся в системном #include <util/delay_basic.h> под именами _delay_loop_1() и _delay_loop_2() соответсвенно. Первая функция и макрос принимают счетчик задержек в виде 1 байта и делают задержки по 3 такта F_CPU, а вторые принимают беззнаковое целое и делают задержки по 4 такта (для 16Мгц, 1 задержка = 250нсек, что часто удобней).

Паузы побольше да, удобно отрабатывать тем же "блин без делай", но в качестве функции времени брать micros(), помня о том, что она возвращает время кратное 4 мксек., это если "loop() позволяет". Или прерываниями с автоматом в loop(). Мне пока тоже не удалось найти способа "лучше" для задержек от 10мксек до 1-2миллисекунд. Самый "*опский" интервал и достаточно часто востребован.