Decodificador Binario a Hexadecimal con Display 7 Segmentos y Compuertas Lógicas
Multiplexación de Display 7 Segmentos
-
Upload
pedro-daniel-ramirez-lopez -
Category
Engineering
-
view
120 -
download
5
Transcript of Multiplexación de Display 7 Segmentos
Universidad Católica“Nuestra Señora de la Asunción”
Sede Regional AsunciónFacultad de Ciencias y Tecnología
Departamento de IngenieríaElectrónica e Informática
Carrera de Ingeniería Electrónica
Sistemas Digitales 1
Díaz, AndrésQuiñonez, Bladimir
Ramírez, Pedro <[email protected]>
Práctica de Laboratorio III
1 Practica 1 2
1. Practica 1Diseñar un circuito con una entrada de datos de 8 bits, y una entrada deselección de 2 bits. El selector debe habilitar el conjunto de 7 segmentos alcual corresponde el dato en la entrada, similar al que se observa en la figura1. El circuito de funcionar a una frecuencia máxima de 1,5kHz. (vamos autilizar una frecuencia de 1kHz, pero establecemos una frecuencia mínimade funcionamiento como respaldo)
Figura 1: Circuito de selección de datos.
D0,1,2,3, display 7 segmentos. Indicar si son ánodo común, o cátodo común.Realizar los cambios pertinentes para en el caso de utilizar ánodo común.
Rlim, conjunto de 8 resistencias limitadoras. Indicar los cálculos realizadospara la selección de las mismas y los criterios que fueron tomados.
Transistores, indicar los criterios tomados para la selección de los mis-mos, y las características de los mismos que los hacen ideales para estaaplicación.
Demux1a4, indicar el demultiplexor utilizado para habilitar cada display.O el elemento utilizado en su lugar.
Incluir patillaje, lista de componentes y el circuito completo.
Indicar en la placa el grupo al que corresponde, y el grupo grande al quecorresponde.Ejemplo: GA-g1, la placa es del grupo 1 que a su vez pertenceal grupo A.
1.1 Diseño del circuíto 3
1.1. Diseño del circuítoEl siguiente análisis se llevará a cabo para un display del tipo cátodo común,
realizando un circuíto equivalente de un led en serie con una resistencia(se eligióde antemano con el valor de 470Ω) el cual hace limitar la corriente que circulapor él, se tiene la siguente gráfica:
Figura 2: Circuíto equivalete de un led en estado activo
Las consideraciones son las siguientes, para que el led tratado como un diodoideal pase al estado de conducción tiene entre sus terminales una tensión de0.7[V], y una resistencia en directa que ronda los Rforward = 30Ω, ademásasumiendo que la tensión máxima de VCC = 5[V ], se tiene que la corriente quedebe circular por el circuíto es:
I =VCC − 0,7
470 +RforwardI = 8,6mA
entonces se asume que la corriente máxima es de:
Imáx 1 led = 10mA (1)
Como un 7segmentos tiene 8 de estos la corriente máxima que necesita unelemento tal es de:
Imáx 1 7seg = 80mA
Esta corriente, es la que circulará por el colector de cada transistor, por lotanto IC max = 80mA, para un transistor del tipo Q2N2222, se tiene que lacorriente máxima que soporta por el colector es de unos 800mA, por lo tantoeste transistor es elejido para el circuíto, por ser más que óptimo para ello.
Como este transistor será utilizado como un interruptor, debe operar en lazona de saturación y corte(ON-OFF), por lo tanto el siguiente cuestionamien-to es a partir de que corriente en la base(Ib mín) el debe entrar en saturación;volviendo al cálculo de la operación de un led (1), este debe ser la corrientecuando esta encendido solo un led del 7segmento, por lo tanto a esta corri-ente el transistor ya debe estar en ON(saturado), entonces se hace la siguiente
1.1 Diseño del circuíto 4
consideración:Imín sat = 3mA
Y como el valor de β del transistor elegido es de aproximadamente β = 150,se halla la corriente mínima en la base del transistor para que entre en saturaciónde la siguiente manera:
Ib mín =Imín sat
βIb mín =
3mA
150
Ib mín = 20µA
Ahora se hace un circuíto equivalente de un transistor en zona de activa.
Figura 3: Transistor en estado activo
El valor de V es la salida del integrado TTL, como es sabido que el valormínimo de salida a nivel alto es de 2,4[V ] y el máximo de 5[V ], se procede ahallar el valor de la resistencia de base :
Rb =V − 0,7
20µA
Como a una tensión menor a 2.4[V], el debe estar en activo, se considera quea partir de una tensión mayor a 2[V] ya debe entrar en saturación, el valor deRb, es por lo tanto:
Rb =V − 0,7
20µARb =
2 − 0,7
20µA
Rb = 65kΩ
Como los segmentos a ser encendidos van a activarse uno a la vez, la corrientemáxima que circulará por cada resistencia de 470Ω es de unos 10mA, por lo tantotodas las resistencias serán de 1/4W de potencia.
1.2 Lista de materiales 5
La corriente hallada para el transistor en la base es de Ib mín = 20µA, ycomo esta corriente no varía mucho con lo calculado, las resistencias de 65kΩtambién serán de 1/4W de potencia1
1.2. Lista de materiales4 Transistores 2N2222
4 Resistencias de 1/4[W ] de 68kΩ
9 Resistencias de 1/4[W ] de 470Ω
4 Display 7 segmentos tipo catodo común
1 Placa universal de 10cm× 10cm
10 Bloques de terminales de conección
1 TTL 74139 demultiplexor de 2 a 4
1 TTL 7404 inversor
1 Base de coneccíón para CI de 14 pines.
1 Base de coneccíón para CI de 16 pines.
Equipo de soldar, estaño, cables, etc.
1Todas estas consideraciones se hacen al suponer que la tensión a la cual operarán lasresistencias es de 5V como máximo.
1.3 Patillaje 6
1.3. Patillaje
Figura 4: Patillaje del circuíto diseñado.
Figura 5: Diagrama del display y de los segmentos
El orden de las salidas en el código de VHDL es abcdefgh.
1.4 Dispositivos elegidos 7
1.4. Dispositivos elegidos1.4.1. El 74139(DUAL 1-OF-4 DECODER/DEMULTIPLEXER)
Figura 6: Diagrama de conección del 74139(vista superior)
Tabla de verdadEntradas Salidas
E A1 A0 O0 O1 O2 O3
1 X X 1 1 1 10 0 0 0 1 1 10 0 1 1 0 1 10 1 0 1 1 0 10 1 1 1 1 1 0
Cuadro 1: Tabla de verdad del 74139
Símbolo Parámetro Nivel Límites Unidades Condicionesde retardo Min Típico Max de Testeo
tPLH Propagation Delay 3 18 29 VCC = 5VtPHL Address to Output 3 25 38 ηs CL = 15pFtPLH Propagation Delay 2 16 24tPHL Enable to Output 2 21 32
Cuadro 2: Características de conmutación
1.4 Dispositivos elegidos 8
1.4.2. El 7404(SIX INVERTERS)
Figura 7: Diagrama de conecciones del 7404(vista superior)
Familia Std ALS AS F H L LS SPropagation Delay ηs 10 6 2.75 3.5 6 33 9.5 3Supply Current mA 12 2 8 6.9 26 1.2 3 23
Cuadro 3: Características de conmutación
1.4.3. Transistor 2N2222
Símbolo Parámetro Condiciones Mín. Max. UnidadesIC Corriente - 800 mAPtot Pot. máxima Tamb 6 25C - 500 mW
VCEsat I. de Saturación IC = 150mA; IB = 15mA - 400 mVts t. de establecimiento - 200 ηstr t. de subida - 25 ηston turn-on time ICon = 150mA; IBon = 15mA; IBoff = −15mA - 35 ηstoff turn-off time - 250 ηs
Cuadro 4: Características eléctricas del transistor 2N2222.
1.4 Dispositivos elegidos 9
1.4.4. Cálculo de la frecuencia máxima
Considerando todas las tablas anteriores, se halla la frecuencia máxima a lacual puede ser expuesta el siguiente circuíto para que la respuesta sea la de-seada(de encender los segmentos), pues podría “saturarse” al ser una frecuenciamuy elevada.
Paso por el TTL 74139Considerando la tabla (2) del integrado, se puede ver que el tiempo deconmutación entre un estado y otro está dado por:
t74139 = tPLH + tPHL t74139 = 56ηs
Paso por el TTL 7404De acuerdo a la tabla (3), y el elegido fue de la familia 74HCU04AP setiene que:
t7404 = 6ηs
Paso por el transistor 2N2222Observando la tabla (4) se puede hallar el tiempo de respuesta al paso porel transistor:
t2N2222 = turn− on+ turn− off t2N2222 = 285ηs
Por lo tanto el tiempo máximo a la cual el circuíto puede tener la respuestadeseada, considerando un tiempo adicional de retardo entre las conecciones delos componentes terror, variaciones con la temperatura, etc., se tiene:
tcto = t74139 + t7404 + t2N2222 + terror tcto = 370ηs
Entonces la frecuencia límite de operación es:
fmáx = 1tcto
= 2,7MHz (2)
2 Práctica 2 10
2. Práctica 2Realizar la descripción en VHDL del diagrama de estados de la figura (8),para controlar el circuito realizado en la práctica (1). Utilizar el métodode diseño de la figura 3.
Figura 8: FSM Moore
Incluir en el informe el diagrama del circuito digital, la descripción enVHDL, y la simulación funcional. Para la simulación utilizar un contadormás pequeño que el utilizado en la implementación. Realizar cambio dedatos y display a una frecuencia de 1kHz. Los registros en la figura (9)contienen los datos a ser mostrados en los display, los datos deben serdistintos.
Figura 9: Diagrama en bloques de circuito a implementar.
2.1 Análisis y Diseño del FSM 11
2.1. Análisis y Diseño del FSMSe hace la siguiente igualdad AB = Cont, Z1Z0 = Selector
donde:B y Z0 son LSB
Tabla de estadosEntradas Salidas
AB = 00 AB = 01 AB = 10 AB = 11 Z1 Z0
D0 D0 D1 D0 D0 0 0D1 D1 D1 D2 D1 0 1D2 D2 D2 D2 D3 1 0D3 D0 D3 D3 D3 1 1
Cuadro 5: Tabla de estados del FSM
Asignación de Estados
Y1 Y0 Estado0 0 D0
0 1 D1
1 0 D2
1 1 D3
Cuadro 6: Asignación de estados para el FSM
Estado próximoEstado actual AB = 00 AB = 01 AB = 10 AB = 11Y1 Y0 Y1 Y0 Y1 Y0 Y1 Y0 Y1 Y0
1 D0 0 0 0 0 0 1 0 0 0 02 D1 0 1 0 1 0 1 1 0 0 13 D2 1 0 1 0 1 0 1 0 1 14 D3 1 1 0 0 1 1 1 1 1 1
Cuadro 7: Transiciónes de estados del FSM
2.2 Tipo de flip flop 12
Flip-flop tipo DFlip-flop D1 Flip-flop D0
AB AB00 01 10 11 00 01 10 11
1 0 0 0 0 0 1 0 02 0 0 1 0 1 1 0 13 1 1 1 1 0 0 0 14 0 1 1 1 0 1 1 1
Cuadro 8: Elección de tabla de verdad y tipo de flip flop
2.2. Tipo de flip flop
D1 = f(A,B, Y1, Y0) :
00
01
12
03
04
05
16
17
08
19
110
111
012
013
114
115A
B
Y1
Y0
D1 = Y1Y0 +BY1 +ABY0
D0 = f(A,B, Y1, Y0) :
00
11
02
03
14
15
06
17
08
09
010
111
012
113
114
115A
B
Y1
Y0
D0 = BY0+ABY1+ABY1+AY1Y0+AY1Y0
2.3. SalidasDe acuerdo al cuadro (5), y considerando que en el modelo de MOORE, se
identifica la salidas sólo en términos del estado actual del dispositivo, se tiene
Z1 = f(Y1, Y0) :
00
01
12
13
Y1
Y0
Z1 = Y1
Z0 = f(Y1, Y0) :
00
11
02
13
Y1
Y0
Z0 = Y0
2.4 Diagramas 13
2.4. DiagramasVer código VHL(2.7.1)
2.4.1. General
Figura 10: Diagrama del bloque principal del circuíto
2.4.2. Bloque de interconecciones entre componenetes
Ver código VHDL(2.7.2)
Figura 11: Interconexiones entre los distintos bloques del circuíto
2.4 Diagramas 14
2.4.3. Divisor reloj
Ver código VHDL(2.7.3)
Figura 12: Dividor del reloj principal al deseado
2.4.4. Contador
Ver código VHDL(2.7.4)
Figura 13: Contador para los estados del FSM
2.4 Diagramas 15
2.4.5. Flip-Flop tipo D
Ver código VHDL(2.7.5)
Figura 14: Flip-Flop tipo D del circuíto
2.4.6. Conecciones
Ver código VHDL(2.7.6)
Figura 15: Conecciones entre el cto. combinacional y la memoria
2.4 Diagramas 16
2.4.7. Registro
Ver código VHDL(2.7.7)
Figura 16: Registro a ser mostrado al display
2.4.8. Display
Ver código VHDL(2.7.8)
Figura 17: Decodificador para el display 7 segmentos
2.5 Simulación Funcional 17
2.5. Simulación Funcional
Figura 18: Dagirama funcional del circuíto
2.6 Asignación de Pines del PLD 18
2.6. Asignación de Pines del PLD
Asignación de Pines de J1J1 Pin de 7128 E/S Variable1 83 clk2 44 clk_out3 45 sel_out[1]4 46 sel_out[0]7 48 dato_out[7]8 49 dato_out[6]9 50 dato_out[5]10 51 dato_out[4]13 52 dato_out[3]15 73 dato_out[2]16 74 dato_out[1]17 75 dato_out[0]
Cuadro 9: Asignación de Pines de J1 del PLD
Figura 19: Pines asignados a las E/S del FSM
2.7 Descripción en VHDL 19
2.7. Descripción en VHDL2.7.1. Entidad Principal(four_display)
library ieee;use ieee.std_logic_1164.all;entity four_display is--Mapeamiento para obtener una ‘‘caja’’ única.port(-- Input portsclk : in std_logic;-- Output portsclk_out : out std_logic;dato_out : out std_logic_vector(7 downto 0);sel_out : out std_logic_vector (1 downto 0));end four_display;architecture estructural of four_display iscomponent four_display2 isport(-- Input portsclk0 : in std_logic;-- Output portsclk_out0 : out std_logic;dato_out0 : out std_logic_vector(7 downto 0);sel_out0 : out std_logic_vector (1 downto 0));end component;beginGeneral: four_display2 port map (clk0 => clk,clk_out0 => clk_out,dato_out0 => dato_out,sel_out0 => sel_out);end estructural;
2.7 Descripción en VHDL 20
2.7.2. Entidad four_display2
library ieee;use ieee.std_logic_1164.all;entity four_display2 is--Entidad de mapeamiento de todos losgeneric(N: natural := 1);--componentes declarados en el cuerpo del códigoport(-- Input portsclk0 : in std_logic;-- Output portsclk_out0 : out std_logic;dato_out0 : out std_logic_vector(7 downto 0);sel_out0 : out std_logic_vector (1 downto 0));end four_display2;architecture estructural of four_display2 iscomponent DivisorReloj isport(clk1 : in std_logic;Reloj_out: out std_logic);end component;component contador isport(Reloj_out1: in std_logic;cont: out std_logic_vector(1 downto 0)
);end component;component biestD isport(Reloj_out2,d: in std_logic;q: out std_logic);end component;component coneccion is
port(
-- Input portsa: in std_logic;--MSB contadorb: in std_logic;--LSB contadory1: in std_logic;--MSB q flip-flopy0: in std_logic;--LSB q flip-flop
2.7 Descripción en VHDL 21
--Output portsd1: out std_logic;--MSB d flip-flopd0: out std_logic --LSB d flip-flop);end component;
component registro isport(selector: in std_logic_vector(1 downto 0);bcd: out std_logic_vector(4 downto 0));end component;component display isport(svEntrada: in std_logic_vector(4 downto 0);svSalida: out std_logic_vector(7 downto 0));end component;signal reloj_princ : std_logic;signal bcd_princ : std_logic_vector(4 downto 0);signal contar_princ : std_logic_vector(1 downto 0);signal sel : std_logic_vector(1 downto 0);signal dd1 : std_logic;signal dd0 : std_logic;signal yy1 : std_logic;signal yy0 : std_logic;begin-- Divisor de frecuencia de 8MHZ a 1kHZ.DIV : DivisorReloj port map (clk1 => clk0,Reloj_out => reloj_princ);clk_out0 <= reloj_princ;--ContadorAB : contador port map (Reloj_out1 => reloj_princ ,cont => contar_princ);FF_D1 :for i in 0 to N generate
Bit_1 : if (i = 0) generateD1 : biestD port map (Reloj_out2 => reloj_princ,d => dd1,q => yy1);
2.7 Descripción en VHDL 22
end generate;FF_D0 : if (i = N) generateD0 : biestD port map (Reloj_out2 => reloj_princ,d => dd0,q => yy0);end generate;end generate;Netlist : coneccion port map (a => contar_princ(1),b => contar_princ(0),y1 => yy1,y0 => yy0,d0 =>dd0,d1 => dd1);sel_out0 <= yy1&yy0;sel <= yy1&yy0;Reg : registro port map (selector => sel,bcd => bcd_princ);Disp : display port map (svEntrada => bcd_princ,svSalida => dato_out0);end estructural;
2.7 Descripción en VHDL 23
2.7.3. Entidad DivisorReloj
library ieee;use ieee.std_logic_1164.ALL;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity DivisorReloj is--Divide el reloj principal delport( --PLD entre una cantidad deseada.
clk1 : in std_logic;Reloj_out: out std_logic
);end DivisorReloj;architecture behavioral of DivisorReloj issignal count: integer range 0 to 100000;signal reloj_princ2 : std_logic;beginprocessbeginwait until clk1’event and clk1=’1’;if count < 8000 then--Divide la frecuencia principal entre 8000count <=count + 1;--para obtener 1kHzelsecount <=0;end if;if count = 8000 thenif reloj_princ2 = ’0’ thenreloj_princ2 <= ’1’;elsereloj_princ2 <= ’0’;end if;end if;end process;Reloj_out <= reloj_princ2;end behavioral;
2.7 Descripción en VHDL 24
2.7.4. Entidad contador
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity contador is--Contador de ‘‘00’’,‘‘01’’,‘‘10’’,‘‘11’’
port(Reloj_out1: in std_logic;cont: out std_logic_vector(1 downto 0)
);end contador;architecture arquit of contador issignal contar : std_logic_vector(1 downto 0);beginprocess (Reloj_out1,contar) isbeginif Reloj_out1’event and Reloj_out1=’1’ then
if contar < "11" thencontar <= contar + 1;elsecontar <= "00";end if;end if;cont <= contar;end process;end arquit;
2.7 Descripción en VHDL 25
2.7.5. Entidad biestD
library ieee;use ieee.std_logic_1164.all;entity biestD is--Descripción del flip-flop tipo Dport(Reloj_out2,d: in std_logic;q: out std_logic);end entity;architecture archbiestD of biestD isbeginp: process(Reloj_out2,d)beginif Reloj_out2’event and Reloj_out2=’1’ thenq <= d;end if;end process;end;
2.7 Descripción en VHDL 26
2.7.6. Entidad coneccion
library ieee;use ieee.std_logic_1164.ALL;entity coneccion is--Conecciones hechas entre la memoria
port --y el circuito combinacional(-- Input ports
a: in std_logic;b: in std_logic;y1: in std_logic;y0: in std_logic;--Output portsd1: out std_logic;d0: out std_logic
);end coneccion;architecture arquitconecc of coneccion isbeginprocess (a,b,y1,y0) isbegind1 <= ((y1 and not(y0)) or (b and y1) or (a and not(b) and y0));d0 <= ((b and y0) or (not(a) and not(y1) and y0) or (not(a) and b and not(y1)) or(a and b and y1) or (a and y1 and y0));end process;end arquitconecc;
2.7 Descripción en VHDL 27
2.7.7. Entidad registro
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity registro is--Valores a ser mostrados a los display’sport(selector: in std_logic_vector(1 downto 0);bcd: out std_logic_vector(4 downto 0));end registro;architecture arquit of registro isbeginprocess (selector) isbegincase selector is
when "11" => bcd <= "10000";--Hwhen "10" => bcd <= "00000";--Owhen "01" => bcd <= "10010";--Lwhen "00" => bcd <= "01010";--Awhen others=> bcd <= "10111";
end case;end process;end arquit;
2.7 Descripción en VHDL 28
2.7.8. Entidad display
library ieee;use ieee.std_logic_1164.all;entity display is--decodificador para el display 7 segmentoport(svEntrada: in std_logic_vector(4 downto 0);svSalida: out std_logic_vector(7 downto 0));end display;architecture displayArch of display isbeginDec7seg: process (svEntrada)begin
case svEntrada is-- Orden de las salidas (segmentos) ŞabcdefghŤwhen "00000" => svSalida <= "11111100";--0when "00001" => svSalida <= "01100000";--1when "00010" => svSalida <= "11011010";--2when "00011" => svSalida <= "11110010";--3when "00100" => svSalida <= "01100110";--4when "00101" => svSalida <= "10110110";--5when "00110" => svSalida <= "10111110";--6when "00111" => svSalida <= "11100010";--7when "01000" => svSalida <= "11111110";--8when "01001" => svSalida <= "11110110";--9when "01010" => svSalida <= "11101110";--Awhen "01011" => svSalida <= "00111110";--Bwhen "01100" => svSalida <= "10011100";--Cwhen "01101" => svSalida <= "01111010";--Dwhen "01110" => svSalida <= "10011110";--Ewhen "01111" => svSalida <= "10001110";--Fwhen "10000" => svSalida <= "01101110";--Hwhen "10001" => svSalida <= "01111000";--Jwhen "10010" => svSalida <= "00011100";--Lwhen "10011" => svSalida <= "00111010";--owhen "10100" => svSalida <= "11001110";--Pwhen "10101" => svSalida <= "00001010";--Rwhen "10110" => svSalida <= "01111100";--Uwhen "10111" => svSalida <= "11110110";--.when others => svSalida <= "00000000";
end case;end process Dec7seg;end displayArch;