Anda di halaman 1dari 5

analogWrite ()

Descripcin

Escribe un valor anlogo ( onda PWM ) para un alfiler. Se puede utilizar para
encender un LED a diferentes brillos o accionar un motor a distintas
velocidades. Despus de llamar a analogWrite () , el pin 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). La frecuencia de la seal PWM en la mayora de los pasadores es de
aproximadamente 490 Hz. En las tablas Uno y similares, los pines 5 y 6 tienen
una frecuencia de aproximadamente 980 Hz. Los pines 3 y 11 en el Leonardo
tambin corren a 980 Hz.

En la mayora de las placas Arduino (aquellos con los ATmega168 o ATmega328


), esta funcin trabaja en los pines 3, 5, 6, 9, 10 y 11. En la Arduino Mega,
funciona en los pines 2 - 13 y 44 - 46. Mayor Arduino tableros con un ATmega8
slo admiten analogWrite () en los pines 9, 10 y 11.

El Arduino Debido apoya analogWrite () en los pines 2 a 13, adems de pines


DAC0 y DAC1 . A diferencia de los pines PWM, DAC0 y DAC1 son convertidores
de digital a analgico, y actan como verdaderos salidas analgicas.

Usted no necesita llamar pinMode () para establecer el pin como salida antes
de llamar analogWrite ().

El analogWrite funcin no tiene nada que ver con los pines analgicos o la
analogRead funcin.

Sintaxis

analogWrite (pin, valor)

Parmetros

pin: el pasador a escribir a.

valor: el ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre


encendido).

Devoluciones

nada

Notas y problemas conocidos

Las salidas PWM generadas en los pines 5 y 6 tendrn ciclos de trabajo ms


altos de lo esperado. Esto es debido a las interacciones con los millis () y de
retardo () funciones, que comparten el mismo temporizador interno utilizado
para generar las salidas PWM. Esto se notar sobre todo en entornos de bajos
del ciclo de actividad (por ejemplo, 0 - 10) y puede dar lugar a un valor de 0 no
entregar totalmente fuera de la salida en los pines 5 y 6.

Ejemplo

Establece la salida al Led proporcional al valor ledo del potencimetro.

int ledPin = 9 ;

// LED conectado al pin digital de 9

int analogPin = 3 ;

int val = 0 ;

// potencimetro conectado al pin analgico 3

// variable para almacenar el valor ledo

void setup ( )

pinMode ( ledPin , SALIDA ) ;

// establece el pin como salida

void loop ( )

val = analogRead ( analogPin ) ;

// leer el pin de entrada

analogWrite ( ledPin , val / 4 ) ; // analogRead valores van de 0 a 1023, los


valores analogWrite desde 0 para 255

Tip: Configurar Timer


In Notas on septiembre 20, 2010 at 1:28 am

Algunas ocasiones es necesario modificar los timer internos del


microcontrolador, sea para tener diferentes escalas de tiempo iniciarlos /
desactivarlos o darles una configuracin diferente dependiendo de la
aplicacin. Para hacer ello en el IDE de Arduino, supondremos que
deseamos modificar el Timer2 del ATmega328, para ello deshabilitamos la
interrupcin mientras configuramos el timer:
TIMSK2 &= ~(1<<TOIE2);
Le decimos al Timer2 que se usar el modo normal slo para contar:
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));
TCCR2B &= ~(1<<WGM22);
Es posible usar reloj externo interno del microcontrolador, para este caso
usaremos el interno:
ASSR &= ~(1<
El timer cuenta con diversas opciones para saber cuando ha llegado a la
cuenta determinada. Podemos usar que compare y habilite una interrupcin
que la deshabiite, tambin cuando suceda un sobre-flujo el timer se
desborde al legar la cuenta, para ello usaremos sta ltima opcin:
TIMSK2 &= ~(1<<OCIE2A);

Un valor importante, es configurar los pre-escaladores, con ello podremos


tomar los ciclos del reloj maestro para reducir las cuentas y as dividirlo
por: 1:2,4,8,16,32,64,128, 256. Para ello podemos hacer:
Ponemos bits CS22 CS20 para 1:128 de pre-escalador:
TCCR2B |= (1<<CS22) | (1<<CS20);
Limpiamos bit CS21:
TCCR2B &= ~(1<<CS21);
Es necesario calcular el valor del ISR, que ser usado. Para ello:
x = DivM (fcpu* Td) / Pre
Dnde:
fcpu Frecuancia del reloj maestro del microcontrolador en hz
Td Periodo deseado en segundos
Pre valor del pre-escalador
DivM Valor mximo del divisor del timer, para el ATmega328 es 256
As cargamos este valor al registro interno y lo habilitamos para que inicie
su cuenta:
TCNT2 = x;
TIMSK2 |= (1<<TOIE2);
De esta forma hemos configurado un timer, para mayor referencia, revisar
el manual del ATmgea328.

Anda mungkin juga menyukai