Entradas y Salidas Analógicas y Digitales

El propósito de este documento es explicar de la manera más sencilla posible los conceptos de entradas y salidas analógicas y digitales, en cuanto a microcontroladores se refiere. Lo primero que haremos será definir los conceptos principales.

Conceptos Importantes

  • Microcontrolador

Según la Wikipedia:

Un microcontrolador es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento (CPU), memoria y periféricos de entrada/salida.

Un ejemplo clásico de un microcontrolador, es el ATmega328P integrado en el modelo Arduino UNO. Sin embargo, el microcontrolador no es específicamente todo el conjunto que se encuentra en la placa azul cuando nos hablan de Arduino.

Sin título-1

Ese chip (o circuito integrado) que hemos enmarcado en color rojo es el microcontrolador. El resto de la placa que forma el Arduino contiene los componentes necesarios para que el microcontrolador funcione, así como el hardware necesario para que el usuario pueda conectar el Arduino por USB a la computadora y pueda programar instrucciones que después serán bajadas al chip, lo cual coincide con la definición de “circuito integrado programable”.

Si desea usted conocer un poco más sobre este tema, recomiendo revisar el artículo de Gustavo Circelli:

Sin duda, un excelente aporte.

 

  • Entrada/Salida

Los microconroladores poseen una serie de terminales (también llamados pines o patas) que funcionan como entradas y salidas de señales analógicas y/o digitales.

Para comprender el concepto de entradas y salidas podemos pensar en señales de voltaje. Una entrada es un terminal que permite que se le aplique una señal de voltaje, lo cual le permite al microcontrolador interpretar que algo está sucediendo y que se debe comportar de una forma determinada. Veamos un ejemplo:

Sin título-2
Diagrama de conexión de un interruptor sencillo

En este diagrama podemos observar un sencillo circuito con un interruptor y una resistencia. El TP es un Test Point (punto de prueba) que nos permite medir el voltaje en el punto donde ha sido colocado. Cuando el interruptor está abierto, el voltaje registrado es 0 voltios. Cuando se presiona el botón se cierra el interruptor y el voltaje alcanza 5 voltios. Si donde colocamos el Test Point sacamos una conexión hacia una entrada del microcontrolador, al presionar el botón éste registrará los 5 voltios y podrá interpretar que el botón ha sido presionado. Entonces, por medio de la programación adecuada, se ejecutarán las acciones que el programador haya establecido.

Es probable que alguna de estas acciones tenga que ver con una salida. Las salidas son terminales que entregan señales de voltaje. Pensemos en un LED conectado a una salida de un Arduino. Veamos un ejemplo:


Como vemos, el LED se enciende durante un segundo, se apaga por un segundo y nuevamente vuelve a encenderse. Es el clásico ejemplo Blink de Arduino. Esto es posible al implementar una salida del microcontrolador, donde el terminal ha sido programado para que entregue una señal durante un segundo y luego deje de entregar esa señal durante un segundo. La programación se repite cíclicamente, permitiendo que la salida entregue la señal de forma alternada con periodos donde no se entrega voltaje al LED.

En resumen, las entradas permiten al microcontrolador percibir señales e interpretar fenómenos a partir de ellas. Las salidas le permiten al microcontrolador interactuar con el mundo real a través de los circuitos electrónicos, al poder entregar una señal de voltaje.

  • Señales analógicas y digitales

Sin título-5

Las señales analógicas y digitales son dos mundos completamente distintos, pero que a su vez están estrechamente relacionados. Pensemos, por ejemplo, en un termómetro. Si tenemos termómetros, uno analógico (de aquellos con mercurio en su interior) y uno digital, ambos cumplen con la misma tarea de medir la temperatura. Sin embargo, la metodología que utilizan es completamente distinta, así como la forma como presentan los resultados de las mediciones.

Sin título-4

El termómetro analógico nos muestra la temperatura en base al nivel que registra el mercurio dentro de un tubo de vidrio, donde la temperatura dilata o comprime el mercurio, lo que le permite aumentar o disminuir su volumen. A mayor volumen, mayor temperatura. Se ha colocado convenientemente una escala junto al tubo donde se encuentra el mercurio, lo cual permite que el usuario pueda cuantificar la temperatura en grados.

