Digital 1: Familias lógicas

Si habéis decidido saltaros la introducción y habéis llegado hasta aquí, supongo que ya sabréis de qué va la cosa. Para el resto, como dije en dicho apartado, una vez tenemos el circuito, cuando lo vamos a montar, es decir, a la hora de utilizarlos en la realidad, utilizamos un circuito integrado que tiene unas características propias. Dichas características son otra excusa para darnos dolor de cabeza e introducir éste tema.

En primer lugar veremos que hay dos familias muy fácilmente distinguibles de integrados: TTL y CMOS. Como su nombre indica, la CMOS utiliza transistores tecnología MOS (MOSFET), y la TTL utiliza transistores BJT. Y ésto las hace diferentes.

Vamos a ver la nomenclatura de dichos integrados:

  • 74: Estándar TTL
  • 40 o 140: Estándar CMOS
  • 74S: TTL Schottky
  • 74L: TTL baja potencia
  • 74LS: TTL baja potencia Schottky (Ésta es la más usada)
  • 74H: TTL alta velocidad
  • 74AS: TTL Schottky avanzada
  • 74C: CMOS compatible con el patillaje de las TTL
  • 74HC: CMOS alta velocidad (Más usada, actualmente más que la TTL)
  • 74HCT: CMOS alta velocidad compatible con patillaje y tensiones de TTL

La familia 74HCT es muy importante hoy en día para reemplazar antiguos TTL o como compatibilidad con otros integrados de ésta tecnología, ya que tienen la misma distribución de patillas y semejantes características.

Características de Entrada / Salida

Ahora vamos a ver cómo sería una puerta inversora de tecnología TTL por dentro:

Dnotttl

Como veis la entrada está conformada por un transistor puesto al revés, un transistor especial que se comporta como dos diodos, uno mirando hacia la base de Q2 y otro mirando hacia la entrada. Si ponemos la entrada a 0, la corriente va de VCC por la base hasta la entrada, drenando la corriente de la base de Q2 y poniéndolo en corte, de forma que a la salida tenemos un 1. Si ponemos la entrada a 1, la corriente no tiene otra que ir hacia la base de Q2 y polarizarlo en saturación, así que en la salida habrá un 0.

Por ésta cuestión es que si dejamos una patilla de entrada TTL al aire (no conectada a VCC, a tierra, a ningún sitio con referencia), se toma como si hubiese un 1, porque la corriente no puede fluir a través del diodo, que está ahí por protección.

Muy importante: patilla de entrada TTL al aire = 1. Si se recuerda ésta regla, se pueden simplificar bastante algunos diseños en el futuro.

Y ahora observemos una puerta inversora CMOS:

DnotcmosEs muy importante que la entrada de una puerta CMOS siempre esté conectada a algo, ya sea HIGH o LOW, si no, tendremos un estado indeterminado.

Aquí no es necesario resitencias ni nada… Bueno, ésto se debe al control por tensión de las puertas, supuestamente su impedancia de puerta es infinita, por lo tanto no habría corriente de entrada. Vale, ésto es falso, pero si comparamos la corriente de polarización entre una TTL y una CMOS (74LS04 y 74HC04):

DIttls

DIcmos

Vemos que la CMOS tiene una corriente enana en comparación a la TTL. De 0.1uA (25ºC) a entre 20 y 100uA, hay bastante.

Otra cosa que se puede ver en la datasheet es la corriente a entrada LOW, es decir, cuando pongamos la entrada a masa (0), va a salir una corriente desde dicha entrada que polariza al transistor, por éso se expresa en negativo:

DIttll

Vemos un máximo de 0.4 mA en la TTL ¿Y en la CMOS? La diferencia es tan poca que, si os fijáis, ya viene dada en la tabla de antes (la datasheet no especifica Input HIGH o Input LOW para CMOS, sólo Input Current).

También a la salida tenemos unas especificaciones diferentes de corriente:

DIottlDIocmos

