Circuito Lógico en "Logisim" (Protocolo RS-232)

in #spanish2 years ago

  Soy estudiante de ingeniería electrónica de la Universidad Simón Bolívar de Venezuela, hace unos meses me encontraba cursando la materia de "Circuitos digitales" donde se nos evaluó el diseño de circuitos lógicos a través de diferentes simuladores, incluido el simulador "Logisim". Una de nuestras evaluaciones fue implementar el protocolo RS-232 para enviar el número seleccionado en un teclado matricial.


Imagen propia

  Objetivo:

  Implementar un protocolo semejante al RS-232 para enviar el número seleccionado previamente en un teclado matricial.

  Diseño:

   Se nos hizo entrega del diseño de un teclado matricial de tamaño 3x3 excitados por pines conectados a cada columna del teclado respectivamente, una vez excitada la columna, se puede seleccionar uno de los tres botones disponibles en dicha columna, al estar encendida más de una columna al mismo tiempo, si se selecciona un número en el teclado la salida del circuito será invalida, a continuación el circuito entregado originalmente:


Imagen 1. Diseño entregado originalmente. (Imagen propia)

  Diseño del circuito lógico que excita el teclado matricial y determina la tecla activada:

  Se conectaron las tres columnas a la salida de tres flips flops tipo D, de manera que estas sirvieran como estado futuro del mismo, se adicionó un flip flop D (al cual se hará referencia como columna cero (C0)) siendo C1,C2 y C3 las columnas enumeradas del 1 al 3 de izquierda a derecha para poder iniciar la máquina de estados cuando cada flip flop marca cero. De esta forma las tres columnas se irán encendiendo una por una.

  Estas 4 salidas de los flips flops que sirven como estado futuro, entran al circuito integrado: “Excita columnas” el cual arroja en la salida el siguiente estado de las columnas.

  El circuito obedece la siguiente tabla de la verdad:


Tabla 1.Estado Actual y futuros en la entrada y salida de los flips flops. (Tabla propia)

  Dando como resultado el siguiente circuito:


Imagen 2. Circuito lógico que activa los flips flops para excitar el teclado matricial.. (Imagen propia)

  De esta forma las columnas quedan habilitadas una por una sin coincidir nunca.

  Diseño del circuito lógico que determina cuál de las teclas ha sido activada:

  Las filas activadas al presionar algún botón del teclado son las siguientes:

  F1: Correspondiente a la fila activada por los botones 1,2 y 3.

  F2: Correspondiente a la fila activada por los botones 4,5 y 6.

  F3: Correspondiente a la fila activada por los botones 7,8 y 9.

  Las columnas que excitan el teclado (C1,C2 y C3) y las filas activadas por el mismo (F1, F2 y F3) al presionar una tecla se conectarán a un circuito integrado “Tecla seleccionada” que recibe estos parámetros como entrada, a la salida se arroja un número en codificación binaria, representado por los términos: B3, B2, B1 y B0, siendo B3 el bit más significativo, esto con el fin de crear combinaciones columna-fila que representen el numero de la tecla seleccionada.

  El circuito se rige por la siguiente tabla de la verdad:


Tabla 2. Columna encendida con correspondiente fila encendida para determinar el número seleccionado. (Tabla propia)

  Dando como resultado el siguiente circuito:


Imagen 3. Circuito lógico que determina cuál de las teclas ha sido activada.. (Imagen propia)

  De esta forma, al presionar un botón, este coincidirá con las columnas excitadas por el teclado que irán variando y arrojara el numero seleccionado en codificación binaria.

  De igual manera los cables a la salida del teclado se conectaron a una compuerta NOR, la cual conecta su salida al “Enable” de cada flip flop tipo D, estado para detener el trabajo de los mismos y mantener el estado actual que se esté presentando.

  A continuación el diagrama de estados de la máquina de estados:


