Practica 2 - Sumador de dos bits


Objetivos
·       Entender la implementación de una función lógica involucrando diferentes tipos de compuertas digitales.
·       Reforzar el manejo de la plataforma PSoC 5 y el montaje de circuitos digitales.

Introducción
Un sumador completo, suma números binarios junto con las cantidades de acarreo. Un sumador completo de dos bits añade tres bits, a menudo escritos como A, B y Cin, donde A y B son los sumandos y Cin es el acarreo que proviene de la anterior etapa menos significativa. El sumador completo suele ser un componente de una cascada de sumadores, que suman 8, 16, 32, etc. números binarios de bits. El circuito produce una salida de dos bits, al igual que el semisumador denominadas acarreo de salida (Cout) y suma S.

Un sumador completo se puede implementar de maneras diferentes, tales como con un circuito a transistores o compuesto de otras puertas.


Materiales para la practica
• Protoboard
• Cables
• Diodos emisores de luz
• Resistencias de 220Ω, 330Ω y 4.7kΩ
• Dipswitch o pulsadores
• Tarjeta PSoC 5
• Computador con PSoC Creator
Descripción de la practica realizada
En la práctica realizada se implementó un sumador de dos bits, este tiene 4 bits de entrada el cual le dará la orden al PSoC usando la tabla de verdad para hallar los resultados de esta presionando unos pulsadores y este arroja los resultados
Se realizó la siguiente tabla de verdad teniendo en cuenta que (A=A1A0 y B = B1B0) S = S2S1S0

A1
A0
BI
B0
S2
S1
S0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
1
0
0
1
0
0
0
1
1
0
1
1
0
1
0
0
0
0
1
0
1
0
1
0
1
0
0
1
1
0
0
1
1
0
1
1
1
1
0
0
1
0
0
0
0
1
0
1
0
0
1
0
1
1
1
0
1
0
1
0
0
1
0
1
1
1
0
1
1
1
0
0
0
1
1
1
1
0
1
1
0
0
1
1
1
0
1
0
1
1
1
1
1
1
1
0

De igual manera basándonos en las operaciones lógicas se implementó el circuito lógico en el programa PSoC creator, creando un código funcional que se viera reflejado en la protoboard en los leds (Carris de salida) emitiendo una señal la cual será la respuesta a cada función lógica implementada por el Switch.



A continuación el código implentado.

#include "project.h"

uint8 fun(uint8  letra);


char var_rx;
uint8 ev_rx = 0;
uint8 ev_tim=0;
uint8 fun(uint8 letra);
uint8 arregloz []={0};
uint16 contador=0;
uint8 letra=0;
uint8 fun(uint8 rx_isr);
uint8 estado=0; 
uint8 P=0;
uint8 bloqueo=1;

CY_ISR(rx_isr)
{
    ev_rx = 1;    
    
    
}


CY_ISR(TIM_ISR)
{
    ev_tim = 1;
}


int main(void)
{
    CyGlobalIntEnable; /* Enable global interrupts. */ 
    //LCD_Char_1_DisplayOn();
      LCD_Char_1_Start();
      UART_1_Start();
      
     Tim_int_StartEx(TIM_ISR);
     isr_1_StartEx(rx_isr);
    
     Tiempo_Start();

    LCD_Char_1_Position(0,0); 
    LCD_Char_1_PrintString("Santiago y ");
    LCD_Char_1_Position(1,0); 
    LCD_Char_1_PrintString("Diego");   
    LCD_Char_1_Position (1,6);
    
    LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_0);
    
    LCD_Char_1_Position (1,7);
    LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_1);
    
    LCD_Char_1_Position (1,8);
    LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_2); 
    
    LCD_Char_1_Position (1,9);
    LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_3);
    LCD_Char_1_Position (1,10);
    LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_4); 
    CyDelay  (4000);
    
    LCD_Char_1_Position(0,0);
    LCD_Char_1_PrintString("                  ");
    LCD_Char_1_Position(1,0); 
    LCD_Char_1_PrintString("                  ");
   
    for(;;)
    {   
        if (Pin_Read()==1){
        estado=1;
            if(bloqueo==0)
            {
                LCD_Char_1_Position(1,0);
                LCD_Char_1_PrintString("Abierto             ");
                
            }else {
                LCD_Char_1_Position(1,0);
                LCD_Char_1_PrintString("                    ");
            }
        }
        else {
            estado =0; 
            if(bloqueo==0)
            {
                LCD_Char_1_Position(1,0);
                LCD_Char_1_PrintString("Cerrado            ");
                
            }else {
                LCD_Char_1_Position(1,0);
                LCD_Char_1_PrintString("                ");
            }
        }
        
        
        
        
        if(ev_rx == 1)
        {
            ev_rx = 0;
            var_rx=UART_1_GetChar();
            fun(var_rx);
        }
       
    }

    
   

} //Funciones 

uint8 fun(uint8 letra){
            
            
        UART_1_PutChar (arregloz[0]);
        
        arregloz[0]=letra;
        
        if (letra=='b'){
            
            bloqueo=1;
            
            
            LCD_Char_1_Position(0,0);
            LCD_Char_1_PrintString("Bloqueado      ");
            LCD_Char_1_Position(1,1);
            
            LCD_Char_1_PrintString("                        ");               
            
            
            
            
        }else {
            
            if (letra=='d'){
                bloqueo=0;
                LCD_Char_1_Position(0,0);
                LCD_Char_1_PrintString("Desbloqueado    ");
                LCD_Char_1_Position(1,0);
                LCD_Char_1_PrintString("                         ");
            }                 
        }
        return estado;           
                
    }
    

/* [] END OF FILE */


Montaje en el microcontrolador


Resultados y análisis de resultados
Como se puede observar en el video, se ingresan los bits que se van a sumar mediante los switchs, y en los LED’s se muestra el resultado de la respectiva suma. De esta manera, cumpliendo con los objetivos de la práctica.


Conclusiones
·       Operaciones como la factorización (factor común), se pueden aplicar a las funciones lógicas resultantes de la tabla de verdad.
·       Se entiende porque la compuerta XOR se considera prácticamente una primitiva, puesto que se usa mucho, como en el caso de esta práctica que mediante esta compuerta se pudo deducir considerablemente el largo de las ecuaciones que se ingresaron al programa.
+

A continuación se observa el funcionamiento.






Comentarios

Entradas populares de este blog

Practica 7 - Transistor en corte y saturación

Práctica 8 - Puente rectificador