lunes, 15 de octubre de 2012

Solicitud de atención en clínica: Codificador de prioridad con Sonido.

Vamos a proceder como trabajo de Laboratorio a diseñar e implementar un codificador de prioridad que permita prestar atención a pacientes en un piso de una clínica que suponemos dispone de 5 habitaciones. Las habitaciones están numeradas del 1 al 5, y al oprimir un pulsador debe aparecer en un display el número de la habitación  y mediante el sintetizador de sonido ISD1964  se  debe escuchar a través de un parlante desde qué habitación se solicita la atención. La prioridad está en la habitación 1, luego le sigue en prioridad la 2, luego la 3, luego la 4, siendo la 5, la que menos prioridad tiene en ser atendida.

Veamos la tabla de verdad para el codificador de prioridad (priority encoder) requerido, donde disponemos de 5 entradas para los pulsadores,  y  de 10 salidas ( 3 salidas A2,A1,A0 para direccionar el chip de sonido, y las 7 salidas de los leds del Display Anodo Común).

P1    P2     P3     P4     P5         A2     A1    A0      a      b     c      d      e      f        g
 0      X       X       X       X           0       0       1      1       0      0     1      1      1       1    
 1      0       X       X       X           0       1        0      0       0     1      0      0      1       0
 1      1       0       X       X            0      1        1       0       0      0     0     1       1      0 
 1      1      1         0       X           1       0        0      1       0      0     1     1       0       0
 1      1      1        1        0           1       0        1       0       1     0     0      1      0       0
 1      1      1        1        1           0       0        0       1       1     1     1      1      1       1

Vamos a interpretar esta tabla de verdad. La primera fila nos dice que si P1 = 0, no importa si los otros pulsadores se están accionando o no, porque P1 tiene la prioridad, y en las salidas generamos en A2 A1 A0 el código 001 para direccionar el chip de sonido y poder grabar y luego reproducir el mensaje "Se solicita atención sala 1". Las otras salidas generan el caracter 1  en el display de 7 segmentos, ánodo común. La segunda fila nos dice que si P1 no está accionado, o sea P1 = 1, si P2 = 0 ( pulsador normalmente abierto oprimido para fijar la entrada a tierra o 0 voltios), entonces sin importar los demás pulsadores P3,P4,P5 si están oprimidos o no, se genera en las entradas de dirección A2 A1 A0 el código 010, y en el display de 7 segmentos los bits correspondientes para visualizar el 2.

Si quisieramos obtener las ecuaciones Booleanas para las salidas,necesitariamos Mapas de karnaugh de 5 variables, el cual se elabora con dos mapas de 4 variables tal como el mostrado a continuación:


Si, utilizando el programa LOGICAID, elaboramos un Mapa de Karnaugh similar al anterior para hallar la ecuación para la salida A2  encontramos:
A2  =  P1 P2 P3 P4' + P1 P2 P3 P5' .

Como es dispendioso (aunque no difícil) obtener las ecuaciones por Mapas de karnaugh, programamos la GAL22V10 manejando con el Isplever en la opción ABEL-HDL la tabla de verdad.

Equations

   Truth_Table   ( [P1,P2,P3,P4,P5] -> [ A2,A1,A0,a,b,c,d,e,f, g ])
                         [ 0, .X., .X., .X.,.X.] ->  [ 0,  0, 1,  1, 0, 0,1,1,1,1 ];
                         ...........................................................................
                          [ 1,  1,  1,    1,    1] ->  [0,  0, 0,  1, 1, 1,1,1,1,1 ];

Observe que en ABEL la condición de indiferencia se escribe .X. ( una X dentro de 2 puntos).

En la última fila de la tabla podemos observar que si ningun pulsador está oprimido se genera el código A2 A1 A0 = 000, donde no hay mensaje alguno grabado, y el display tendrá todos sus 7 leds apagados.

El bit de dirección A3 para el chip de sonido hay que fijarlo a tierra, para que solamente funcionen los 3 bits menos significativos. 

Al accionar cualquier pulsador debe activar el nivel bajo para el codificador de prioridad y a la vez activar el PLAYE del sintetizador de sonido.

Observe el diagrama para el pulsador P1, entendiéndose que para cada pulsador es un diagrama similar:
Si deseamos, en lugar de la GAL podemos utilizar un codificador de prioridad TTL como el integrado 74LS148 o su equivalente  9318:
Veamos su tabla de verdad:

El lector podrá observar que como sus salidas son activas en nivel bajo, y  si no queremos invertir A2,A1,A0, podemos entonces hacer P1 = 6 (pin 3), P2 = 5 (pin 2), P3 = 4 (pin 1), P4 = 3 (pin 13) y P5 = 2 (pin 12).