El termómetro digital también nos da la temperatura en celcius, pero utilizando un procedimiento completamente distinto al del termómetro analógico. Los termómetros digitales utilizan semiconductores, cuyas propiedades varían en función de la temperatura. A través de un proceso llamado muestreo se logra determinar la temperatura, la cual es proyectada al usuario a través de una pantalla.

De forma similar, los microcontroladores pueden recibir o entregar señales analógicas o digitales. Para explicar mejor estos conceptos, utilizaré como referencia dos sensores de temperatura: el LM335 (analógico) y el DHT22 (digital).

Las señales analógicas son aquellas donde el voltaje varía en función del valor de la señal. Por ejemplo, el sensor LM335 es un sensor analógico. Esto quiere decir que podremos leer la temperatura que este registra si medimos el voltaje que está entregando.

El sensor tiene 3 patas, una para la alimentación de 5 voltios, una para el GND y otra para entregar la data. En el terminal de la data es donde podremos medir un voltaje que variará desde 0 hasta 5 voltios, dependiendo de la temperatura. Según la hoja de datos, la resolución del LM335 es de 10 milivoltios por cada grado Kelvin. Esto quiere decir que si tenemos 300 K de temperatura, el sensor debe entregar 3 voltios. Si subimos a 500 K, entonces la salida será de 5 voltios.

De la misma forma como el nivel de mercurio representa la temperatura en el termómetro analógico, el nivel de voltaje representa la temperatura en el sensor analógico. Este es el principio de funcionamiento de la transmisión por radio, la televisión analógica y muchas otras tecnologías utilizadas hoy en día.

En el caso de la transmisión por radio se utilizan ondas de voltaje que pueden variar su amplitud (AM – Amplitud modulada) o su frecuencia (FM – Frecuencia Modulada).

Sin título-6

Es decir, en las señales analógicas es relevante la amplitud y la frecuencia. En el caso del sensor LM335, la señal de salida del sensor es de corriente directa, por lo que no posee frecuencia. En dichos casos solo se toma en cuenta la amplitud. Cuando se habla de radiofrecuencia, las señales son alternas (ondas sinusoidales), por lo que es necesario tomar en cuenta tanto la amplitud como la frecuencia.

ac vs dc
Señales de corriente directa (izquierda) y corriente alterna (derecha)

Las señales digitales pueden tener 2 estados bien definidos en un momento dado: HIGH y LOW, es decir, encendido o apagado. Cuando se trabaja con señales digitales no importa cuanto voltaje se esté aplicando, el microcontrolador solamente distingue 2 estados, ya sea encendido o apagado.

Es tal como pudimos observar en la figura del diagrama de conexión de un interruptor sencillo. Al presionar el botón obtenemos un HIGH y al soltarlo obtenemos un LOW (0 voltios = LOW; 5 voltios = HIGH). Las señales digitales están compuestas de secuencias de pulsos HIGH y LOW. Cuando tenemos una serie de pulsos HIGH y LOW simultáneos logramos transmitir información. Los pulsos HIGH y LOW son traducidos a 1 y 0, lo cual permite utilizar lenguaje binario, que es el lenguaje de las máquinas o computadoras.

Veamos un ejemplo de una señal digital:

entradas y salids analogicas y digitales

En este diagrama vemos un tren de pulsos propio de una señal digital. Se establece que el pulso debe durar determinada cantidad de tiempo (normalmente unos cuantos microsegundos). Vamos a interpretar esta señal:

  • Cuando tenemos un pulso bajo, estamos recibiendo un “0”.
  • Un pulso alto representa un “1”.
  • Un pulso bajo que dure más del tiempo establecido para cada intervalo es considerado como una repetición de pulsos bajos, por lo que se cuentan dos ceros (“00”),
  • Luego hay un pulso alto que dura 2 intervalos, por lo que se consideran dos unos (“11”).
  • Se produce un pulso bajo que dura 3 intérvalos (“000”) y luego un pulso alto de dos intervalos (“11”).