Imagen 4. Diagrama de estado del circuito secuencial. (Imagen propia)

  Donde los números representan el estado actual de cada columna de la matriz y el flip flop extra que he llamado Co. Los cuales rigen el comportamiento de la entrada del circuito.

  Diseño del circuito lógico que, por cada tecla pulsada, envía el numero de la tecla vía serial usando el protocolo RS-232:

  A la salida del circuito “Tecla seleccionada” se encuentra otro circuito integrado llamado “Retenedor”, el mismo está compuesto por un arreglo de flips flops tipo S-R, los cuales se encargan de retener el valor que arroja el circuito “Tecla seleccionada” aun cuando este vuele a su estado de reposo, de esta manera se obtiene a la salida del circuito retenedor la codificación binaria del número seleccionado en el teclado, quedando de la siguiente manera.


Imagen 5. Circuito “Retener” (En la imagen reteniendo el número 7 a pesar de que la entrada está en reposo). Imagen propia.

  Una vez retenido el numero seleccionado, este se conecta a un multiplexor ocupando sus entradas desde la cero (0) hasta tres (3) y anexando un cuarto bit el cual se posicionara en 1 como el bit de parada.

  Se nos especificó que la taza de transmisión debía ser de 100 baudios, por ende se utilizó la relación para calcular el “tick” del reloj de T = f/2(N-Baudios) obteniendo un “clock” de 10 “ticks” como flanco de subida y bajada, este se conectó a un contador, previamente fijado en su máximo valor el cual es 4, el cual realizará un conteo de 0 a 4 cuando sea regresado a cero, para englobar los 4 bits transmitidos y un bit de parada al momento que se selecciona un número.

  Igualmente se conectó a las 4 salidas del circuito “Tecla seleccionada” una compuerta NOR, la cual también conecta su salida al circuito “Retenedor”, esto para poder conectarse con los flips flos y poder realizar operaciones lógicas para poder retener el número seleccionado y que este pueda cambiar si se selecciona otra tecla.

  Tal como se hizo a la entrada del circuito “Tecla Seleccionada” se tomaron las tres filas salientes del teclado matricial para conectarse a una compuerta lógica en este caso OR, cuya salida se dirigió a el “Clear” del contador, de esta manera el contador regresará a cero cada vez que se seleccione una tecla y así poder iniciar el conteo el cual esta relacionado con el multiplexor para así poder leer cada uno de los bits desde el más significativo hasta el menos significativo.

  Obteniéndose finalmente el siguiente circuito:


Imagen 6. Circuito completo. (Imagen propia)

  Resultados:

  A la salida del multiplexor se observa el resultado de transmitir en serie el número seleccionado cuando se toca cualquier tecla, el contador se reducirá a cero y empezará a aumentar a una tasa de transmisión de 100 baudios, para que el multiplexor pueda mostrar a al salida cada uno de los bits correspondientes a su posición en la entrada del mismo, de esta manera muestra cada número seleccionado en codificación binaria empezando por el bit más significativo y concluirá con el bit de parada el cual se fijó previamente en 1.

  A continuación el diagramad el bloques del circuito:


Imagen 7. Diagrama de bloques del circuito completo. (Imagen propia)

  Conclusiones:

  Se logró implementar un circuito que cumpliera con la tarea especificada ya que se pudo realizar la transmisión bit a bit de manera similar al protocolo RS-232, se elaboró el circuito que excita el teclado matricial de manera adecuada y se logró detectar el numero seleccionado para poder ser transmitido bit a bit con la ayuda de un multiplexor. Sin embargo, cabe acotar que al mantener alguna tecla presionada la transmisión bit a bit comenzará cuando la misma se suelte lo cual hace más tardío el resultado si se está en estas condiciones, de resto el circuito funciona correctamente según las especificaciones pedidas.

  Referencias:

  Taub, Herbert. Circuitos Digitales y Microprocesadores. Editorial Calypso. Mexico DF. (1998)

  Ángel Terrones, :Circuito Q2: entregado el 22/12/18.

  Spartan-3 FPGA Starter Kit Board User Guide, UG130 (v1.2) June 20, 2008.

Sort:  


This post has been voted on by the SteemSTEM curation team and voting trail. It is elligible for support from @curie.

If you appreciate the work we are doing, then consider supporting our witness stem.witness. Additional witness support to the curie witness would be appreciated as well.

For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!