Codificadores

Los codificadores son circuitos combinacionales generalmente de 2^N entradas y N salidas, donde las salidas son el código binario correspondiente al valor de una de las entradas activas según un criterio de selección(prioridad).
Se entenderá mejor con un ejemplo: En una calculadora cuando pulsamos cualquiera de las diez teclas numéricas de una calculadora estamos marcando un número decimal, pero la calculadora opera con número en binario. Para expresar en binario del 1 al 10, necesitamos al menos cuatro bits, ya que con tres solamente podríamos establecer 2³=8 combinaciones posibles (es decir del 0 al 7) y no podríamos codificar los diez dígitos necesarios.
Por lo tanto, emplearemos 4 salidas. Como con 4 salidas (4 bits) tenemos 16 combinaciones y empleamos 10 (del 0 al 9), o bien dejaremos seis combinaciones sin emplear, o las utilizaremos para codificar cualquier otra función representada en alguna de las teclas de la calculadora.

Codificadores sin prioridad

Cuando el codificador solamente permite que UNA de las entradas tome el estado lógico 1 estamos ante codificadores sin prioridad. Su funcionamiento se basa en puertas lógicas OR y por lo tanto no necesitan de ningún circuito especial.
Al usar este tipo de codificadores pueden darse casos en los que se genere confusión. Por ejemplo, cuando un valor de salida pueda corresponder a varias entradas.

Tabla de verdad de un codificador sin prioridad de 8 a 3, es decir, de ocho entradas y tres salidas

Las funciones lógicas para cada salida las podemos obtener de la tabla de verdad realizando el OR lógico de las entradas a 1 en las filas que producen 1 en dicha salida.

Por lo tanto, el circuito lógico implementado con puertas OR sería el siguiente:

Codificadores con prioridad

Para evitar los errores en las salidas cuando tenemos más de una entrada que puede tomar el estado lógico 1 debemos utilizar los codificadores con prioridad. Por ejemplo, se pulsa "I3" y "I6", la salida en este caso sería de "I6": "1101". Si se elige otra entrada menor a seis no habría cambio alguno, de lo contrario, la salida será de origen "I7" en este ejemplo: "1111".
Entonces, estos codificadores seleccionan la entrada de mayor prioridad cuando hay más de una entrada que toma el estado lógico 1 simultáneamente.
En los codificadores con prioridad alta la salida generada será la del mayor indice de entrada puesto a 1. En los codificadores con prioridad baja, la salida corresponderá al menor indice de entrada puesto a 1.

Tabla de verdad para un codificador con prioridad alta de 8 a 3. La salida Z indica si alguna de las entradas está a 1 y X significa que el estado es irrelevante.

Para hallar la función lógica de cada salida realizamos la operación lógica OR en cada fila que de 1 en dicha salida. Las expresiones se simplifican mediante álgebra de conmutación.

Youtube: "Codificadores 4x2, 8x3" de "Les Ingenieurs".

Aplicaciones de codificador digital

Codificador de teclado QWERTY

Los codificadores de prioridad se pueden usar para reducir la cantidad de cables necesarios en un circuito o aplicación en particular que tienen múltiples entradas. Por ejemplo, suponga que un microordenador necesita leer las 104 teclas de un teclado QWERTY estándar donde solo se presionará una tecla "ALTA" o "BAJA" en cualquier momento.
Una forma sería conectar los 104 cables de las teclas individuales del teclado directamente a la entrada de la computadora, pero esto no sería práctico para una PC doméstica. Otra alternativa y mejor manera sería conectar el teclado usando un codificador de prioridad.
Los 104 botones o teclas individuales podrían codificarse en un código ASCII estándar de solo 7 bits (0 a 127 decimal) para representar cada tecla o carácter del teclado y luego ingresarse como un código BCD(Decimal codificado en binario) de 7 bits mucho más pequeño directamente en la computadora . Los codificadores de teclado, como el codificador de 20 teclas 74C923, están disponibles para hacer precisamente eso.

Codificadores posicionales

Otra aplicación más común es el control magnético de posición como se usa en la navegación de barcos o para la posición del brazo robótico, etc. Aquí, por ejemplo, la posición angular o giratoria de una brújula se convierte en un código digital mediante un codificador de prioridad de línea de 8 a 3 de 74LS148 y la entrada a la computadora del sistema para proporcionar datos de navegación y un ejemplo de un encoder de compás de salida de 8 bits a 3 bits simple se muestra a continuación. Los imanes y los interruptores de láminas podrían usarse en cada punto de la brújula para indicar la posición angular de las agujas.

Solicitudes de interrupción

Otras aplicaciones, especialmente para los codificadores de prioridad, pueden incluir la detección de interrupciones en las aplicaciones de microprocesadores. Generalmente se aplica para realizar tareas elementales asincrónicas en el computador tales como responder al teclado, escribir en la pantalla, leer y escribir archivos. Podemos considerar una tarea asincrónica como aquella que es solicitada sin previo aviso y aleatoriamente desde el punto de vista del computador.
Es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente del computador y luego continuar su ejecución como si nada hubiera pasado.
Tomemos el caso de la operación Ctrl-Alt-Supr, conocido como "three-finger salute" y actualmente activo para distintos Sistemas Operativos. Cuando el usuario presiona simultáneamente dichas teclas el computador procede a reinicializarse, aunque pueda estar ocupado ejecutando un programa en ese instante. Vale decir que fuerza el reinicio. Ya sea en el sistema Windows o en DOS, el computador no está constantemente monitoreando el teclado para ver si el usuario ha solicitado un Ctrl-Alt-Del, ya que en ese caso consumiría mucho tiempo de proceso en ello y por ende la capacidad de proceso se vería significativamente afectada. La solución empleada es una interrupción.
Luego cada vez que el usuario presiona una tecla, la CPU es advertida a través de una señal especial de interrupción. Cuando la CPU advierte/recibe una señal de interrupción suspende temporalmente el proceso actual almacenando en memoria RAM un bloque con toda la información necesaria para restablecer posteriormente la ejecución del programa si es que procede. Enseguida la CPU determina qué elemento ha solicitado la interrupción y para cada caso existe un bloque de instrucciones que realiza la tarea correspondiente que es ejecutada a continuación. Terminada la ejecución se restablece el programa original en el mismo punto en que fue interrumpido usando para ello la información almacenada previamente.