Compuertas lógicas en Arduino

Los sistemas digitales son aquellos que funcionan con valores discretos; estos, pueden representarse de diversas formas e inclusive, tener mas de un estado. En lo que nos corresponde, trabajaremos con sistemas binarios, donde solo pueden presentarse dos estados, Alto – bajo, 5V – 0V, True – False. Para trabajar con variables este tipo variables, utilizamos el álgebra de Boole:

En Arduino, disponemos de los siguientes operadores lógicos:
  • &&   Operador lógico AND
  • ||        Operador lógico OR
  • !        Operador lógico NOT
  • &      Operador de referencia AND
  • |        Operador de referencia OR 
  • ^       Operador Lógico XOR
  • ~       Operador negador bit a bit



En el siguiente proyecto vamos a simular el comportamiento de las compuertas AND, OR, XOR y NOT empleando el arduino.

Para realizar esta práctica necesitaremos una protoboard, un LED y un dipswitch. Con la ayuda de la sentencia “if – else”, utilizando pines de entrada con PULLUP habilitado (INPUT_PULLUP) y tomando como referencia el montaje de la figura que aparece al final, se implementa un programa en Arduino que cumple con los siguientes requerimientos:

• Utilizar dos (2) Switch para la selección de la función lógica deseada (NAND, OR , NOT y XOR).
• Las entradas A y B, de la función lógica seleccionada (en el caso de la operación NOT, solo se tendrá en cuenta una de las entradas) se harán a través de dos (2) Switch.
• La salida se desplegara mediante un LED, donde un TRUE en la salida de la operación lógica seleccionada, lo representara el encendido del LED y, cuando la salida es FALSE, el LED estará apagado.

Tablas de Verdad

ENTRADASALIDA
A (A2)B (A3)NANDNORXORNOT (A)NOT (B)
0011011
0110110
1010101
1100000

Para las entradas A y B se utilizaron como entrada los pines A2 y A3, respectivamente.

Para seleccionar el tipo de compuerta a simular se utilizaron los pines A0 y A1 con la siguiente configuración:

A (A0)  B (A1)COMPUERTA
00NAND
01NOR
10NOT
11XOR


Montaje


Código


 /*
  * Diseñado por Juan David Gallego García y Juan Esteban Pulgarín Arango
  * El programa puede ser descargado y modificado
  * 
  * LOGICA COMBINACIONAL PARA NAND NOR NOT y XOR
   * Pines para seleccionar tipo de compuerta
   * A0(a) A1(b)
   * 0  0   NAND 
   * 0  1   NOR
   * 1  0   NOT
   * 1  1   XOR
   *
   *¨Pines para operaciones lógicas
   * A2(c) A3(d) NAND  NOR NOT(A2) XOR
   * 0      0     1     1    1      0
   * 0      1     1     0    1      1
   * 1      0     1     0    0      1
   * 1      1     0     0    0      0
  */

void setup() {
  /*Salida para la combinación lógica*/
  pinMode(2,OUTPUT); //Salida del led
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);
  digitalWrite(2,HIGH); //Se configura led como apagado 
}

void loop() {
  bool a = !digitalRead(A0); 
  bool b = !digitalRead(A1);
  bool c = !digitalRead(A2);
  bool d = !digitalRead(A3); 
  if(!a&&!b){//Compuerta NAND
    if(!(c&&d)){
      digitalWrite(2,LOW);//Al menos una de las entradas c y d están en LOW, Prende led
    }else{
      digitalWrite(2,HIGH);//En caso de que las dos estén en HIGH, apaga el LED
    }  
  }else if(!a&&b){//Compuerta NOR
      if(!(c||d)){
      digitalWrite(2,LOW);//Entradas c y d están en LOW Prende led
    }else{
      digitalWrite(2,HIGH);//En caso de que al menos de las dos  estén en HIGH apaga el LED
    }  
  }else if(a&&!b){//Compuerta NOT
      if(!c){
      digitalWrite(2,LOW);//Entrada c está en LOW Prende led
    }else{
      digitalWrite(2,HIGH);//Entrada c está en HIGH Apaga led
    }  
  }else{//Compuerta XOR
    if(c^d){ 
        digitalWrite(2,LOW); //Cuando c y d son diferentes enciende led
      }else{
        digitalWrite(2,HIGH);  //Cuando c y d son iguales apaga led
      }
  }
}


DESCARGAR

Comentarios

Publicar un comentario

Entradas más populares de este blog

Manejo display 7 segmentos empleando Arduino

Lógica combinacional empleando Arduino y álgebra de Boole