Desde luego que A2,A1,A0 debe ir al chip de sonido y a la vez a un decoficador BCD a 7 segmentos como el integrado TTL 74LS47 para la visualización en el display de ánodo común.




El diagrama completo se muestra a continuación:
No siempre tenemos a la mano el SuperproZ para programar la GAL.  Es entonces cuando se hace útil otras alternativas, como la mencionada de Lógica Cableada.










domingo, 14 de octubre de 2012

Sintetizador de sonido ISD1964: Laboratorio con Dip-Switch de 4 interruptores para grabar y reproducir 16 mensajes

El Sintetizador de sonido ISD1964 permite ser direccionado para grabar audio y luego reproducirlo en cada dirección de la memoria EEPROM interna donde fué grabado el mensaje.Como viene en encapsulado SOIC de montaje superficial, se elaboró,  mediante una tarjeta de circuito impreso,una adaptación a DIP para poder trabajarlo en la protoboard colocándole todos los elementos requeridos para su óptimo funcionamiento.Requiere de un micrófono ELECTRE polarizado, y Speaker de 16 ohmios, sirviendo los parlantes utilizados para Multimedia. La siguiente presentación en Power Point, describe resumidamente su arquitectura y forma de utilizarlo. ISD es la sigla de INFORMATION  STORE DEVICE  (Dispositivo para almacenar Información). Se pueden grabar y reproducir 16 mensajes de 4 segundos cada uno, para un total de 64 segundos, de ahí deriva el 64 en su rótulo. 













Los pines S0 (Start Input) y E0 (End Input) no se encuentran puenteadas en la plaqueta,por consiguiente hay que cablear externamente en el protoboard, y así mismo S1 con E1, S2 con E2, y S3 con E3. Quedan entonces sólo 4 pines de entradas de dirección que las podemos denominar A3,A2,A1 y A0, con los cuales podemos establecer las 16 direcciones: desde 0000 hasta 1111, donde en cada dirección podemos grabar y reproducir un mensaje de 4 segundos de duración, siempre y cuando se coloque una  resistencia de 80 KiloOhmios, como Rosc, y se pueda establecer la frecuencia de muestreo apropiada. En la plaqueta se dispone de una resistencia ya incorporada de 100 kilo-ohmios, con lo cual aumenta un poco el tiempo del mensaje a grabar pero disminuye así mismo la calidad del audio grabado. No se pudo obtener la resistencia de 80 K para montaje superficial. Para grabar se activa el pulsador REC habiendo seleccionado previamente la dirección y se habla a través de un micrófono ELECTRE sin pasarse de los 4 o 5 segundos . El Led con ánodo a Vcc, se debe encender mientras se está grabando.   Para escuchar lo grabado, en la misma dirección, se oprime el pulsador PLAYE (play Edge) o PLAYL (play Level). Un pulsador permite la reproducción por el flanco (se oprime y se suelta) y el otro pulsador lo hace por el nivel (debe permanecer el pulsador todo el tiempo oprimido en nivel bajo).

LABORATORIO:  Se trata mediante un Dip-Switch de 4 interruptores direccionar y grabar 16 mensajes.
 Al direccionar 0000 se debe grabar la palabra CERO en español e inglés, con 0001 la palabra UNO, y así sucesivamente hasta en 1111 grabar y reproducir la palabra QUINCE.




NOTA IMPORTANTE: HAGA EL PUENTE ENTRE A3 CON  A3, A2 CON A2, A1 CON A1 Y A0 CON A0. INDISPENSABLE PARA GRABAR EN TODAS LAS DIRECCIONES.

Veamos una fotografía del montaje realizado en el protoboard:

 .................................................................................................................................................................
Nota: El creador de este blog agradece públicamente a JOSE MIGUEL CEBALLOS FORERO y a su empresa KANANCE INGENIERIA de Mosquera,Cundinamarca, con su  excelente grupo de trabajo( Yamit, Michel, Edwin, Diego, Pedro, Yaneth),  por la colaboración en la importación del Chip, diseño, elaboración y pruebas de la tarjeta que nos permite trabajar con este interesante sintetizador de sonido. Los estudiantes de la asignatura DIGITALES 1, UAN,Bogotá,  están muy interesados en visitarlos y  aprender de su experiencia y conocimientos.
...................................................................................................................................................................


miércoles, 3 de octubre de 2012

Contador decodificado : Laboratorio.