Hemos recibido 11 “bits”. Estos 11 bits forman el número 01001100011, el cual es un número binario. Podemos transformar este número a un valor decimal: 01001100011 equivale a 611 en decimal (ver calculadora on-line de binario a decimal).

Las señales digitales están basadas en secuencias de pulsos a alta velocidad que permiten la comunicación entre dos o más dispositivos. Son el principio básico de las computadoras tal como las conocemos hoy (incluyendo celulares, tablets, etc). La transmisión de información por Internet se da a través de secuencias de unos y ceros.

Los datos viajan por paquetes. Por ejemplo, si la gráfica del tren de pulsos se extendiera necesitaríamos establecer el tamaño de los paquetes de datos. Si recibimos 11 bits y el tamaño del paquete es de 11 bits, entonces el próximo pulso formaría parte de un nuevo paquete. Sin embargo, si el paquete fuese de 4 bits, tendríamos 2 paquetes completos y un tercer paquete incompleto (en vez de 01001100011 sería 0100 1100 011; en vez de 611 tendríamos 4-12-paquete incompleto).

Existe protocolos de comunicación en donde a información se transmite ya sea desde una línea o varias. Tales son los casos de UART SPI, I2C, etc.

En cuando al sensor DHT22 la hoja de datos nos muestra el procedimiento a seguir para la obtención de las lecturas de temperatura:

Entradas y salidas analógicas y digitales

Como vemos, se trata de un tren de pulsos. La línea negra representa la señal enviada por el microcontrolador, mientras que la línea gris es la respuesta enviada por el sensor al microcontrolador. De esta forma, en una sola línea se transmite y recibe información.

Si se revisa más adelante en la hoja de datos se encuentran referencias a los tiempos que deben durar los pulsos para ser considerados altos o bajos.

dht22 digital signal

Vemos que los tiempos son de apenas unos cuantos microsegundos. Esta secuencia de pulsos es la que le permite al microcontrolador solicitar información al sensor y que éste pueda responder.

Consideramos que la comparación entre el LM335 y el DHT22 representa muy bien los conceptos de señales analógicas y digitales: para leer el sensor LM335 (analógico) basta con medir el voltaje a la salida del mismo y dividirlo entre 10mV para obtener la cantidad de grados Kelvin; para leer el sensor DHT22 (digital) es necesario enviar una secuencia de pulsos altos y bajos con los cuales el sensor responderá con otra secuencia de pulsos, los cuales serán interpretados a través de lenguaje binario por el microcontrolador. Al usar señales analógicas estamos utilizando niveles de voltaje; al utilizar señales digitales utilizamos secuencias de unos y ceros.

Entradas y Salidas Analógicas y Digitales

  • Entrada Analógica

Los microcontroladores poseen la capacidad de leer niveles de voltaje de tipo TTL. Por ejemplo, un Arduino común y corriente podrá leer voltajes entre 0 y 5 voltios por defecto (no se debe superar los 5 voltios). Para ello posee una serie de pines llamados Entradas Analógicas.

FR2B8NPG0AMJ75C.MEDIUM

El Arduino UNO posee 6 entradas analógicas (A0-A5), mientras que otros modelos como el NANO (8 entradas) o el MEGA (16 entradas) poseen puertos adicionales, aunque todos poseen la misma limitante: no pueden leer voltajes superiores a 5 voltios. Repetimos: NO SE PUEDEN APLICAR VOLTAJES SUPERIORES A 5 VOLTIOS.

Para leer los niveles de voltaje, los microcontroladores utilizan un circuito integrado llamado Convertidor Analógico-Digital, el cual utiliza un proceso llamado muestreo. En Panama Hitek el amigo Gustavo Circelli presentó para nosotros un aporte sobre este tema:

Los convertidores Analógico-Digital poseen una característica llamada resolución. Los modelos de Arduino poseen una resolución de 10 bits, lo cual significa que, dependiendo de la referencia (normalmente de 0 a 5 voltios), el circuito “descompone” el voltaje en la entrada en 1024 partes iguales (10 bits, 2^10 es 1024).

