domingo, 21 de febrero de 2021

laboratorio 13: contadores

Laboratorio 13: contadores

juan pablo lopez guevara 20171005073

universidad distrital francisco josé de caldas

Introducción

Los contadores como circuitos secuenciales, nos sirven como elemento de estudio con el fin de aprender sobre el diseño secuencial.  En esta practica se diseña un contador BCD de dos cifras.

Para esto, usamos el diseño dado en clase por el profesor

De donde tenemos la siguiente tabla de estados (cada cambio es un pulso de reloj)

De aqui, tenemos que

Qo+=Q1'Qo'+Q1Qo'=Qo'
Q1+=Q1'Qo+Q1Qo'=Q1(+)Qo

Así, nuestra simulación en circuitverse sería


Con este, construimos el de 4 bits y lo limitamos para que llegue hasta 9 (1001)


ahora, concatenamos 2 de estos para poder contar hasta 99 BCD
Ahora, armamos estos bloques en PSoC


luego, construimos con este uno de 4 bits

y con este, uno de 2 cifras BCD (de 0 a 99)


Podemos ver el funcionamiento de este bloque en conjunto con los demás circuitos de la practica 14 en este link (es el contador de 0 a 99 del tablero de goles)

Conclusiones

Vemos lo útil de estudiar el diseño de contadores a la hora de practicar el diseño secuencial así como sus aplicaciones practicas extremadamente necesarias a la hora de resolver problemas de índole de diseño de circuitos digitales. 





laboratorio 14: Ejercicio contadores

Laboratorio 14: ejercicio contadores

juan pablo lopez guevara 20171005073
universidad distrital francisco josé de caldas

Enunciado

Solución del problema. 

Se implementa los contadores ascendentes de la practica 13, se diseñan contadores descendentes y se limitan para que cumplan con las debidas condiciones.

Contador descendente de 2 bits

Diseñamos sin enable, por lo que cambiará de estado con cada pulso de reloj
tenemos la siguiente tabla que resume el diagrama de estados


Tenemos el siguiente resultado

Qo+=Q1Qo'+Q1'Qo'=Qo'

Q1+=Q1Qo+Q1'Qo'=(Q1(+)Qo)'

Así, tenemos nuestra siguiente simulación en circuitverse usando FFD


Luego, usando la condición necesaria para activar los bits más significativos y llevando el circuito a PSoC, tenemos los siguientes resultados


y con este, construimos el de 4 bits BCD



siguiendo la misma lógica, construimos bloques que bajen desde 5 y desde 2



La logica para entender el funcionamiento de estos bloques es que el ciclo comienza en 00 y no en 11, de tal forma que para 4 bits el ciclo hace 0000 y luego 1111, para cuando se detecta 0000, se obliga a que se reseteen los bits necesarios para que el siguiente numero sea 1001 o 0101 dependiendo de si es hasta 9 o hasta 5

Así, llegamos a nuestro reloj total


por ultimo, reciclamos los bloques de la practica 13 y diseñamos el circuito que permita estar 10 segundos en una posición y 5 en la otra posición

Así, para mantenernos los tiempos solicitados en una y otra posición, tenemos el siguiente circuito, que para eliminar problemas de sincronía usa FFD entre etapas de contadores de 2 bits (reciclados de la practica anterior) y a la salida para almacenar la condición mayor a nueve, de tal manera que garantizamos que estén los 10 segundos en una posición y 5 en la otra.


Así, ahora reciclando el circuito de puntuación


Podemos ver el funcionamiento de este circuito en este link

Conclusiones

Aunque al circuito le falta la posibilidad de resetear (de forma correcta) y poder parar y volver a correr el tiempo, podemos ver que funcionan los demás ítems. Podemos concluir lo útil (y necesario) que es entender el diseño secuencial, debido a que con el podemos diseñar contadores que nos permiten hacer muchas cosas como lo es en nuestro caso marcadores de goles o relojes. 








sábado, 20 de febrero de 2021

Laboratorio 15: matriz de leds

Laboratorio 15: matriz de leds

