Diferencia entre revisiones de «analogWrite()»

De ArduWiki
Saltar a: navegación, buscar
(Referencias)
(Ejemplo)
 
(No se muestran 14 ediciones intermedias del mismo usuario)
Línea 2: Línea 2:
 
Escribe un valor en un pin analógico (genera onda PWM). Se puede usar para encender un LED con luminosidad variable o accionar un motor que soporte PWM a diferentes velocidades. Después de llamar a '''analogWrite()''', el pin va a generar una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente llamada a '''analogWrite()''' o una llamada a [[digitalRead()]] o [[digitalWrite()]] en el mismo pin.  
 
Escribe un valor en un pin analógico (genera onda PWM). Se puede usar para encender un LED con luminosidad variable o accionar un motor que soporte PWM a diferentes velocidades. Después de llamar a '''analogWrite()''', el pin va a generar una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente llamada a '''analogWrite()''' o una llamada a [[digitalRead()]] o [[digitalWrite()]] en el mismo pin.  
  
{{Nota|No es necesario llamar a [[pinMode()]] para configurar el pin como salida antes de llamar analogWrite().}}
+
{{Tip|No es necesario llamar a [[pinMode()]] para configurar el pin como salida antes de llamar analogWrite().}}
  
 
== Sintaxis ==
 
== Sintaxis ==
Línea 12: Línea 12:
 
;pin: pin a usar. En Arduino [[UNO]] son: 3, 5, 6, 9, 10 y 11.  
 
;pin: pin a usar. En Arduino [[UNO]] son: 3, 5, 6, 9, 10 y 11.  
 
;PWM: ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido).
 
;PWM: ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido).
 +
 +
{{Tip|Te recomiendo usar [[map()]] para adecuar los valores desde un pin analogico.}}
  
 
== Retornos ==
 
== Retornos ==
 
Nada.
 
Nada.
 +
 +
== Comentarios ==
 +
* La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz.
 +
* En Arduino [[UNO]] y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz.
 +
* En Arduino [[Leonardo]] los pines 3 y 11 también se ejecutan a 980 Hz.
 +
 +
{{Nota|La función analogWrite() no tiene nada que ver con los pines analógicos o la función [[analogRead()]].}}
 +
 +
{{Tip|Este comando tarda 129 ciclos de CPU.}}
  
 
== Advertencias ==
 
== Advertencias ==
Línea 23: Línea 34:
 
* Las salidas PWM generadas en los pines 5 y 6 tendrán ciclos de trabajo más altos de lo esperado. Esto es debido a las interacciones con las funciones  [[millis()]] y [[delay()]], que comparten el mismo temporizador interno usado para generar las salidas PWM. Esto se notará sobre todo en entornos de pequeño ciclo de trabajo (por ejemplo 0 - 10) y puede dar lugar a que un valor de 0 apague completamente la salida en los pines 5 y 6.
 
* Las salidas PWM generadas en los pines 5 y 6 tendrán ciclos de trabajo más altos de lo esperado. Esto es debido a las interacciones con las funciones  [[millis()]] y [[delay()]], que comparten el mismo temporizador interno usado para generar las salidas PWM. Esto se notará sobre todo en entornos de pequeño ciclo de trabajo (por ejemplo 0 - 10) y puede dar lugar a que un valor de 0 apague completamente la salida en los pines 5 y 6.
  
== Ejemplo ==
+
== Ejemplo 1 ==
 +
<syntaxhighlight lang="c++">
 +
byte n;
 +
void setup(){
 +
  pinMode(10, OUTPUT);
 +
}
 +
