Diferencia entre revisiones de «delayMicroseconds()»

De ArduWiki
Saltar a: navegación, buscar
(Página creada con «== Descripción == == Sintaxis == <pre> </pre> == Parámetros == == Retornos == == Advertencias == == Ejemplo == <pre> </pre> == Vea también == == Referencias == *...»)
 
(Vea también)
 
(No se muestran 2 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
 +
Pausa la ejecución del programa durante la cantidad de microsegundos especificada. Al igual que [[delay()]], no interfiere en las salidas PWM ni en las tareas en segundo plano (interrupciones).
 +
 +
Este retraso lo realiza con la mayor exactitud posible que pueda ofrecer el sistema; tanto así que para ciertas frecuencias de reloj, utiliza instrucciones en lenguaje ensamblador para mantener la sincronía.
  
 
== Sintaxis ==
 
== Sintaxis ==
 
<pre>
 
<pre>
 +
delayMicroseconds(tiempo);
 
</pre>
 
</pre>
  
 
== Parámetros ==
 
== Parámetros ==
 +
;tiempo: el lapso (en microsegundos) en el que el programa se detiene ([[unsigned int]]).
  
 
== Retornos ==
 
== Retornos ==
 +
Nada.
  
 
== Advertencias ==
 
== Advertencias ==
 +
* Debido a que esta función no interfiere con las interrupciones, estas podrían comprometer fuertemente la exactitud del retraso (lo prolongan más de lo que debería). A menos que las deshabilites con [[noInterrupts()]] o lo hagas dentro de una rutina de este tipo, no se recomienda utilizar esta función para generar (o leer) trenes de pulsos cuyo margen de error sea muy pequeño.
 +
 +
== Comentarios ==
 +
* A diferencia de [[delay()]], [[millis()]] y [[micros()]], esta función no depende de temporizador alguno; lo que lo vuelve utilizable sin interrupciones o dentro de una rutina de interrupción (aunque en la mayoría de casos se desaconseja su uso).
 +
* A pesar de ser algo inusual (y en cierto modo hasta absurdo pensar), debido al tipo de parámetro, es posible realizar un retraso de 65535 microsegundos (casi como hacer '''delay(66)''') o 4294967296 microsegundos (4295 segundos o 1 hora y 12 minutos); dependiendo de la arquitectura del microcontrolador.
 +
* Colocar un cero de parámetro es prácticamente el equivalente a colocar un uno; solamente el proceso que "por debajo" conlleva invocar una función y salir de esta, ya genera un retraso de esa duración. Dicho efecto se vuelve despreciable en microcontroladores que trabajan a 40 MHz o más.
  
 
== Ejemplo ==
 
== Ejemplo ==
<pre>
+
<syntaxhighlight lang="c++">
</pre>
+
while (true) {
 +
  digitalWrite(pin, HIGH);
 +
  delayMicroseconds(500);
 +
  digitalWrite(pin, LOW);
 +
  delayMicroseconds(500);
 +
}
 +
// Genera una señal cuadrada de más o menos 1 KHz. El sobrecargo del ciclo hace este proceso un tantito más lento, y además las ocasionales interrupciones hacen que dicha frecuencia no se mantenga estable.
 +
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
 +
<categorytree mode=all>Funciones tiempo</categorytree>
  
== Referencias ==
+
== Referencias externas ==
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
  
 
+
[[Category:Funciones tiempo]]
[[Category:Funciones]]
 

Revisión actual del 23:28 11 jun 2019

Descripción

Pausa la ejecución del programa durante la cantidad de microsegundos especificada. Al igual que delay(), no interfiere en las salidas PWM ni en las tareas en segundo plano (interrupciones).

Este retraso lo realiza con la mayor exactitud posible que pueda ofrecer el sistema; tanto así que para ciertas frecuencias de reloj, utiliza instrucciones en lenguaje ensamblador para mantener la sincronía.

Sintaxis

delayMicroseconds(tiempo);

Parámetros

tiempo
el lapso (en microsegundos) en el que el programa se detiene (unsigned int).

Retornos

Nada.

Advertencias

  • Debido a que esta función no interfiere con las interrupciones, estas podrían comprometer fuertemente la exactitud del retraso (lo prolongan más de lo que debería). A menos que las deshabilites con noInterrupts() o lo hagas dentro de una rutina de este tipo, no se recomienda utilizar esta función para generar (o leer) trenes de pulsos cuyo margen de error sea muy pequeño.

Comentarios

  • A diferencia de delay(), millis() y micros(), esta función no depende de temporizador alguno; lo que lo vuelve utilizable sin interrupciones o dentro de una rutina de interrupción (aunque en la mayoría de casos se desaconseja su uso).
  • A pesar de ser algo inusual (y en cierto modo hasta absurdo pensar), debido al tipo de parámetro, es posible realizar un retraso de 65535 microsegundos (casi como hacer delay(66)) o 4294967296 microsegundos (4295 segundos o 1 hora y 12 minutos); dependiendo de la arquitectura del microcontrolador.
  • Colocar un cero de parámetro es prácticamente el equivalente a colocar un uno; solamente el proceso que "por debajo" conlleva invocar una función y salir de esta, ya genera un retraso de esa duración. Dicho efecto se vuelve despreciable en microcontroladores que trabajan a 40 MHz o más.

Ejemplo

while (true) {
  digitalWrite(pin, HIGH);
  delayMicroseconds(500);
  digitalWrite(pin, LOW);
  delayMicroseconds(500);
}
// Genera una señal cuadrada de más o menos 1 KHz. El sobrecargo del ciclo hace este proceso un tantito más lento, y además las ocasionales interrupciones hacen que dicha frecuencia no se mantenga estable.

Vea también


Referencias externas