Si tuviésemos un convertidor de mayor resolución, digamos 12 bits, entonces el voltaje se dividiría en 4096 partes iguales (2 elevado a la 12 es 4096). Entonces a la salida del convertidor, el voltaje leído representará alguno de los valores binario entre 0 y 4095. Cuando se tienen 0 voltios, el convertidor registrará 0. Si se tienen 5 voltios, el convertidor registrará 1023 si la resolución es de 10 bits y 4095 si la resolución es de 12 bits.

Este número que nos devuelve el convertidor es proporcional al voltaje leído en la entrada del convertidor. Todos y cada uno de los pines analógicos del Arduino pueden leer diferentes niveles de voltaje, siempre y cuando no superen los 5 voltios. Al ser 10 bits la resolución máxima del Arduino, los niveles mínimos de voltaje que podrá registrar es de 5/1024 que es igual a 0,0048828125 voltios. Es decir, el Arduino no podrá registrar variaciones de voltaje inferiores a 0,0048828125 voltios.

Para comprender esto, veamos un ejemplo:

Entradas y salidas analógicas y digitales

Un circuito sencillo, con una resistencia fija y una resistencia variable. Al modificar el valor de la resistencia variable se modifica el voltaje donde colocamos el Test Point.

Si conectamos el punto donde está el Test Point a 5 de las entradas analógicas del Arduino y le pedimos que nos imprima los valores, obtendremos el siguiente resultado:

  • A1: 512
  • A2: 586
  • A3: 682
  • A4: 819
  • A5: 1023

¿De donde salieron estos valores? Recordemos que el microcontrolador divide el voltaje entre 0 y 5 voltios en 1024 partes. Cuando vemos el número 512, esto significa que el Arduino está registrando en su entrada 512 partes de las 1024 en que dividió el voltaje de 5 voltios. Podemos transformar estas lecturas en voltajes si los multiplicamos los valores por la fracción 5/1024. Así, obtenemos los valores 2.5, 2.86, 3.33, 4 y 5, los cuales son los voltajes en los divisores de tensión. Así, el valor de 1023 corresponde a 5 voltios debido a que en la entrada el convertidor está registrando las 1023 partes en las cuales se ha dividido el voltaje, es decir, la escala completa.

Para mayor información sobre las lecturas analógicas en Arduino, los invitamos a revisar el aporte de Ricardo Montenegro sobre este tema:

En esta entrega se llevan las lecturas analógicas a la práctica. Muy recomendable para principiantes.

  • Salida Analógica

Las salidas analógicas son señales de voltaje generadas por el microcontrolador. Por ejemplo, si el usuario desea que un pin en específico entregue 3 voltios, lo podrá lograr. Si se desea que dicho voltaje suba o baje, esto será posible con la programación adecuada. Para ello se utiliza un circuito llamado Convertidor Digital Analógico (DAC).

Este dispositivo utiliza sumadores de voltaje y trabajan según una resolución. Un DAC con una resolución de 10 bits y un voltaje máximo de 5 voltios podrá producir voltajes en aumentos de 5/1024 voltios, es decir, 0.0048828125 voltios.

Si deseamos que el voltaje en la salida sea de 0.006 voltios, no lo podremos lograr, ya que el DAC solo puede producir 0,0048828125 volts, luego 0,009765625, luego 0,0146484375 (es decir, 0.00488 x 2, luego x3, y así sucesivamente).

Si deseamos que nuestro circuito genere 0.006 voltios a la salida necesitaremos un DAC de mayor resolución, probablemente de 12 o 14 bits, aunque estos serían dispositivos mucho más caros que un DAC de 10 bits.

Los Arduinos no incluyen un DAC dentro de los circuitos que forman la placa, por lo que no son capaces de producir salidas analógicas. Sin embargo, dentro del lenguaje Arduino podemos encontrar la función analogWrite. Esta función fue diseñada para que el Arduino produzca una salida de PWM, lo cual no es una modulación de amplitud de señal, sino modulación por ancho de pulsos, lo cual no es considerado como una señal analógica, sino como una señal digital. Arduino no es capaz de entregar voltajes variables de forma nativa.

