Módulo EMP · Arduino Mega 2560

Práctica de Puertas Lógicas

Implementación de las principales funciones lógicas mediante Arduino Mega 2560. Se leen cuatro entradas digitales y se representa el resultado de cada puerta mediante un LED.

1. Objetivo de la práctica

El objetivo es comprobar el funcionamiento de las puertas AND, NAND, OR, NOR, XOR, XNOR y NOT. Los interruptores proporcionan los valores lógicos de entrada (0 o 1), y los LED muestran el resultado de cada operación.

Las entradas se conectan a los pines 28, 26, 24 y 22. Las salidas disponibles para los LED son los pines del 13 al 5.

2. Asignación de pines

Entradas

EntradaPin Arduino
A28
B26
C24
D22

Salidas LED

Puerta lógicaLED / pinOperación
AND13A · B
NAND12NOT (A · B)
OR11A + B
NOR10NOT (A + B)
XOR9A exclusivo OR B
XNOR8NOT (A XOR B)
NOT7NOT A
Reservada6Sin asignar en el esquema
Reservada5Sin asignar en el esquema

3. Funcionamiento de las puertas

4. Código de Arduino

El programa lee las cuatro entradas y calcula las siete funciones lógicas del esquema. Cada resultado se envía al LED correspondiente.

const int entradas[] = {28, 26, 24, 22}; // A, B, C, D
const int salidas[]  = {13, 12, 11, 10, 9, 8, 7, 6, 5};

bool A, B, C, D;

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(entradas[i], INPUT);
  }

  for (int i = 0; i < 9; i++) {
    pinMode(salidas[i], OUTPUT);
  }
}

void loop() {
  // Leer las entradas
  A = digitalRead(entradas[0]);
  B = digitalRead(entradas[1]);
  C = digitalRead(entradas[2]);
  D = digitalRead(entradas[3]);

  // Puertas lógicas de dos entradas (A y B)
  bool resultadoAND  = A && B;
  bool resultadoNAND = !(A && B);
  bool resultadoOR   = A || B;
  bool resultadoNOR  = !(A || B);
  bool resultadoXOR  = A ^ B;
  bool resultadoXNOR = !(A ^ B);

  // Puerta NOT: invierte la entrada A
  bool resultadoNOT = !A;

  // Mostrar los resultados en los LED
  digitalWrite(13, resultadoAND);
  digitalWrite(12, resultadoNAND);
  digitalWrite(11, resultadoOR);
  digitalWrite(10, resultadoNOR);
  digitalWrite(9, resultadoXOR);
  digitalWrite(8, resultadoXNOR);
  digitalWrite(7, resultadoNOT);

  // Pines 6 y 5 reservados: apagados
  digitalWrite(6, LOW);
  digitalWrite(5, LOW);

  delay(50);
}

Este código supone que los interruptores entregan un nivel LOW o HIGH estable y que las entradas tienen una referencia definida. Si tus interruptores no incorporan resistencias pull-down o pull-up, habrá que adaptar la configuración para evitar entradas flotantes.

Archivo: puertas_logicas.ino

← Volver a EMP