Tabla de contenido
La lectura de valores digitales es una operación fundamental en las aplicaciones con microcontroladores, ya que permite interactuar con el mundo exterior. Los valores digitales se pueden leer desde sensores, interruptores, botones y otros dispositivos electrónicos, y se pueden utilizar para controlar luces, motores, relés y otros componentes. Para un correcto funcionamiento, es crucial configurar adecuadamente los pines de entrada y emplear resistencias pull-up o pull-down.
La lectura de valores digitales es un concepto fundamental en el ámbito de la electrónica y la programación. Se refiere a la medición de un estado binario en un sistema electrónico. Un estado binario es aquel que puede tener solo dos valores posibles, como encendido/apagado, verdadero/falso, alto/bajo, etc.
En el contexto de los microcontroladores, la lectura de valores digitales es la medición del estado binario de los pines de entrada/salida digitales. Los pines digitales se pueden configurar para actuar como entradas o salidas y pueden tener solo dos valores posibles: HIGH (1) o LOW (0).
Los botones (también conocidos como pulsadores o interruptores) se pueden leer mediante la configuración de una entrada digital. Sin embargo, para que la lectura sea precisa y fiable, es importante utilizar resistencias de pull-up o pull-down para evitar que la entrada flote en un estado indeterminado.
En los circuitos lógicos TTL (Transistor-Transistor Logic), los valores lógicos 0 y 1 se determinan según los niveles de tensión de entrada:
Voltaje de Entrada (Vin) | Nivel Lógico | Definición |
---|---|---|
0V < 0.8V | 0 | Voltaje de entrada bajo (0) |
0.8V ≤ Vin ≤ 2.0V | Indeterminado (?) | Zona de transición (ambigua) |
Vin > 2.8V | 1 | Voltaje de entrada alto (1) |
En esta configuración, se conecta una resistencia entre el pin de entrada digital y GND. El botón se conecta entre el pin y Vcc (+5V). Cuando se presiona el botón, el pin de entrada se conecta a Vcc, y se lee como HIGH (1). Cuando no se presiona, la resistencia pull-down conecta el pin a GND, leyéndose como LOW (0).
Push button | MCU | Voltage |
---|---|---|
0 (sin presionar) | LOW (0) | 0V |
1 (presionado) | HIGH (1) | +5V |
La siguiente configuración presenta como conectar un botón utilizando un LED para observar si el botón se encuentra presionado o no
$$ Vsource = Vled + Vres $$
$$ Punto de lectura = Vres - Vled $$
$$ Vres - Vled < 0.8V = LOW $$
$$ 0.8V ≤ Vres - Vled ≤ 2.8V < 0.8V = Desconocido $$
$$ Vres - Vled > 2.8V = HIGH $$
En esta configuración, se conecta una resistencia de valor alto entre el pin de entrada digital y Vcc.
El botón se conecta entre el pin de entrada digital y GND (tierra). Cuando se presiona el botón, se cierra el circuito y se establece una conexión a tierra, lo que hace que el pin de entrada digital se lea como un valor lógico 0. Cuando el botón no se presiona, la resistencia de pull-up mantiene el pin de entrada digital en un estado de alta impedancia, lo que hace que el pin se lea como un valor lógico 1.
Push button | MCU | Voltaje |
---|---|---|
0 (sin presionar) | HIGH (1) | +5V |
1 (presionado) | LOW (0) | 0V |
La configuración del circuito de RESET en microcontroladores es crítica para garantizar un reinicio limpio del sistema. Se recomienda el uso de un capacitor de desacoplo y una resistencia pull-up adecuada para este propósito. Puedes consultar más detalles en la Nota de Aplicación de Atmel sobre EMC.
Algunos microcontroladores permiten habilitar resistencias pull-up internas mediante software. Estas resistencias internas son de valor elevado (20kΩ a 50kΩ) y se activan para mantener el pin en HIGH (1) cuando no hay una conexión física a GND.
Push button | Voltaje | MCU |
---|---|---|
0 (sin presionar) | +5V | HIGH (1) |
1 (presionado) | 0V | LOW (0) |
<aside> ⚠️ Es importante tener en cuenta que las resistencias de pull-up internas pueden ser menos precisas y menos potentes que las resistencias de pull-up externas, por lo que en algunos casos críticos puede ser necesario utilizar resistencias de pull-up externas para garantizar una lectura fiable de los botones.
</aside>
Los puertos de entradas y salida (I/O) son la interfaz entre el bus de datos interno y los (las terminales) pines asignados a estas funciones en el microcontrolador (MCU), las entradas y salidas se mantienen en rangos de nivel de voltaje TTL
LOW: indica que el estado está en nivel bajo de acuerdo a los niveles TTL esta entre 0V - 0.8V de tensión, es un “0 lógico”
HIGH: indica que el estado está en nivel alto de acuerdo a los niveles TTL esta entre 2.8V - 5V de tensión, es un “1 lógico”
El puerto paralelo permite el intercambio de datos en múltiples pines simultáneamente. Las configuraciones pull-down o pull-up aseguran una correcta lectura de los estados lógicos.
Conexión de entradas con resistencias Pull - DOWN
DDRB = 0xFF; // Configura PORTB como salida
DDRD = 0x00; // Configura PORTD como entrada
PORTB = PIND; // Copia el valor de PIND en PORTB
Conexión de entradas con resistencias Pull - UP
DDRB = 0xFF; // Configura PORTB como salida
DDRD = 0x00; // Configura PORTD como entrada
PORTB = ~PIND; // Copia el valor negado de PIND en PORTB