Para mayor información sobre conversión Digital-Analógica recomiendo este post de Kiara Navarro:

Si desea conocer un poco más sobre PWM, recomiendo este post:

El PWM es utilizado para disminuir la intensidad luminosa de los LEDs, o la velocidad de los motores.

  • Entrada Digital

Entradas y salidas analógicas y digitales

Las entradas digitales permiten recibir señales de voltaje. Por ejemplo, en el diagrama de conexión de un interruptor sencillo si remplazamos el TP por una conexión a una entrada digital, cada vez que presionemos el botón la entrada pasará a HIGH; al soltar el interruptor la entrada pasará a LOW.

Un microcontrolador reconocerá un HIGH cuando se aplique más de 3 voltios (en los microcontroladores que operan a 5 voltios, como la mayoría de los Arduinos) a un terminal configurado como entrada digital; de lo contrario, el microcontrolador reconocerá el estado lógico como LOW.

Como ya hemos explicado, las entradas digitales no reconocen niveles de voltaje como tal, simplemente aceptan valores HIGH o LOW. El  umbral entre ambos estados será un voltaje aproximadamente 60% del voltaje de operación (los 3 voltios) del microcontrolador.

Es importante recordar que no podemos sobrepasar los límites de voltaje permitidos por un determinado modelo de microcontolador. En el caso de Arduino, si se aplica un voltaje mayor a 5 voltios en una entrada digital, el Arduino simplemente se quemará. Lo mismo aplica para voltajes negativos, por lo que debemos asegurar que el voltaje aplicado a una entrada digital se encuentre entre 0 y 5 voltios.

  • Salida Digital

Las salidas digitales son las terminales de un microcontrolador que permiten entregar un voltaje a un carga. Normalmente, las terminales de salida son las mismas terminales de entrada, con la diferencia de que dentro de la programación del microcontrolador se debe establecer la función que cumplirá determinado terminal en un momento dado.

Por ejemplo, para utilizar el sensor DHT22 se necesita que un mismo terminal funcione como salida y luego como entrada, tal como se puede observar en el diagrama donde se muestra el tren de pulsos para la lectura de datos.

Los terminales de salida han sido diseñados para entregar señales de voltaje, no para suplir corriente a un circuito. En un microcontrolador como Arduino, el máximo de corriente que puede entregar un terminal de salida es de aproximadamente 40 mA, lo cual es muy poco, pero más que suficiente para, por ejemplo, encender un LED o saturar un transistor BJT.

Esto es un criterio sumamente importante: al utilizar microcontroladores debemos pensar que las cargas que vamos a manejar no deben superar los 5 voltios DC de voltaje operativo y no deben consumir más de 40 mA. Sin embargo, esto no significa que Arduino no sea capaz de manejar cargas con requerimientos de voltaje, corriente o potencia superiores a los límites establecidos como máximos para un microcontrolador.

En Panama Hitek hemos escrito varias veces sobre cómo controlar cargas en voltajes superiores a los 5 voltios:

También es posible manejar cargas de corriente alterna, en voltajes tan altos como 120VAC o superiores:

Las función principal de las salidas digitales es entregar una señal de control que le dará funcionalidad a un circuito electrónico que será el encargado de cumplir con las funciones que el usuario requiera. Los microcontroladores no han sido diseñados para alimentar cargas sino para controlar cargas, lo cual no exige el manejo de altos voltajes o altas corrientes. Con la electrónica adecuada, un Arduino común y corriente puede cumplir con las funciones de un PLC o cualquier dispositivo de control de avanzada.

Los conceptos descritos en esta entrega son sumamente importantes para la comprensión del funcionamiento de cualquier tipo de microcontrolador o microprocesador. Esperamos que lo que hemos tratado de explicar haya sido comprendido. Cualquier duda, por favor no dude en escribirnos.

¿Te gustó? ¡Comparte!Share on LinkedInShare on FacebookTweet about this on TwitterEmail this to someoneShare on RedditShare on TumblrShare on Google+Pin on PinterestBuffer this page