Caja fuerte


Se desea realizar una caja fuerte que permita el ingresar un dato númerico de 4 números de 4 bits en un intervalo de BCD [0,9] Mediante espacios de almacenamiento universal se busca la correcta implementación del mismo. 
Se busca que mediante la tecla A del teclado matricial se pueda borrar el número anterior al ingresado previamente, mediante la tecla B se borren todos los datos y mediante la tecla D se compare los datos ingresados para la correcta implementación de la caja fuerte. 
Materiales :
  • Protoboard 
  • Cables para protoboard
  • Display de 4 - 7 segmentos 
  • Resistencias de 220Ω
  • Leds 
  • PSoC 5 Lp
  • Computador con PSoC Creator
  • Demux de 1 a 8 (integrado 74138)

Para optimizacion de espacio y tiempo, se decidió por utilizar un Display de 4 7 segmentos

Display 7 segmentos 4 digitos 0.36pulg
Fig 1. Display de 4 7 segmentos. 

A continuación se puede visualizar claramente las conexiones internas que posee el Display. 

Resultado de imagen para 7 segmentos 4
Figura 2. Conexiones internas del dispaku Display de 7 segmentos 

En este proyecto se utiliza de manera constante el Flip Flop de tipo de D, debido a que este  sigue a la entrada, haciendo transiciones que coinciden con las de la entrada. El término "D", significa dato; este "flip-flop" almacena el valor que está en la línea de datos. Se puede considerar como una celda básica de memoria.

Resultado de imagen para flip flop d
Figura 3. Flip Flop tipo de D. 

A continuación se anexa la estructura interna del flip flip tipo D para comprender mejor el funcionamiento del mismo.



Figura 4. Estructura interna del Flip Flop D

A continuación se visualiza la tabla de estados del Flip Flop D, la cual nos permite visualizar que se realizará el cambio de estado del Flip Flop D se realizará en el flanco de subida de la entrada de reloj. 
Cabe resaltar que en la figura 5. Se muestra la salida  Q, ya que generalmente este es el estado que se en la mayoría de dispositivos se mantiene, ya que la Q' no es más que el estado de salida negado.

Inicialmente, haciendo uso del registro de memoria universal, se construyó la siguiente tabla para controlar el desplazamiento de la información ingresada, teniendo en cuenta que para los valores de S1 y S2 respectivamente: memoria = 00, desplazamiento a la izquierda = 01, desplazamiento a la derecha = 10 y carga en paralelo es 11. Aplicando esto el resultado se observa en la figura 6.
Tabla 1: Tabla para el funcionamiento de los selectores de registro de desplazamiento universal según
la tecla pulsada

Para que una clave sea almacenada se debe utilizar una memoria que sea capaz de desplazar sus datos para poder almacenarlos en un orden especifico y borrarlos eventualmente, para esto aplicamos registros de desplazamiento conectados entre sí, organizando los datos según importancia (un registro almacena los datos más significativos en orden de cada número, el siguiente los siguientes en orden de importancia, etc), como podemos visualizar en las figuras 9, 11, 12 y 13.
Resultado de imagen para flip flop d tabla de verdad
Figura 5. Tabla de estado del Flip Flop F
Resultado de imagen para FLIP FLOP D
Figura 6: Lógica de la tabla 1 implementada en los selectores
Por otra parte, la maquina de estados se encarga de ver la secuencia que sigue el programa, comparando el número de contraseña ingresado con el guardado correcto de la contraseña, decidir si la puerta se abre o cierra y mantener esta decisión y finalmente qué memoria se estará viendo y editando según las condiciones que se estén cumpliendo. Vemos esta maquina de estados en las figuras 7, 8, 10 y 11.

Figura 7: Conexion entre la máquina de estados y el visualizador en 7 segmentos

Figura 8: Memoria para  funcionamiento de la puerta
Resultado de imagen para registro de desplazamiento universal
Figura 9: Muestra el esquema del registro de desplazamiento universal

Figura 10: Muestra las conexiones internas de la máquina de estados

Figura 11: Muestra el esquema de conexiones de salida del MUX hacia la visualización

Figura 12: Muestra el esquema de conexiones entre los registros de memoria de una memoria para 4 números
de 4 bits cada uno

Figura 13: Muestra el esquema en PSoC de un registro de desplazamiento universal
Por problemas de memoria, un nuevo comparador es requerido debido a que el comparador tipo GEL ocupaba un 45% de la PSoC, ya que el comparador GEL nos dice si el numero es mayor, menor o igual, pero solamente necesitamos saber si es igual o no, se creó uno con compuertas X-Nor (Figura 16) que compara solamente los bits que deben ser iguales entre sí, y compuertas and que nos dicen que se cumplen todas las condiciones, se creó un nuevo comparador que solo nos dice si son iguales las contraseñas o no.

Figura 14: Muestra las conexiones para la visualización dinámica
Para habilitar el cambio de contraseña se multiplexará de la memoria A a la memoria B (la memoria B contiene la contraseña correcta) se deben cumplir las condiciones:

  1. Puerta abierta, lo cual lo dice la salida de Door de la maquina de estados.
  2. Mantener el botón asterisco (*) presionado durante 3 segundos.
Cuando se cumplan ambas condiciones, el multiplexor de las figuras 10 y 11, mostrará en su salida la memoria B.
Por otra parte, para que se cumpla la condición 2, se puso el contador de la figura 15, el cual podemos observar que se activa solamente cuando se oprime el codigo del botón * y éste está siendo presionado, se resetea cuando se deja de presionar y no se han cumplido los 3 segundos requeridos y se resetea también cuando se presiona el botón enter, con el objetivo de que se resetee luego de presionar la contraseña nueva.

Figura 15: Muestra el contador para 3 segundos de cambio de contraseña

Figura 16: Compuerta X-NOR útil para comparar la igualdad entre dos bits
La memoria de la Figura 8, nos dice que si se cumple la condición de que las contraseñas puestas en los registros de desplazamiento son exactamente iguales y se ha presionado la tecla enter (Tecla D), se abre la puerta (High o bit 1), de lo contrario no lo hará (Low o bit 0).

Circuito físico montado en PSoC


Añadiendo al problema un contador de errores que luego de 4 errores des-habilite el teclado durante 15 segundos, se realizó el diseño de un contador que durante 15 segundos des-habilite el teclado y lo vuelva a habilitar, además de una entrada de habilitación a los relojes del teclado. Para esto se utilizó un esquema similar al del registro de desplazamiento de 4 bits, pero cada vez que se oprime enter y la salida del comparador es low, se desplaza un 1 hacia la izquierda, cuando las 4 salidas son 1, se activa el contador, una vez se resetea el contador la memoria lo hace igualmente.
Figura 17: Nuevo componente contador de errores

Figura 18: Esquema interno de contador de errores
(Click para mejor resolución)
Figura 19: Nuevo esquema del deco de teclado matricial con entrada a un habilitador

Figura 20: Esquema modificado del decodificador de teclado matricial para des-habilitar los relojes
por lo tanto el decodificador


Link de descarga del programa: