Diferencia entre revisiones de «analogWrite()»
De ArduWiki
(→Referencias) |
(→Ejemplo) |
||
(No se muestran 23 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. | ||
− | {{ | + | {{Tip|No es necesario llamar a [[pinMode()]] para configurar el pin como salida antes de llamar analogWrite().}} |
− | |||
− | |||
− | |||
− | |||
== Sintaxis == | == Sintaxis == | ||
Línea 14: | Línea 10: | ||
== Parámetros == | == Parámetros == | ||
− | ;pin: pin a usar. | + | ;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 == | ||
− | * 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 | + | * 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 | + | * 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. | * 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++"> |
− | const byte led = 9; //LED | + | byte n; |
− | const byte pot = | + | void setup(){ |
+ | pinMode(10, OUTPUT); | ||
+ | } | ||
+ | void loop(){ | ||
+ | analogWrite(10, n); | ||
+ | n++; | ||
+ | delay(10); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 2 == | ||
+ | <syntaxhighlight lang="c++"> | ||
+ | const byte led = 9; //LED PWM | ||
+ | const byte pot = A3; //potenciómetro | ||
void setup() { | void setup() { | ||
pinMode(led, OUTPUT); | pinMode(led, OUTPUT); | ||
Línea 34: | Línea 56: | ||
} | } | ||
void loop() { | void loop() { | ||
− | int val = analogRead(pot); //lee el pin de entrada (genera | + | int val = analogRead(pot); //lee el pin de entrada (genera valores enteros entre 0~1023) |
− | analogWrite(led, val/4); // | + | analogWrite(led, val/4); //PWM, soporta valores enteros entre 0~255 |
} | } | ||
− | </ | + | </syntaxhighlight> |
== Vea también == | == Vea también == | ||
− | + | <categorytree mode=all>Funciones pines</categorytree> | |
− | |||
− | |||
− | == 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/ PWM] - Luis Llamas | ||
+ | * [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
Contenido
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
- Guia de referencia de Arduino
- PWM - Luis Llamas
- Manejo de Servomotores con Arduino - Humberto Higinio
- Que es PWM y para que sirve - Rincon Ingenieril
- Entradas y salidas - Luis del Valle
- Salidas analogicas en Arduino - Luis Llamas
- analogWrite() - Manuel Delgado
- PWM - Diy Makers
- Motor paso a paso con arduino - Diy Makers
- Control de velocidad y sentido de motor DC - Diy Makers