Juan pablo lopez guevara 20171005073
Universidad distrital francisco José de caldas
Ingeniería electrónica, fundamentos de circuitos digitales

Introducción

Debido a la necesidad de tener más cantidad de salidas de información para el usuario, aparecen las matrices de LED, que nos permiten dibujar figuras como lo son los emoticones.

Objetivos

  • Implementar los 4 emoticones presentados
  • Poder seleccionar cualquiera de los emoticones usando 2 bits de selección
  • Tener la opción de desplazar el emoticón en la matriz

Marco teorico

Matriz de leds

Figura 1. Diagrama de matriz de leds 8x8

La matriz de leds es un arreglo de leds 8x8 que tiene el fin de mostrar diagramas por medio de encender los leds necesarios para este propósito. Debido a las limitaciones de alimentación de la PSoC y a que no es practico consumos tan altos en general, se necesita visualización dinámica para la correcta visualización de los diagramas a graficar. Para nuestro caso, tenemos cátodo común, que significa que encenderemos las columnas con un 1 lógico.

Metodología

Para esta practica, seguimos la metodología dada por el profesor. Esto quiere decir que creamos una ROM 32x8 en la cual tenemos 2 bits para elegir el emoticón y 3 para direccionar cada fila de cada emoticón. Así, diseñamos e implementamos un decodificador 3 a 8 y debido a problemas que se nos presentaron a la hora de usar el registro de desplazamiento, utilizamos 2 bloques sumadores con el fin de desplazar a la izquierda o a la derecha el emoticón.

Diseño

Comenzamos por el diseño del deco 3 a 8, para lo cual creamos su tabla de verdad



Para facilitar el diseño, utilizaremos verilog con la función case. Esto nos reducirá enormemente el proceso de diseño



Esquematico



Siguiendo con la misma técnica, haremos un esquema de los valores necesarios para graficar los 4 emoticones, teniendo en cuenta que son las tierras para la matriz de leds.

De izquierda a derecha, los valores necesarios para cada emoticón serían

emoticón 1

emoticón 2


emoticón 3

emoticón 4


Por comodidad, programamos la rom usando verilog y agregando 2 bits para la elección de cual emoticón se va a visualizar.

























Por ultimo, para el desplazamiento hacemos uso de dos bloques sumadores. Uno para restar la posición y luego, este resultado entra a otro bloque sumador que tiene el objetivo de sumar la cantidad a moverse en la posición opuesta. 
Así, llegamos a nuestro diagrama final

El link para ver el funcionamiento de este circuito es este


Conclusiones 

Vemos la gran utilidad de utilizar visualización dinámica en este caso, ya que somos consientes que la PSoC no es capaz de encender al tiempo todos los leds, lo cual es un problema que soluciona la visualización dinámica (ahorrando recursos energéticos). Por otro lado, vemos la gran utilidad de usar código verilog para reducir la dificultad y tiempo de diseño, en especial a la hora de almacenar datos y crear decodificadores. 

lunes, 25 de enero de 2021

Laboratorio 11: registro de 4 bits

 

Laboratorio 11: Registro de 4 bits

Juan Pablo López Guevara 20171005073

Universidad Distrital francisco José de caldas. Bogotá octubre
2020

Introducción

 Debido a la necesidad de trabajar con numeros binarios en codigo BCD, necesitamos empezar a separar los registros entre numeros menores y mayores a 9.

Objetivos

Implementar el registro de 4 bits dado en la practica en el circuito de la practica 10 con el fin de ver que se guarden los valores binarios. Luego agregamos los componentes necesarios para que solo se guarden los numeros iguales o menores a 9.

Marco teórico

Registros

Sirven a modo de almacenamiento temporal. Permiten desplazar información y se construyen a partir de circuitos secuenciales como lo son flip-flops D o tambien JK. Son muy populares los registros de 8 bits debido a que los ordenadores manejan unidades llamadas bytes (8 bits).

Para esta practica necesitamos un registro de 4 bits como el presentado en la guía. Figura 1.

Figura 1. Registro de 4 bits propuesto en la guía

Metodología. 