Un decodificador, o  DECODER ( en inglés), como su nombre lo indica, descifra un "código". Analice el gráfico siguiente que presenta claramente la idea:
Como laboratorio, vamos a utilizar 2 GAL 22V10 para implementar un contador de anillo de 16 bits.

Utilizando un 555 como reloj, en una GAL1  implementamos un contador binario ascendente  de 4 bits, que cuente del 0 al 15 (desde 0000 hasta  1111 en binario), y aprovechando su versatilidad obtenemos las salidas Y0,Y1,Y2,Y3,Y4 y Y5, del decodificador.

Con la GAL2  elaboramos la otra parte del decodificador de 4 entradas, o sea las 10 salidas restantes (Desde Y6  hasta Y15).


Observe que las salidas Q3,Q2,Q1 y Q0 del contador de 4 bits, van conectados a los pines 4,6,8,y 10, de ambas GAL (Las entradas D,C,B y A del decodificador).

Para trabajar con el Isplever de Lattice Semiconductor para la GAL1  primero elabore el contador de 4 bits mediante tabla de estados manejando los flip-flops Q3,Q2,Q1 y Q0 como salidas modo registro,buffer:  ISTYPE 'reg,buffer'. Compile y elabore el archivo en ABEL-HDL, y genere el respectivo símbolo esquemático (una cajita con su entrada de reloj (Clock) y  sus 4 salidas:Q3,Q2,Q1 y Q0).  No es conveniente desde ya efectuar los enlaces (link) para crear el mapa de fusibles, sino que este paso lo dejamos para el final, cuando ya esté terminada la GAL con su contador y sus salidas del decodificador Y0,Y1,Y2,Y3,Y4 y Y5.   Para agregar al contador la parte del decodificador desde Y0 hasta Y5, elabore en la misma GAL22V10 ahora una tabla de verdad con entradas D,C,B,A y salidas Y0,Y1,Y2,Y3,Y4,Y5, salidas combinatorias: ISTYPE 'com,buffer'. Recuerde que el Isplever entiende el símbolo :> para la tabla de estado y  ->  para la tabla de verdad, aunque se denomina igual:  Truth_table. Genere el símbolo esquemático para el decodificador parcial Y0...Y5, y  luego cree un nuevo archivo esquemático final, donde se llaman los símbolos (cajitas) tanto del CONTADOR como del DECODER, para que les coloque las entradas : Clock, D,C,B,A  y las salidas: Q3,Q2,Q1,Q0,Y0,Y1;Y2,Y3,Y4,Y5. y compile este archivo final.
Ahora si se efectuan los enlaces (Link) y se indaga por la capacidad de la GAL para implementar lo requerido (Fit), para crear, ahora sí, el mapa de fusibles y el Chip Report, donde se presenta la configuración de pines definitiva. Desde luego que lo mas importante de todo es el archivo JEDEC (mapa de fusibles) de la GAL1, pues es el que nos exige el superpro Z para poder programar la GAL.

 Si se pretende cablear, en el archivo esquemático final, las salidas del contador Q3,Q2,Q1,Q0 con las entradas D,C,B,A, para no hacerlo manualmente en el protoboard, es probable que al compilar el esquemático se genere error al efectuar la opción FIT y no nos pueda crear el mapa de fusibles.Ello es debido a la imposibilidad de la GAL, de acuerdo a su arquitectura, para llevar las salidas del contador a la entradas del decodificador.  Para conocer estos detalles, es muy conveniente estudiar la arquitectura de la GAL ( está muy bien explicado en los capítulos 7 y 11 del libro de Digitales, Thomas Floyd, 7a.Edición).


Para la GAL2, es mucho mas sencillo el procedimiento, pues solo se requiere elaborar la tabla de verdad del decodificador con entradas: D,C,B,A y en este caso las 10  salidas combinatorias Y6,Y7,Y8,Y9,Y10,Y11,Y12,Y13,Y14,Y15.   Desde luego que hay que cablear en el protoboard D,C,B,A  a las salidas del contador Q,Q2,Q1,Q0 de la primera GAL.


Sería preferible, por consumo de corriente, que los veinte leds ( 4 del contador  y  16 del decodificador) estén en ánodo común y no en cátodo común, o sea que los leds en lugar de encender con los UNOS se encendieran con los CEROS lógicos.   


Muchas veces se requiere manejar buffer three-state ( tres estados) no inversores con el fin de amplificar corriente sin variar los niveles lógicos. 

El buffer de 3 estados se llama así porque al trabajar como un switch o interruptor a la salida además del CERO y UNO lógicos se puede tener un tercer estado de ALTA IMPEDANCIA (circuito abierto) dependiendo de una entrada de habilitación llamada ENABLE.


