Vídeo 19: Circuitos combinacionales - Obijuan/digital-electronics-with-open-FPGAs-tutorial GitHub Wiki
Vídeo
Haz click en la imagen para ver el vídeo en Youtube
Descripción
Los circuitos combinaciones son los que nos permiten realizar manipulaciones de los bits. Se caracterizan porque sólo manipulan bits, pero no los almacenan. No tienen memoria. Quedan totalmente definidos por su tabla de verdad. Empezaremos estudiando los circuitos combinacionales de varias entradas y una salida, y cómo los podemos implementar fácilmente a partir de su tabla de verdad usando los bloques memory de Icestudio 0.3.3-beta o superior
¡Icestudio 0.3.3-beta!
Ya está liberado Icestudio 0.3.3-Beta. La versión que estábamos usando antes era la 0.3.2. Por favor, actualizarse a esa versión. La colección empleada en este tutorial está hecha con esta versión, y en las anteriores no se verá correctamente
Colección
Academia-Jedi-HW-19.zip: Colección para este tutorial. Descargar e instalar
Contenido
- Introducción
- Circuitos combinacionales de 1 entrada y 1 salida
- Circuitos combinacionales de 2 entradas y 1 salida
- Circuitos combinacionales de 3 entradas y 1 salida
- Circuitos combinacionales de 4 entradas y 1 salida
- Ejercicios propuestos (20 Bitpoints)
- Ejercicios entregados
- Autor
- Licencia
- Enlaces
- Preguntas frecuentes
Introducción
Los circuitos digitales realizan tres operaciones con los bits: manipular, almacenar y transportar. El transporte se realiza gracias a los cables. Los circuitos que realizan las manipulaciones pero no hacen ningún tipo de almacenamiento de información se denominan combinacionales. Ya hemos visto varios ejemplos de ellos: las puertas lógicas (AND, OR, NOT) y los multiplexores, pero hay muchos más circuitos combinacionales
Todos los circuitos combinaciones se caracterizan porque NO tienen memoria. Las operaciones que realizan son siempre las mismas, y no dependen de los datos que hayan recibido en el pasado. Una operación AND entre dos bits es siempre la misma, da igual el valor de las entradas en el pasado. Da igual si en el pasado ha hecho 2000 operaciones. Si en el instante actual ambas entradas están a 1, entonces la salida será 1
Tablas de verdad
Una característica muy importante de los circuitos combinaciones es que quedan totalmente definidos por su tabla de verdad. En ella se especifica el valor de todas sus salidas para todas las combinaciones posibles de sus entradas. Así, de forma genérica, un circuito combinacional de dos entradas y una salida tendrá una tabla con la siguiente pinta:
El circuito de ejemplo tiene 2 entradas, llamadas a y b, y una salida, denominada c. En la tabla de verdad se representan las salidas del circuito cuando se dan todas las combinaciones posibles en las entradas. Estas combinaciones de a y b es lo que se muestra en la parte de la izquierda de la tabla. En la derecha se ponen los valores asociados a sus entradas. En el dibujo se han marcado como X para indicar que pueden valer tanto 0 como 1 (esto depende del circuito particular que implementemos)
Circuitos combinacionales de varias entradas y una salida
En este tutorial nos centraremos en los circuitos combinacionales con una única salida, y varias entradas. En realidad, los que tienen varias salidas se construyen mediante la superposición de circuitos de una salida. Pero esto lo veremos en los tutoriales venideros
Circuitos combinacionales de 1 entrada y 1 salida
Comenzaremos por los circuitos combinaciones más sencillos posibles: los que tienen una entrada y una salida. Sólo hay dos, que se corresponde con la puerta NOT y la puerta "identidad". Esta última un simple cable que sólo transmite bits
Ejemplo 1: Puerta NOT con tablas
A partir de la versión 0.3.3 de Icestudio podemos hacer circuitos combinacionales muy fácilmente a partir de las tablas de verdad. Como ejemplo, vamos a crear la puerta NOT. Utilizaremos el pulsador integrado SW1 de la Alhambra como entrada, y el LED0 como salida. Colocamos primero los pines de entrada y salida
Ahora colocamos el elemento tabla-1-1, disponible en el menú Comb/tablas/tabla-1-1 de la colección Academia-Jedi-HW-19. Es un componente que representa un circuito combinacional genérico con una entrada y una salida. Determinamos la tabla de verdad asignándosela como parámetro. Para ello colocamos el nuevo elemento Basico/memory. Es una tabla de verdad que podemos editar. Escribirmos la tabla de verdad de la puerta NOT
El circuito queda de esta manera:
Lo cargamos en la placa y lo probamos
Comprobamos que efectivamente es una puerta NOT. Cuando no está apretado el pulsador, se recibe un 0 por la entrada del circuito, que se convierte en un 1 en la salida y por tanto se enciende el LED. Al apretar el pulsador sucede lo contrario: entra un 1, que se convierte en un 0 y se apaga el LED0
Ejemplo 2: Cable con tablas
Como segundo ejemplo vamos a editar la tabla de verdad para obtener el otro posible circuito de una entrada y una salida: la puerta indentidad, que en realidad es un cable
Lo cargamos y lo probamos:
Ahora se comporta como un simple cable: inicialmente el LED0 está apagado. Al apretar el botón se recibe un 1 que se transmite al LED y se enciende
Lo interesante de estos dos ejemplos es que conseguimos tener dos circuitos diferentes simplemente cambiando los valores de la tabla de verdad
Circuitos combinacionales de 2 entradas y 1 salida
Los siguientes circuitos en complejidad con los que tiene 2 entradas. Como cada una de las entradas puede encontrase en dos estados: 0 ó 1, en total hay 4 casos posibles, por lo que las tablas de verdad tendrán 4 filas. Todas las puertas lógicas de dos entradas, como las que hemos visto (AND y OR) son circuitos combinaciones de este tipo
Fíjate que hemos añadido una columan nueva en la izquierda, con el número de fila empezando por el 0. Ese núero de fila es el valor en decimal correspondiente a al número binario definido por las entradas. Así, en la fila 3, al pasar a binario tenemos que es 11. Esto quiere decir que la primera entrada está a 1 y la segunda también a 1
Ejemplo 3: Comparador de bits
Vamos a diseñar nuestro primer circuito combinacional de 2 entradas y una salida. Haremos un comparador de bits. Cuando las dos entradas estén al mismo valor, la salida se activará a 1. En caso contrario permanecerá a 0.
Lo primero que hacemos es definir su tabla de verdad. Como tiene 2 entradas, en total tendrá 4 filas. Las numeramos del 0 al 3 y ponemos todos los casos posibles de sus entradas. Esta parte de la tabla siempre será igual. Ahora asignamos valores a las salidas. Sólo estará a uno en la fila 0, ya que las dos entradas son iguales (0 y 0) y en la 3 ya ambas entradas están a 1
Ahora creamos el circuito en icestudio utilizando el componente Comb/Tablas/tabla-2-1. Conectaremos los dos bits de entrada de circuitos a los pulsadores SW1 y SW2 y la salida al LED0. Añadimos el elemento Basico/memory para definir la tabla de verdad. El circuito nos queda así:
Lo cargamos y lo probamos:
Vemos que el LED0 sólo se enciende cuando los dos pulsadores están en el mismo estado. Bien porque no están apretados, o bien porque lo están ambos
Las puertas NAND y NOR
Además de las puertas básicas que ya conocemos, AND, OR y NOT, existen otras que son muy usadas. Todas ellas las podemos definir a partir de sus tablas de verdad. Las versiones negadas de las puertas AND y OR se denominan, NAND y NOR respectivamente
Una característica de estas puertas es que permiten crear cualquier circuito lógico usando sólo el mismo tipo de puertas: bien puertas NAND, o bien puertas NOR. El computador que realizó los cálculos de navegación en el Apolo 11, la nave que llevó al primer hombre a la luna, estaba hecho sólo con puertas NAND
Ambas puertas, NAND y NOR se encuentran disponibles en el menú Comb/Puertas de la colección Academia-Jedi-HW-19.zip
Las puertas XOR y XNOR
Hay otras dos puertas lógicas que se usan mucho en electrónica digital: la XOR y la XNOR. La XOR se denomina O-exclusivo. Funciona igual que una puerta OR salvo en el caso en el que las dos entradas son 1, cuya salida es 0 en vez de 1. Las puertas XOR se usan muchísimo para implementar circuitos aritméticos (como sumadores, por ejemplo)
La puerta XNOR es una XOR negada, y se usa para comparar bits. Su tabla de verdad es justo la que hemos implementado en el ejemplo 3: comparador de bits
Ambas puertas, XOR y XNOR se encuentran disponibles en el menú Comb/Puertas de la colección Academia-Jedi-HW-19.zip
Ejemplo 4: Puerta XOR con tablas de verdad
Como ejemplo implementaremos una puerta XOR usando la tabla de verdad (en vez del propio componente). El circuito es exactamente igual que el ejemplo 3, pero con diferentes valores aplicados a su tabla de verdad
Lo cargamos y lo probamos:
Efectivamente es una puerta XOR. Cuando no hay ningún pulsador apretado, el LED0 está apagado. Y también si los dos están apretados a la vez. Sólo en el caso de que haya uno, y sólo uno de los pulsadores apretados, se enciende el LED0
Circuitos combinacionales de 3 entradas y 1 salida
Los circuitos combinaciones de 3 entradas se definen mediante tablas de verdad de 8 filas, ya que hay 8 posibles combinaciones de sus entradas
Ejemplo 5: Multiplexor de 2 a 1 con tabla de verdad
El multiplexor 2:1 que ya conocemos es un circuito combinacional de 3 entradas y una salida. Las entradas son el canal 1 (i1), el canal 0 (i0) y la selección (Sel). Como es combinacional, lo podemos construir mediante su tabla de verdad
Partimos de este circuito de ejemplo, que también conocemos, que hace parpadear el LED0 a diferentes frecuencias, según el valor del pulsador SW1
La tabla de verdad de este multiplexor es la siguiente
Fila | i1 | i0 | Sel | Salida |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
2 | 0 | 1 | 0 | 1 |
3 | 0 | 1 | 1 | 0 |
4 | 1 | 0 | 0 | 0 |
5 | 1 | 0 | 1 | 1 |
6 | 1 | 1 | 0 | 1 |
7 | 1 | 1 | 1 | 1 |
Ahora ya podemos implementar el ejemplo anterior usando la tabla que encontramos en Comb/Tablas/tabla-3-1
Cargamos y probamos:
Al apretar el pulsador SW1, la frecuencia de parpadeo del LED0 cambia. ¡Nuestro multiplexor hecho con tablas de verdad está funcionando!
Circuitos combinacionales de 4 entradas y 1 salida
Los circuitos combinaciones de 4 entradas se definen mediante tablas de verdad de 16 filas, ya que hay 16 posibles combinaciones de sus entradas
Ejemplo 6: Comparador de números de 2 bits
Los comparadores con unos circuitos muy usados en electrónica digital. Nos permiten generar eventos cuando dos números son iguales, establecer umbrales, activación de zonas de memoria, detección de caracteres, limitación de contadores...
En este ejemplo haremos un comparador muy sencillo, para números de bits, basado en tablas de verdad. Utilizaremos 4 interruptores externos, divididos en 2 grupos de 2, para representar la entrada de los 2 números de 2 bits. Cuando ambos números son iguales, se enciende un LED externo. El montaje es el siguiente:
La tabla de verdad la creamos a partir de la definición de comparador. La salida sólo será uno si los dos bits del primer número (i3, i2) son iguales a los del segundo (i1,i0), en el resto de casos será 0
Fila | i3 | i2 | i1 | i0 | Salida |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 1 | 0 |
2 | 0 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 1 | 0 |
4 | 0 | 1 | 0 | 0 | 0 |
5 | 0 | 1 | 0 | 1 | 1 |
6 | 0 | 1 | 1 | 0 | 0 |
7 | 0 | 1 | 1 | 1 | 0 |
8 | 1 | 0 | 0 | 0 | 0 |
9 | 1 | 0 | 0 | 1 | 0 |
10 | 1 | 0 | 1 | 0 | 1 |
11 | 1 | 0 | 1 | 1 | 0 |
12 | 1 | 1 | 0 | 0 | 0 |
13 | 1 | 1 | 0 | 1 | 0 |
14 | 1 | 1 | 1 | 0 | 0 |
15 | 1 | 1 | 1 | 1 | 1 |
y ahora implementamos el circuito usando el componente Comb/Tablas/Tabla-4-1
Lo cargamos y lo probamos
Ejercicios propuestos (20 BitPoints)
Ver los detalles de los ejercicios y las entregas en el menú Archivos/Ejemplos/2-Ejercicios de la colección de este tutorial
Resumen:
- Ejercicio 1 (Total 5 Bitpoints): Franky en modo defensivo
Diseñar un circuito combinacional, de dos entradas y una salida, mediante su tabla de verdad, para controlar la posición del cuello de Franky con dos sensores de infrarrojos: izquierdo y derecho. Cuando ningún sensor esté activado, o sólo lo esté el izquierdo, Franky mirará hacia la izquierda. Cuando el sensor derecho está activado, o ambos (izquierdo y derecho), Franky mirará hacia la derecha
- Ejercicio 2 (Total 5 Bitpoints): Apertura de caja fuerte
Diseñar un circuito combinacional, mediante su tabla de verdad, para abrir la puerta de una caja fuerte cuando se introducen los códigos correctos. Se usarán 3 interruptores externos para introducir la clave. Cuando esta clave sea 101 ó 011 se moverá un servo a la otra posición, simulando la apertura de la caja
- Ejercicio 3 (Total 5 Bitpoints): Detector de paridad de 4 bits
Diseñar un circuito combinacional de 4 bits de entrada y uno de salida, usando su tabla de verdad, capaz de detectar si el número de 1's en sus entradas es par. En ese caso, se encenderá el LED conectado a su salida. Si el número es impar, se apagará. Este tipo de circuitos se llaman detectores de paridad, y se usan mucho en comunicaciones para comprobar la integridad de la información recibida. La entrada 0000 tiene paridad par (0 es par).
- Ejercicio 4 (5 Bitpoints). Ejercicio Libre. Premiar la creatividad. Entregar por redes sociales o github: Pantallazos, enlaces, vídeos, etc...
Ejercicios entregados
Andrés Prieto-Moreno (andrespmt)
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Andrés (@Avarez_)
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Federico Coca
Ejercicio 1
- Vídeo en Youtube:
Ejercicio 2
- Vídeo en Youtube:
Ejercicio 3
- Vídeo en Youtube:
Ejercicio 4
- Vídeo en Youtube:
Autor
- Juan González-Gómez (Obijuan)
Licencia
Créditos y agradecimientos
Enlaces
- Repositorio con las colecciones de la Academia Jedi de Hardware
- BricoGeek. Tienda Friki donde comprar componentes electrónicos
- Repositorio de la Icezum Alhambra
- Documentación de la Icezum Alhambra: (PNG)(SVG)(PDF)
- Icestudio
- Monedas Bit imprimibles
- Printbot Beetle
- Ultimate Gripper
- Pinza paralela
- Robot Educativo Zowi
- Qué es PWM y para qué sirve. Entrada en el bloq de Rincón Ingenieril
- Repositorio de PCBPrints
- PCBPrint Alhambra-Button
- PCBPrint Alhambra Switch
- Soporte Icezum Alhambra
- Soporte para Servo Futaba 3003
- Puntero para servo Futaba 3003
- Clavijas de amarre para servos
- Tablero indicador binario para servo
- Fijador de esquinas
- Fijador de cables
- Fijador de placas
- Octopus passive buzzer, de Elecfreak
- Kit de sensores para Arduino. BricoGeek. Dentro del kit con 37 módulos, hay uno con zumbador
Preguntas frecuentes
- ¿Dónde puedo conseguir la placa Icezum Alhambra?
Pueden conseguir una desde Alhambrabits
-
¿Dónde puedo comprar material electrónico?. Hay muchos sitios. Uno muy bueno es Bricogeek
-
¿Cómo aprendo a manejar github?
Hay mucha información en internet. En su momento hice este Tutorial: Github y FreeCAD para enseñar a manejarlo. Los ejemplos están hechos con ficheros de FreeCAD, sin embargo, lo que se enseña es genérico. También vale para las entregas de los ejercicios del tutorial de Electrónica digital para makers
- Los pulsadores de la Icezum Alhambra no me funcionan
Eso es debido a que se han metido restos de flux y no hacen buen contacto. En el apartado ¡No me funcionan los pulsadores! del Tutorial 9 se indica cómo solucionarlo fácilmente
- ¿Dónde puedo encontrar más información sobre las señales PWM?
Echa un vistazo a este post de Rincón Ingenieril sobre el tema
- He conectado un pulsador externo pero no me funciona. He hecho un circuito para conectar el botón con un led, y al apretar se enciende el LED, pero luego no se apaga. NO funciona bien
Los pulsadores externos que se conecten a los pines de 5v de la Alhambra (D0 - D13) tiene que llevar una resistencia de pull-up o pull-down con valores entre 460 ohm y 2K. Típicamente usamos 1K. Esto hace que los conversores de nivel se configuren como entradas y que el pulsador funcione correctamente. Puedes encontrar más información En este enlace
-
¿Donde puedo conseguir el switch que habéis usado en la PCBprint Alhambra switch? Es el mismo switch que se ha usado en la propio Icezum Alhambra (aunque la versión sin acodar). Los fabricantes los puedes encontrar en la lista de componentes de la propia icezum Alhambra. La referencia del componente en concreto es esta: Slide Switch, SPDT, On-On, Through Hole, WS-SLTV Series, 500 mA. Yo te recomiendo que uses la PCBprint de Diego Lale, que usa interruptores que puedes conseguir en Bricogeek: Mini-interruptor de 3 pines
-
¿Dónde puedo conseguir el servo de rotación continua SM-4303R?
Es un servo muy usado y muy estándar. Si buscar por internet encontrarás muchos sitios donde los vendes, a diferentes precios. Aquí en España se puede conseguir muy fácilmente a través de BricoGeek: Servo SM-4303R Bricogeek y también en Iberobotics: Servo SM-4303R Iberobotics
- Parece ser que los servos Futaba 3003 se pueden trucar para convertirlos en rotación continua. ¿Conoces algún tutorial sobre como hacerlo?
El Futaba 3003 es uno de los servos que típicamente se han trucado para construir robots móviles con ellos. Robots como Tritt, El Skybot o el Miniskybot los utilizan. Existen muchísimos tutoriales para hacerlo. En esta página puedes encontrar todas las formas de trucarlos. El que recomendamos es el caso 2
-
Ya tengo varios PCBprints impresos (de los LEDs y los pulsadores. ¿Dónde podría conseguir los cables que usas para conectarlos directamente a la Icezum Alhambra?
Son cables hembra-hembra de tres hilos. Como son los mismos que se usan para la conexión de servos, los puedes encontrar en tiendas donde vendan cualquier tipo de servo. Por ejemplo:
- En Pololu: https://www.pololu.com/product/779
- En hobby king: https://hobbyking.com/en_us/10cm-female-to-female-servo-lead-jr-26awg-10pcs-set.html?___store=en_us
También se pueden usar cables hembra-hembra aislados. A partir de ellos es muy fácil trenzarlos y hacerte tu propio cable de 3 pines:
- Adafruit: https://www.adafruit.com/product/266
- En Bricogeek: http://tienda.bricogeek.com/cables/585-set-de-cables-h-h-10-unid.html
- En Iberobotics: Aquí también tienen los hembra-hembra: https://www.iberobotics.com/comprar/electronica-componentes/cables-y-conectores/ Es otra tienda española que está en Santander