Reference   Language (extended) | Libraries | Comparison | Changes

analogReference(tipo)

Descripción

Configura el voltaje de referencia usado por la entrada analógica.La función analogRead() devolverá un valor de 1023 para aquella tensión de entrada que sea igual a la tensión de referencia. Las opciones son:

  • DEFAULT: Es el valor de referencia analógico que viene por defecto que de 5 voltios en placas Arduino de y de 3.3 voltios en placas Arduino que funcionen con 3.3 voltios.
  • INTERNAL: Es una referencia de tensión interna de 1.1 voltios en el ATmega168 o ATmega328 y de 2.56 voltios en el ATmega8.
  • EXTERNAL: Se usará una tensión de referencia externa que tendrá que ser conectada al pin AREF.

Parámetros

tipo: El tipo de referencia que se desea usar (DEFAULT, INTERNAL, or EXTERNAL).

Devuelve.

Nada.

Precaución

Es recomendable que cuando se use la referencia de tensión externa se conecte al pin AREF usando una resistencia de 5K. Esto evitará posibles daños internos en el ATmega si se la configuración de la referencia analógica es incompatible con el montaje físico que se ha llevado a cabo. Tenga en cuenta que esa resistencia afectará la tensión que se use como tensión de referencia ya que el pin AREF posee una resistencia interna de 32K. Ambas resistencias forman un divisor de tensión, por lo tanto, si por ejemplo se conecta una tensión de 2.5V con la resistencia de 5K la tensión que se utilice como tensión de referencia será de 2.2V ya que esa será la tensión que caiga en el pin AREF debido al divisor de tensión al que se ha hecho referencia.

El conectar la tensión de referencia externa a través de una resistencia permite pasar mediante software de usar tensión de referencia interna a una tensión de referencia externa sin que la configuración física del hardware nos afecte la configuración actual del conversor A/D.

Uso del pin AREF

La tensión aplicada en el pin AREF será la que haga que el conversor A/D de su máxima lectura (1023) cuando lea una tensión igual a la aplicada en ese pin. Tensión por debajo de esa tensión conectada a AREF será escalada proporcionalmente, así cuando se usa la tensión de referencia por defecto (DEFAULT) el valor que nos devuelve una tensión de 2.5V en una entrada analógica será 512.

La configuración por defecto del Arduino es la de no tener nada conectado de forma externa al pin AREF (El pin 21 del chip ATmega). En este caso la configuración de la tensión de referencia sera DEFAULT lo cual conecta AVCC(Alimentación positiva +5V) de forma interna al pin AREF. Este pin es un pin de baja impedancia (mucha corriente) por lo que si usando la configuración DEFAULT de la tensión de referencia se conecta otra tensión que no sea la que posee AVCC, podria dañar el chip ATmega.

El pin AREF también puede conectarse de forma interna a una fuente de referencia de 1.1 voltios (o 2.54 en los ATmega8) usando el comando analogReference(INTERNAL).Con esta configuración las tensiones aplicada a los pines analógicos que sean iguales a la tensión de referencia interna o superior nos devolverán 1023 cuando se lleva a cabo su lectura con la función analogRead(). Tensiones más bajas devolverán valores proporcionales, por ejemplo, si tenemos una tensión de 0.55 voltios en el pin analógico, nos devolverá 512.

La conexión entre la fuente de 1.1 voltios y el pin AREF es de muy alta impedancia (baja corriente), por lo que la lectura de la tensión de 1.1 voltios solo se podrá hacer con un multímetro que tenga alta impedancia de entrada. Si se aplicase por error una tensión de referencia externa en el pin AREF mientras se está usando la configuración INTERNAL para la tensión de referencia, no dañará el chip pero hará que la tensión de referencia sea la externa y no la de 1.1 voltios de la fuente interna. Aún así es recomendable que cualquier tensión externa que se conecte al pin AREF se haga a través de una resistencia de 5K para evitar el problema mencionado arriba.

La correcta confiuguración del software cuando se utiliza una tensión de referencia externa se hace mediante la función analogReference(EXTERNAL). Eso desconectará ambas tensión de referencia internas del pin AREF y por tanto será la externa la cual govierne la tensión máxima leída por el ADC.

analogWrite()

Descripción

Escribe un valor analógico (PWM) en un pin. Puede ser usado para controlar la luminosidad de un LED o la velocidad de un motor. Después de llamar a la función analogWrite(), el pin generará una onda cuadrada estable con el ciclo de trabajo especificado hasta que se vuelva a llamar a la función analogWrite() (o una llamada a las funciones digitalRead() o digitalWrite() en el mismo pin). La frecuencia de la señal PWM sera de aproximadamente 490 Hz.

En la mayoría de las placas Arduino (aquellas con el ATmega168 o ATmega328), se podrá generar señales PWM en los pines 3, 5, 6, 9, 10, y 11. En la placa Arduino Mega, se puede llevar a cabo con los pines desde el 2 hasta el pin 13. Las placas Arduino más antiguas que posean el chip ATmega8 solo podrán usar la función analogWrite() con los pines 9, 10 y 11. No hace faltar configurar el pin como salida para poder usar la función analogWrite().

La función analogWrite no tienen ninguna relación con los pines de entrada analógicos ni con la función analogRead.

Sintaxis

analogWrite(pin, valor)

Parámetros

pin: Es el pin en el cual se quiere generar la señal PWM.

valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado) y 255 (siempre encendido).

Devuelve

Nada

Notas y problemas conocidos.

Las señales PWM generadas en los pines 5 y 6 poseerán ciclos de trabajo superiores a lo esperado. Esto es así por que para esos dos pines se utiliza el mismo temporizador que se utiliza en las funciones millis() y delay(). Este efecto se notará mucho más en ciclos de trabajo bajos (por ejemplo de 0 a 10) y puede ser que aunque configuremos esos pines con una señal de ciclo de trabajo cero no llegue a ser verdaderamente 0.

Ejemplo

Produce una señal donde conectamos el LED, cuyo ciclo de trabajo es proporcional a la tensión leída en el potenciómetro.

 
int ledPin = 9;      // LED conectado al pin digital 9
int analogPin = 3;   // potenciómetro conectado al pin 3
int val = 0;         // variable en el que se almacena el dato leído

void setup()
{
  pinMode(ledPin, OUTPUT);   // sets the pin as output
}

void loop()
{
  val = analogRead(analogPin);   // lee la tensión en el pin
  analogWrite(ledPin, val / 4);  // los valores de analogRead van desde 0 a 1023 y 
                                 //los valores de analogWrite values van desde 0 a 255, por eso ajustamos  
                                 //el ciclo de trabajo a el valor leído dividido por 4.
}

Véase también

Página principal Referencia

Correcciones, sugerencias, y nueva documentación deberán ser publicadas en el Foro (castellano) o en el Foro (inglés).

El texto de la referencia de Arduino está publicado bajo la licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0. Los ejemplos de código de la referencia están liberados al dominio público.

Share