En el dibujo vemos que si B (Enable) vale un UNO lógico, el buffer se comporta como una compuerta YES, cumpliendo con su función amplificadora de corriente, pero si B = 0, la salida es ALTA IMPEDANCIA comportándose como un circuito abierto.

El buffer puede tener su entrada de control o Enable activo con nivel bajo tal como se observa en la siguiente gráfica:


En este caso, cuando el ENABLE = 0, el buffer se comporta como interruptor cerrado (compuerta YES), y cuando el ENABLE = 1, el buffer se comporta como interruptor abierto ( ALTA IMPEDANCIA).

A nivel comercial existen varias referencias de buffer no inversores de 3 estados, como el chip 74LS125: 


El  74LS244 ( 8 buffer con Smith Trigger incorporado para arreglar la forma de onda) se muestra a continuación:

Observe que el pin 1 dispone del ENABLE en nivel bajo para manejar 4 buffer, y el pin 19 maneja los otros cuatro buffer.

Para el laboratorio presente del contador decodificado es conveniente colocar buffer a las salidas del contador Q3,Q2,Q1,Q0 para manejar las entradas del decodificador D,C,B,A tanto de la GAL1 como de la GAL2, para amplificar corriente, y el contador no se bloquee o se altere en su secuencia, por problemas de carga.

Se recomienda, además,  para las salidas del decodificador, utilizar dos barras de 8 leds cada una, similares a la mostrada en la siguiente gráfica:
Para las salidas del contador utilizar otra barra de 4 leds:
                                                            
Con dos barras de Leds de 10 pines cada una, se tendría el número preciso de Leds requeridos.

Estas barras se pueden montar con facilidad en el protoboard y los leds consumen mínima corriente, y no causan problema por carga en la GAL. Desde luego lo recomendable es siempre usar para cada led su respectiva resistencia ( 220 ohmios, 1/4 watio). Para nuestro caso requerimos 20 resistencias.

Recuerde además que el 555 está trabajando en la primera Gal como Astable (generador de pulsos):


La frecuencia se calcula por la fórmula:  f (clk) = 1,44 / ( R1 + 2 R2). C

En caso de que el lector desease utilizar lógica cableada en lugar de la programación de las GAL, debe usar un contador comercial de 4 bits, por ejemplo, el 74LS93  y decodificarlo con un 74LS154.

El  74LS93 es un contador asíncrono implementado con 4 flip-flops J-K. 

Se puede trabajar con 3 o 4 bits, por ello dispone de 2 entradas de reloj CP1 y CP0.  Para trabajarlo con 4 bits que es nuestro caso, se conecta Q0 a CP1  y se introduce la señal astable del 555 por la entrada CP0.   MR1 y MR2 deben estar a tierra.
En lugar de CP1 y CP0 las entradas de reloj se pueden llamar CKB y CKA,  y en lugar de MR1 y MR2 las entradas para resetear el contador se denominan R0(1) y R0(2), tal como lo muestra el Data Sheet de un fabricante del integrado.Asi mismo las salidas del contador se llaman QD,QC,QB,QA en lugar de Q3,Q2,Q1,Q0, donde Q3=QD es el bit más significativo y Q0=QA corresponde al bit menos significativo.

El  74LS154 decodifica   QD,QC,QB,QA a 16 salidas activas en nivel bajo.

El 74LS154 ( de 24 pines)  dispone  de 4 entradas y 16  salidas, y   obedece la siguiente tabla de verdad:

 

74LS154 (74154) Pinout
Las salidas QD,QC,QB,QA del contador deben estar puenteadas con las entradas D,C,B,A del decodificador.



  

  









martes, 2 de octubre de 2012

¿Que tanto sabemos ?




SOLUCIONES:
1.   D             2. D             3. C             4. C              5. A    
6. D             7. A             8. D             9. A              10. B  

viernes, 28 de septiembre de 2012

Display de 7 segmentos en Hexadecimal con GAL22V10


Vamos a manejar un display de 7 segmentos, cátodo común, miniatura de referencia SM420561K para ser implementado en el protoboard.

El display dispone de 7 leds para los segmentos a, b, c, d, e, f, g tal como se muestra en la figura anterior.Además se dispone de un octavo led para el punto. La configuración de pines se indica también en la figura. Existen dos pines para el cátodo común que debe conectarse a GND (tierra).

El objetivo del presente proyecto es visualizar en el display los números del 0 al 9, y las letras A,B,C.D,E,F,
del sistema numérico  Hexadecimal.
El punto solo enciende con las letras.