Implementamos el registro dado en la guía (figura 1) en un bloque esquemático de PSoC creator, y lo conectamos con el circuito hecho en el laboratorio 10. Luego agregamos un circuito mayor a 9 y un habilitador para la condición botón oprimido HIGH (la cual sacamos de la salida del debouncer de la practica anterior) y a su vez la condición No mayor a nueve.

Diseño e implementación

Comenzamos planteado la tabla de verdad necesaria para el circuito mayor a 9.

Tabla 1. Tabla de verdad mayor a 9

Así usando mapas

Así, tenemos la función lógica >9=B3(B2+B1)

Lo programamos en verilog


Ahora implementamos el registro dado en la guía por medio de esquemático

y ahora unimos todo el topdesign. Para esto, usamos la lógica nombrada en el apartado metodología. De esta forma eliminamos el problema del rebote usado con reloj para el registro de 4 bits, ya que pasaba que a veces guardaba los números menores a 9 y a veces no. Por ello, nos aseguramos que la entrada CLK del registro de 4 bits solo reciba nivel alto cuando no sea mayor a 9 y a su vez el debouncer nos diga que hay una tecla presionada.

y los pines usados fueron

El link del video es el este
 

Conclusiones

Podemos evidenciar de forma simple y precisa la gran utilidad de los registros. Podemos almacenar valores para su uso posterior. Garantizar que solo queden guardados números menores o iguales a 9 nos abre un abanico de posibilidades como lo es manejar números binarios en código BCD. Esto nos permitiría usar bloques que ya hemos usado en laboratorios anteriores en combinación con el teclado matricial.










domingo, 24 de enero de 2021

laboratorio 10: decodificador matricial y Biestables

 

Laboratorio 10:Decodificador matricial y Biestables

Juan Pablo López Guevara 20171005073

Universidad Distrital francisco José de caldas. Bogotá octubre
2020

Introducción

Debido a la necesidad de manejar entradas como teclados y similar, agregamos ahora el teclado matricial de la tarjeta de desarrollo con el fin de no tener que usar los dip switch. Los transistores nos permiten almacenar datos en forma de bits, comprobaremos las tablas de verdad de los circuitos biestables disponibles en PSoC creator, así como programaremos algunos en Verilog.

Objetivos

  • Implementar el decodificador de teclado matricial propuesto por la guía
  • Con mapas, convertir el código resultante en código Binario
  • Programar los biestables asíncronos por componentes y los sincronos por código Verilogl.

 

Marco Teórico

Teclado matricial

El uso de teclados para introducir información en un dispositivo es muy común debido a que simplifica el manejo de datos. Por esto, se encuentran ampliamente en dispositivos de uso cotidiano como cajeros y múltiples sistemas de seguridad.

Los teclados matriciales por lo general usan un arreglo de botones que se ubican por filas y columnas. Un teclado matricial 4x4 (como el de la tarjeta) permite manejar 16 botones con solamente 8 lineas. El método para saber que botón se ha presionado consta de un barrido en las filas de tal manera que se encuentre el botón presionado buscando un cero en las columnas.

Figura 1. teclado matricial

Biestables

Existen de dos tipos, latch y flip-flop. Los latch son aquellos cuya respuesta solo depende de las entradas de exitación, pero no hay un control como un reloj. A diferencia de estos, los flip-flop se caracterizan por tener señales de control como lo puede ser un reloj. Sin embargo, en muchos de los casos podremos construir un flip-flop a partir del funcionamiento de un latch, como lo veremos en seguida.

Latch SR

Este tipo de biestable tiene 2 entradas y 2 salidas (la salida y su complemento). La tabla de verdad es la tabla 1.

tabla 1. Tabla de verdad biestable SR

De aqui tenemos Q+=S+R'Q para compuertas NOR,

Q+=(S'*(R'Q)')' para compueras NAND

Así, tenemos 2 opciones para usar este latch

Figura 1. Biestable SR con NOR

Figura 2. Biestable SR con NAND

Flip-flop SR