Como veis la TTL es capaz de entregar más corriente, sin embargo, debido a la corriente que necesita de entrada, no se pueden poner tantas puertas TTL en paralelo detrás de otra como si se tratase de CMOS. A ésto lo llamamos cargabilidad y va en número de puertas. Dados éstos datos podríamos poner unas 50 TLL o unas 200 CMOS.

Como el diseño TTL que hemos visto al principio otorgaba todavía menos corriente, se inventaron la salida totem-pole, que se basa en otra configuración de transistores añadida para aumentar la corriente de salida. Ésta configuración, creo, viene dada ya en todos los integrados. Los CMOS no la necesitan, pero se usan si son HCT para adaptar mejor.

Dtotem

Pero ahora vamos a meternos en el tortuoso mundo de los niveles de entrada salida en tensión.

Éstos niveles también nos los da el fabricante y nos dicen a partir de qué tensión nos aseguran que tenemos un 1 o un 0 a la entrada o a la salida. Se pueden ver en forma de gráfico, para simplificarlo, empecemos con un 74LS04:

Dvttl

Dvttl2

Ésto nos indica que a la entrada, lo que nosotros controlamos, si ponemos un rango de tensión de 0 a 0.8 voltios, el integrado seguro que lo capta como un LOW. Y lo mismo ocurre si ponemos, una tensión entre 2 y 5 voltios, el integrado seguro lo capta como HIGH. ¿Y por qué lo remarco? Porque ésto en realidad es cosa de estadística ¿Habéis visto el rango entre 0.8 y 2 voltios, el inaceptable? Supongamos que hemos elegido un integrado cualquiera, ponemos un regulador de tensión variable a la entrada y observamos cómo lo capta el integrado. Llegamos hasta 0.8 y subimos, quizás hasta 1 voltio no pase nada, 1.2, 1.4 … Quién sabe, el caso es que en un punto desconocido entre 0.8 y 2 voltios el integrado dejará de captar un 0 y captará un 1, pero no nos vamos a poner a mirar integrado por integrado cuál es éste punto (que además cambia por temperatura, humedad, calidad de alimentación, etc.), sino que hacemos una estadística y sacamos los márgenes. Es más un caso de asegurarse.

Y a la salida, cosa que no controlamos, obtendremos un rango de tensión que va entre 0 y 0.4 para un OUTPUT LOW y entre 2.4 y 5 voltios para un OUTPUT HIGH. Nos interesa éste dato para saber el margen de ruido, es decir, cuánto se puede mover la señal arriba o abajo para que el siguiente integrado de la cola lo capte bien y no se meta en zona “inaceptable”. Es cosa de restar:

  • Margen de ruido HIGH: 2.4 – 2 V = 0.4V
  • Margen de ruido LOW 0.8-0.4 = 0.4V

Importante para líneas que cojan ruido del ambiente o aparatos cercanos.

Para la tecnología CMOS ocurre algo similar, pero los márgenes son bastante más amplios, además de incluir en las datasheet varios en condición de la alimentación, ya que un integrado CMOS puro (no HCT), puede ser alimentado en rangos muy distintos de tensión, límites recomendados por el fabricante que podrían llegar a estar entre 1.2 y 15 voltios.

Dvcmos

Así por ejemplo, con unos 5V de alimentación tendríamos HIGH con un input de 3.15 hasta Vcc y LOW entre 0 y 1.35V

En la salida tendríamos un HIGH con tensión mínima de 4.4V y un LOW con tensión máxima de 0.1V.

Otra cosa a tener en cuenta son los tiempos de retardo, es un pequeño tiempo que necesitan los transistores para polarizarse. Ésto hace que la reacción entre que se aplica una entrada y hay una salida no sea inmediata, sino que tarde un poco, aunque sean nanosegundos (del orden éste van las cosas). La tecnología TTL siempre ha sido más rápida que la CMOS, razón por la que se usa la familia HC (high speed CMOS), aunque hoy en día casi se podría decir lo contrario.