void loop(){
 +
  analogWrite(10, n);
 +
  n++;
 +
  delay(10);
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 
const byte led = 9;  //LED PWM
 
const byte led = 9;  //LED PWM
Línea 36: Línea 60:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== Comentarios ==
 
* La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz.
 
* En Arduino [[UNO]] y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz.
 
* En Arduino [[Leonardo]] los pines 3 y 11 también se ejecutan a 980 Hz.
 
 
{{Nota|La función analogWrite() no tiene nada que ver con los pines analógicos o la función [[analogRead()]].}}
 
  
 
== Vea también ==
 
== Vea también ==
* [[pinMode()]]
+
<categorytree mode=all>Funciones pines</categorytree>
* [[analogRead()]]
 
* [[digitalRead()]]
 
* [[digitalWrite()]]
 
* [[Programacion avanzada]]
 
  
== Referencias ==
+
== Referencias externas ==
 
* [https://www.arduino.cc/reference/es/language/functions/analog-io/analogread/ Guia de referencia de Arduino]
 
* [https://www.arduino.cc/reference/es/language/functions/analog-io/analogread/ Guia de referencia de Arduino]
* [https://www.luisllamas.es/tag/pwm/ Luis LLamas]
+
* [https://www.luisllamas.es/tag/pwm/ PWM] - Luis Llamas
* [https://www.youtube.com/watch?v=RdfVdgkv51E Humbeto Higinio]
+
* [https://www.youtube.com/watch?v=RdfVdgkv51E Manejo de Servomotores con Arduino] - Humberto Higinio
 +
* [https://www.youtube.com/watch?v=GnlmVMHA_wQ Que es PWM y para que sirve] - Rincon Ingenieril
 +
* [https://programarfacil.com/podcast/26-arduino-entradas-y-salidas/ Entradas y salidas] - Luis del Valle
 +
* [https://www.luisllamas.es/salidas-analogicas-pwm-en-arduino/ Salidas analogicas en Arduino] - Luis Llamas
 +
* [http://manueldelgadocrespo.blogspot.com/p/analogwrite.html analogWrite()] - Manuel Delgado
 +
* [http://diymakers.es/pwm/ PWM] - Diy Makers
 +
* [http://diymakers.es/mover-motores-paso-paso-con-arduino/ Motor paso a paso con arduino] - Diy Makers
 +
* [http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/ Control de velocidad y sentido de motor DC] - Diy Makers
  
[[Category:Funciones]]
+
[[Category:Funciones pines]]

Revisión actual del 00:29 17 dic 2019

Descripción

Escribe un valor en un pin analógico (genera onda PWM). Se puede usar para encender un LED con luminosidad variable o accionar un motor que soporte PWM a diferentes velocidades. Después de llamar a analogWrite(), el pin va a generar una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente llamada a analogWrite() o una llamada a digitalRead() o digitalWrite() en el mismo pin.

Tip: No es necesario llamar a pinMode() para configurar el pin como salida antes de llamar analogWrite().


Sintaxis

analogWrite(pin, PWM);

Parámetros

pin
pin a usar. En Arduino UNO son: 3, 5, 6, 9, 10 y 11.
PWM
ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido).

Tip: Te recomiendo usar map() para adecuar los valores desde un pin analogico.


Retornos

Nada.

Comentarios

  • La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz.
  • En Arduino UNO y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz.
  • En Arduino Leonardo los pines 3 y 11 también se ejecutan a 980 Hz.

Nota: La función analogWrite() no tiene nada que ver con los pines analógicos o la función analogRead().


Tip: Este comando tarda 129 ciclos de CPU.


Advertencias

  • En la mayoría de las placas Arduino (con uC ATmega168 o ATmega328), esta función se puede utilizar en los pines 3, 5, 6, 9, 10, y 11.
  • En el Arduino MEGA, funciona en los pines 2 a 13 y 44 a 46.
  • Las placas Arduino más antiguas con uC ATmega8 sólo admiten analogWrite() en los pines 9, 10 y 11.
  • En el Arduino DUO analogWrite() funciona en los pines 2 a 13, más en los pines DAC0 y DAC1. A diferencia de los pines PWM, DAC0 y DAC1 son convertidores Digitales a Analógicos, y actúan como verdaderas salidas analógicas.
  • Las salidas PWM generadas en los pines 5 y 6 tendrán ciclos de trabajo más altos de lo esperado. Esto es debido a las interacciones con las funciones millis() y delay(), que comparten el mismo temporizador interno usado para generar las salidas PWM. Esto se notará sobre todo en entornos de pequeño ciclo de trabajo (por ejemplo 0 - 10) y puede dar lugar a que un valor de 0 apague completamente la salida en los pines 5 y 6.

Ejemplo 1

byte n;
void setup(){
   pinMode(10, OUTPUT);
}
void loop(){
   analogWrite(10, n);
   n++;
   delay(10);
}

Ejemplo 2

const byte led = 9;  //LED PWM
const byte pot = A3;  //potenciómetro
void setup() { 
   pinMode(led, OUTPUT);
   pinMode(pot, INPUT);  //En realidad no es necesario
}
void loop() {
   int val = analogRead(pot);   //lee el pin de entrada (genera valores enteros entre 0~1023)
   analogWrite(led, val/4);     //PWM, soporta valores enteros entre 0~255
}

Vea también


Referencias externas