Para construir este flip-flop, basta con agregar un habilitador de las entradas S y R. Para hacerlo con el mismo tipo de compuerta, analizaremos el comportamiento de una compuerta NAND como habilitador (negativo).

74LS38 - Compuerta Lógica NAND - TdElectrónica

Si tomamos la entrada A como reloj, veremos que cuando es 0, tenemos siempre de salida HIGH (lo que en logica negativa seria 0) y cuando tenemos 1, tenemos el complemento de B. Esto nos permite hacer un habilitador para el circuito de la figura 2. de donde este será la señal reloj.

Figura 3. Flip-flop SR

Tabla 2. Flip-flop SR. No cambia de estado si E no esta en HIGH

Latch D (delay)

Sirve a modo de memoria o como delay. Su tabla de verdad es la siguiente

y su funcion logica es Q+=D

Podemos construir un latch D a partir del latch SR de la figura 1.

Figura 4. latch D a partir de SR

Flip-flop D

A partir del flip flop SR de la figura 3 podemos construir el flip-flip D

Latches in Digital Logic - GeeksforGeeks 

latch jK

Es la mejor del SR, eliminando la restricción en que no podian ser iguales en nivel alto las entradas. Su tabla de vedad es la siguiente


y su funcion logica es Q+=QK'+Q'J

Flip-flip JK

Básicamente, aprovechamos la logica del Flip-flop SR agregándole una nueva entrada para el reloj

JK Flip-flops

Latch T

Basicamente es un latch JK con ambas entradas (J y K) en una unica entrada, su tabla de verdad es la siguiente


y su función lógica es Q+=T'Q+TQ'=T(+)Q

Flip-Flop T

Es un flip-flop JK con las entradas J y K siendo la misma 

Designing of T Flip Flop

Metodología

Para este laboratorio, implementaremos el circuito dado en la guía, tomaremos la tabla de datos de salida del teclado matricial,  usando mapas construiremos un deco para convertirlos a binario y programaremos los biestables vistos en el apartado anterior.

Decodificador de teclado matricial

circuito dado en la guía

Para implementarlo más facil, crearemos un bloque para el deco2a4 y el codificador 4 a 2.

Decodificador 2 a 4

Codificador 2 a 4

Así, tenemos la implementación del decodificador dado en la guia

Decodificador matricial

Usando este decodificador, encontramos la siguiente tabla de verdad

Por medio de mapas, encontramos las siguientes funciones logicas

para B0

y su función lógica resumida sería: S3(S1S2'+S0S2)+(S1+S3)'


Para B1

y su función lógica B1=(S0+S1)'S2+S1(S2+S3)'+S0(S2'+S1'S3)

Para B2

Y su función lógica B2=S3((S0+S2)'+S0S1')+S2(S0(+)S1)'

Para B3

y su función logica B3=S0(S2+S1)+S2(S1(+)S3)

Luego juntamos todo en un único deco


Así juntamos ambos circuitos y tenemos el siguiente resultado


Biestables

Comenzamos por los Biestables asíncronos

SR

D

JK
T

ahora con los síncronos (código verilog)

SR (usando compuertas nand, figura 2)



JK (usando case, ya que de la forma vista en el apartado teórico nos surgieron problemas)

T (instanciando el JK anterior)

A través de este link podemos evidenciar el funcionamiento de los circuitos desarrollados en esta practica.

Conclusiones

Concluimos que claramente es importante el uso de la tarjeta de desarrollo, ya que sin esta no seriamos capaces de evidenciar correctamente los errores a la hora de programar los pasos en verilog, ya que como nos pasó con el biestable sincrono JK, tuvimos que recurrir a un case recomendado en internet, ya que el circuito no tenia el comportamiento deseado cuando se usaban compuertas.

Es más que claro que se comprobó que los biestables son circuitos secuenciales en los que toca tener en cuenta los estados anteriores para entender el estado siguiente. Estos nos brindan un gran abanico de posibilidades, desde memorias, comparadores, divisores de frecuencia y demás.

Por otro lado, vemos lo útil de usar teclado envés de usar los pull up de la tarjeta, ya que aumenta la comodidad del usuario.






ecuaciones para fisica