Lab 5 Logicos Arduino

Lab 5 lógicos Compuertas lógicas en Arduino Los sistemas digitales son aquellos que funcionan con valores discretos; est

Views 62 Downloads 12 File size 113KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Lab 5 lógicos 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 ENTRADA

SALIDA

A B NAN NO XO (A2) (A3) D R R 0

0

1

1

0

NOT (A)

NOT (B)

1

1

0

1

1

0

1

1

0

1

0

1

0

1

0

1

1

1

0

0

0

0

0

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 B COMPUER (A0)   (A1) TA 0

0

NAND

0

1

NOR

1

0

NOT

1

1

XOR

Montaje

Código /*  *  * 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      }  }

}