как делать маленькие паузы?
- Войдите на сайт для отправки комментариев
Втр, 24/05/2016 - 08:30
нужно делать небольшие паузы, что лучше и в чем отличие?
delayMicroseconds(1000) или delay(1)
нужно делать небольшие паузы, что лучше и в чем отличие?
delayMicroseconds(1000) или delay(1)
второй вариант, скетч меньше места занимает...
ps а в другом случае наоборот...
милисекунда - не маленькая пауза. это 16000 тактов. делать без делея на micros() или использовать прерывания.
Вобще подход к способу реализации с временной точки выглядит так: быстрое, до 5мкс - аппаратно или просто ногодрыг паузу на циклах или прямой работой с таймером, далее до 200-1000мкс - прерывания таймера с машинкой состояний или аппаратно , далее машинка состояний в лупе. Времена даны очень ориентировочно, для 16МГц и в зависимости от задачи могут сильно отклонятся.
microc сам выполняется дольше.... а пауза мне нужна именно с остановкой основной программы, эта пауза должна компенсировать время вереключения тригеров в max485, пока точно размер и место паузы еще не знаю, но совсем без нее как-то криво работает
Вы часом мили с микро не попутали? microc за несколько микросекунд возвращает, у него дискретность 4мкс. Тригера обычно переключаются еще быстрей.
Вы часом мили с микро не попутали? microc за несколько микросекунд возвращает, у него дискретность 4мкс. Тригера обычно переключаются еще быстрей.
может и перепутал :) ладно пока сам поразбираюсь
В целом да. Логика можно только уточнить: 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миллисекунд. Самый "*опский" интервал и достаточно часто востребован.