Visualizador DEC y HEX con 74HC595: lógica digital aplicada con Arduino
Información, Proyectos, Noticias y más

Visualizador DEC y HEX con 74HC595: lógica digital aplicada con Arduino

Este proyecto implementa un visualizador binario–decimal–hexadecimal utilizando Arduino UNO, dos registros de desplazamiento 74HC595 en cascada y dos displays de 7 segmentos. El valor de entrada se define mediante un DIP-switch de 4 bits y puede visualizarse dinámicamente en decimal (00–15) o hexadecimal (00–0F).

🔍 ¿Qué hace este circuito?

  • Lee un valor binario de 4 bits (0–15) desde un DIP-switch usando INPUT_PULLUP.
  • Refleja cada bit en LEDs individuales para depuración visual.
  • Muestra el valor en dos displays de 7 segmentos controlados por registros 74HC595.
  • Permite cambiar en tiempo real entre modo DEC y modo HEX usando un DIP adicional.

🔧 Arquitectura del sistema

El sistema utiliza dos 74HC595 en cascada, lo que permite controlar 16 salidas digitales usando únicamente 3 pines del Arduino (DATA, CLOCK y LATCH). Cada registro controla un display completo de 7 segmentos.

Un detalle importante es que el display derecho es de ánodo común, por lo que sus segmentos deben activarse en nivel bajo. Esto se resuelve mediante una inversión lógica por software.

🧠 Lectura del DIP-switch (4 bits)

Cada switch está configurado como INPUT_PULLUP, por lo que ON = LOW = 1 lógico. El valor final se construye manualmente usando operaciones bit a bit.


byte readDip4() {
  byte b3 = (digitalRead(A0) == LOW) ? 1 : 0; // MSB
  byte b2 = (digitalRead(A1) == LOW) ? 1 : 0;
  byte b1 = (digitalRead(A2) == LOW) ? 1 : 0;
  byte b0 = (digitalRead(A3) == LOW) ? 1 : 0; // LSB
  return (b3<<3) | (b2<<2) | (b1<<1) | b0;
}

  

🔢 Conversión DEC / HEX

El modo de visualización se selecciona con un DIP adicional. Cuando está activo, el sistema muestra el valor en hexadecimal; de lo contrario, lo presenta en decimal con dos dígitos.


if (isHexMode()) {
  // HEX: 00..0F
  show2digits(SEG_HEX[0], SEG_HEX[v]);
} else {
  // DEC: 00..15
  byte tens  = v / 10;
  byte units = v % 10;
  show2digits(SEG_DEC[tens], SEG_DEC[units]);
}

  

⚡ Control de displays con 74HC595

La función show2digits() envía los datos seriales a los registros. El segundo display requiere inversión lógica debido a su tipo de conexión, lo que ilustra un caso real de hardware mixto.


void show2digits(byte left, byte right) {
  digitalWrite(latchDisplay, LOW);

  byte right_CA = right ^ 0x7F; // inversión para ánodo común

  shiftOut(dataDisplay, clockDisplay, MSBFIRST, right_CA);
  shiftOut(dataDisplay, clockDisplay, MSBFIRST, left);

  digitalWrite(latchDisplay, HIGH);
}

  

🎓 ¿Qué se aprende con este proyecto?

  • Uso práctico de registros de desplazamiento.
  • Conversión entre binario, decimal y hexadecimal.
  • Control eficiente de E/S con pocos pines.
  • Diferencias reales entre cátodo común y ánodo común.
  • Depuración visual mediante LEDs.

🚀 Ideas para extenderlo

  • Eliminar Arduino y reemplazar la lógica con compuertas 74HC.
  • Agregar multiplexado para más displays.
  • Mostrar valores firmados o BCD.
  • Convertirlo en un módulo educativo plug-and-play.

Código fuente: Link del proyecto en Tinkercad

No hay comentarios en este artículo.