Control de entrada con botón y resistencia pull-up o pull-down

En muchos sistemas, sobre todo ya podéis haberlo visto en PICs y Arduinos, se utiliza un pequeño circuito de input con un botón y una resistencia, uno de ellos va a tierra y otro a alimentación. Si la resistencia va a masa, entonces la llamamos pull-down, y si va a alimentación es de pull-up. Entonces el circuito puede ir así:

Dsw1

Dsw2

Pero ojo, porque ésto nos trae otro dolor de cabeza. Tenemos que buscar el equilibrio entre resistencia-tensión LOW-corriente HIGH.

En el primer caso, hay que ponerle un valor a la resistencia de tal forma que cuando el interruptor esté abierto y queramos un LOW a la entrada, la corriente que se drena no aumente la tensión hasta V input HIGH y confunda al integrado. Por ejemplo en un TTL como el que ya hemos visto tendríamos un rango de resistencia con máximo de 0.8/0.0004 = 2k ohmios, pero no podemos ponerle el valor demasiado pequeño, porque entonces disiparía demasiada potencia, y el circuito consumiría muchísimo.

En el segundo caso, la resistencia debe ser lo suficientemente pequeña para dejar pasar la corriente mínima de polarización: 5/0.00002 = 250k ohmios máximo.

Entre otras maldades, podemos poner en la entrada un sensor de luz, basado en sólo una resistencia y un LDR, y calcular el divisor de tensión, dimensionando la resistencia para tener el margen necesario y que la puerta se active con cierto nivel de luz.

Existen puertas con histéresis que realmente, en la zona “inaceptable”, no cambian hasta llegar a los niveles máximos y mínimos. Éstas se usan para señales con mucho ruido, distorsionadas o que entran con defectos.

Digital 0: Introducción

Bienvenidos al nuevo curso. Éste año tendréis por aquí más cosas nuevas como electrónica digital y electrónica de potencia. Otra vez más me voy a permitir el lujo de saltarme la gran mayor parte de la introducción, es decir, el porqué de las cosas, y vamos directos a aprender.

En digital, ya sabéis, las cosas funcionan mediante un estado binario: alto (1, o voltaje alto Vh, o H) y bajo (0, o voltaje bajo Vl, o L).

Lo que hacemos es combinar éstos estados que nos traen los sensores, botones o actuadores que ponemos a las entradas mediante puertas AND, OR y NOT para al final obtener el resultado que queramos. Sí, mediante éstas puertas se puede conseguir cualquier función lógica. Aunque en realidad la puerta más básica es la NOT seguida de la NAND, la más usada para simplificar.

¿Cómo conseguimos sacar ésas funciones lógicas?

En primer lugar, construiremos una tabla con todos los estados de las entradas posibles y la salida que se le atribuye a cada combinación. La tabla siempre tiene un número de filas correspondiente a una base 2, es decir, si tenemos 3 entradas, 2^3=8 filas. Ahí va el ejemplo:

Dtabla

Como podéis ver, se muestran todas las combinaciones posibles de A, B y C. Y sabemos en cada combinación cuál va a ser la salida que queremos. ¿Y ésto para qué? Bien, podéis sacar de ahí mismo la función mediante sumas de productos o productos de sumas. Ojo:

  • Mediante sumas de productos: lo que hacemos es fijarnos en los 1 de la salida, y para cada 1 hacemos el producto del estado de las entradas (normal si es 1 y negado si es 0), luego sumamos todos esos productos. De ésta forma sale enseguida que:

Dsp

  • Mediante productos de sumas: ésta vez nos fijamos en los 0 de la salida, y para cada 0 hacemos la suma del estado de las entradas (normal si es 0 y negado si es 1), el mundo al revés. Y luego se multiplican todas ésas sumas. No lo voy a hacer porque, he aquí la desventaja del método, es largo, y ya os lo podéis imaginar.