En los almacenes especializados venden  cables  de colores, muy útiles para llevar un orden y no confundirnos al  conectar el display a los pines de la GAL:
Conectores rápidos Macho - Macho 12" x 10
Nosotros conectamos cada segmento con un cable de color específico tal como se muestra en el siguiente esquema, disponiendo de una resistencia de 220 ohmios, 1/4 watio, en serie con cada diodo led, para limitar  la corriente en cada led,  protegiendo la GAL y el Display:
Para programar la GAL trabajamos con el ISPlever de Lattice Semiconductor usando la opción ABEL_HDL:

Veamos el archivo creado en lenguaje ABEL:


MODULE D0F

TITLE 'display del 0 hasta la F'


Clock pin 1;"Se declara el pin 1 como la entrada del reloj

a,b,c,d,e,f,g,p pin 23,22,21,20,19,18,17,16 ISTYPE 'reg,buffer';"Se declaran los pines de salida modo registro (Flip-flops)


Equations

[a,b,c,d,e,f,g,p].CLK = Clock ;"Se indica que los 8 flip-flops trabajan con el mismo reloj


"NOTA: Los flip-flops,por defecto,inician con salida en nivel bajo (todos los segmentos apagados en display de cátodo común)


Truth_Table ([a,b,c,d,e,f,g,p] :> [a,b,c,d,e,f,g,p]) "Se señala la tabla de estado
             [0,0,0,0,0,0,0,0] :> [1,1,1,1,1,1,0,0]; "Al llegar el flanco de subida del reloj se visualiza el CERO
             [1,1,1,1,1,1,0,0] :> [0,1,1,0,0,0,0,0]; "Cambia del CERO al UNO 
             [0,1,1,0,0,0,0,0] :> [1,1,0,1,1,0,1,0]; "Cambia del UNO al DOS 
             [0,1,1,0,0,0,0,0] :> [1,1,1,1,0,0,1,0]; "Cambia del DOS al TRES 
             [1,1,1,1,0,0,1,0] :> [0,1,1,0,0,1,1,0]; "Cambia del TRES al CUATRO    
             [0,1,1,0,0,1,1,0] :> [1,0,1,1,0,1,1,0]; "Cambia del CUATRO al CINCO 
             [1,0,1,1,0,1,1,0] :> [0,0,1,1,1,1,1,0]; "Cambia del CINCO al SEIS
             [0,0,1,1,1,1,1,0] :> [1,1,1,0,0,0,0,0]; "Cambia del SEIS al SIETE
             [1,1,1,0,0,0,0,0] :> [1,1,1,1,1,1,1,0]; "Cambia del SIETE al OCHO
             [1,1,1,1,1,1,1,0] :> [1,1,1,0,0,1,1,0]; "Cambia del OCHO al NUEVE
             [1,1,1,0,0,1,1,0] :> [1,1,1,0,1,1,1,1]; "Cambia del NUEVE a la A (Mayúscula) y enciende el punto 
             [1,1,1,0,1,1,1,1] :> [0,0,1,1,1,1,1,1]; "Cambia de la A a la b (Minúscula) y enciende el punto 
             [0,0,1,1,1,1,1,1] :> [1,0,0,1,1,1,0,1]; "Cambia de la b a la C y sigue encendido el punto  
             [1,0,0,1,1,1,0,1] :> [0,1,1,1,1,0,1,1]; "Cambia de la C a la d y sigue encendido el punto
             [0,1,1,1,1,0,1,1] :> [1,0,0,1,1,1,1,1]; "Cambia de la d a la E y sigue encendido el punto 
             [1,0,0,1,1,1,1,1] :> [1,0,0,0,1,1,1,1]; "Cambia de la E a la F y sigue encendido el punto 
             [1,0,0,0,1,1,1,1] :> [1,1,1,1,1,1,0,0]; "Retorna de la F al CERO, apagándose el punto 

END

Compilamos, y efectuamos la simulación:

Creamos el CHIP REPORT y el archivo JEDEC para programar la GAL:










miércoles, 5 de septiembre de 2012

Lógica programable con GAL22V10


Los dispositivos lógicos programables PLD  como las PAL y GAL nos permiten disponer de chips personales,  que respondan  a nuestras necesidades específicas. Para su programación hay que crear un mapa de fusibles o archivo JEDEC.




Vamos a comenzar a trabajar la GAL22V10 programada a traves del sofware ISPLEVER de Lattice Semicoductor.
Para su programación utilizaremos el SUPERPRO Z
Lo invitamos a visitar la página http://es.wikipedia.org/wiki/L%C3%B3gica_programada