Vaya, ésto se hace demasiado largo, ahora teníamos 8 combinaciones, pero con 4 entradas serían 16 y con 5, 32, y ya mejor ni pensarlo. ¿Qué podemos hacer? Un mapa de Karnaugh. Es un método que, además de hacer la cosa más corta y visual, ya sale la función simplificada al máximo, sin añadir álgebra ni cosas extrañas que no queremos aprender. Aunque, éstos mapas siguen el código Gray, una forma de secuencia del sistema binario en el que las diferencias entre uno y el siguiente ocurren sólo en 1 de los dígitos: 00 01 11 10. Y el mapa se monta así:

DKarn

En éste caso no nos ha salido un mapa muy agraciado, y tenemos un 1 suelto por ahí sin pareja. Sí, la cosa se trata de emparejar unos, de dos en dos, o de 4, o de 8… Siempre en base 2. Y lo bonito es que, tal como dijeron los griegos y ratificaron Magallanes y Elcano sobre nuestro planeta, el mapa es esférico. Vamos a emparejar primero la tabla tal como está y luego la modifico un poco para ver cómo funciona:

DKarn2

En éste caso tendríamos dos grupos, uno de 2 y otro de 1 (es válido porque 2^0=1). Y la función se escribe: cojo un grupo, miro a los lados ¿El número de la entrada A cambia? Sí, pues lo quito, no, pues lo dejo. En éste caso no, y es 0, así que se incluye y negado. Tampoco cambia C y es 1 así que no negado. La B no entra porque cambia. Con el 1 que está sólo no nos queda más remedio que escribir las 3 entradas.

DKarn3

Ahora quizás no lo apreciáis bastante, pero os aseguro que se ha acortado bastante la cosa, sobre todo si vas a dibujar el circuito. Y ya ni digamos si vas a montarlo. Porque habéis pasado de usar unas 11 puertas a 6. Y se nota.

Ahora voy a hacerle un pequeño cambio a la tabla:

DKarn4Como veis, he añadido un 1 abajo a la derecha y los colores han cambiado. En realidad es una chapuza porque, como todos sabemos, azul + amarillo = verde. Lo que he hecho ha sido mantener la pareja de unos que ya teníamos antes, y emparejar a la vez el de abajo a la izquierda con el de abajo a la derecha. Porque cada extremo del mapa se une. Perdón por el mareo, pero lo vamos a ver de otra forma:

DKarn5

Ahora vamos a volver a nuestra tabla de antes, sin modificar. Hemos sacado la función, muy bien simplificada, con el mapa. Pero ahora queremos implementarla en un sistema real y, oh, necesitamos 3 circuitos integrados: 1 NOT, 1 AND y 1 OR. Y éso ocupa espacio y dinero. ¿Podemos hacer que funcione todo el circuito con sólo una compuerta lógica? ¡Sí! Normalmente entre NAND y NOR usamos la NAND, que se hace de la siguiente forma: negamos dos veces la función y aplicamos algo “mágico”.

Dboole

De ésta forma, si aplicamos la doble negación:

DNand

Como veis, aún se quedarían las entradas A y C negadas en la entrada, al principio.¿Usaremos NOT igualmente? No, porque podéis usar una puerta NAND uniendo sus dos entradas, convirtiéndola en una y ahí enganchando la entrada para negarla.

¿Qué hemos hecho con ésto? Pues ahora necesitamos 5 puertas, pero sólo 2 integrados. En éste caso, debido al 1 que andaba solitario (sí, estaba para molestar) necesitaremos un circuito integrado que lleve 4 NAND 2-Input y otro que lleve 3 NAND 3-Input, para éste circuito:

Dcircuito

No es lo idóneo que haya una NAND de 3 entradas por ahí, pero bueno, nos ha salido rana el ejemplo, es lo que tiene no preparárselo antes de escribir.

Y ésto va a ser todo por hoy, es la base y el pan digital de cada día. Todos los días nos toca hacer alguno de éstos en clase.