Capitulo 4 Proyectos Winculp
-
Upload
hernan-gomez -
Category
Documents
-
view
667 -
download
23
Transcript of Capitulo 4 Proyectos Winculp
Proyectos en WINCUPL
60
3.
PROYECTOS EN WINCUPL
Proyectos en WINCUPL
61
4.1. Compuertas lógicas
Código Name Gates;
Partno 01;
Revision 00;
Date 02/07/2012;
Designer Teth;
Company ITS Zapopan;
Location None;
Assembly None;
Device g16v8a;
/* Inputs: define inputs to build simple gates from */
Pin 1 = a;
Pin 2 = b;
/* Outputs: define outputs as active HI levels */
Pin 12 = inva;
Pin 13 = invb;
Pin 14 = and;
Pin 15 = nand;
Pin 16 = or;
Pin 17 = nor;
Pin 18 = xor;
Pin 19 = xnor;
/* Logic: examples of simple gates expressed in CUPL */
inva = !a; /* NOT inverters */
invb = !b;
and = a & b; /* AND gate */
nand = !(a & b); /* NAND gate */
or = a # b; /* OR gate */
nor = !(a # b); /* NOR gate */
xor = a $ b; /* XOR exclusive or gate */
xnor = !(a $ b); /* XNOR exclusive nor gate */
Observe la identificación de símbolos para cada compuerta, NOT !, AND &, OR # y XOR $, las funciones negadas de estas compuerta solo están acompañadas del símbolo de negación ! seguido de paréntesis.
Proyectos en WINCUPL
62
Simulación
Tabla de verdad
a b inva invb and nand or nor xor xnor
0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 0 1
En la simulación los vectores verticales 1, 2, 3, y 4 cambian sucesivamente los valores asignados a las variables a y b, para cada vector las salidas asignadas a cada compuerta lógica modifica su valor según estas variables, por ejemplo en el vector 2 a = 0 y b = 1, el resultado de la compuerta lógica AND es 0, se observa que la línea de la grafica de tiempos esta en bajo para esta condición.
Proyectos en WINCUPL
63
Proyectos en WINCUPL
64
4.2. Ecuaciones lógicas
Código Name ECULOG1 ;
PartNo 00 ;
Date 02/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/* *************** INPUT PINS *********************/
PIN 1 = A;
PIN 2 = B;
PIN 3 = C;
/* *************** OUTPUT PINS *********************/
PIN 19 = Ecu1;
PIN 18 = Ecu2;
/* ************** LOGIC EQUATIONS *****************/
Ecu1 = (!A&!B&C)#(!A&B&!C)#(A&B&!C)#(A&B&C);
Ecu2 = (!A&!B&C)#(!A&B&C)#(A&!B&C)#(A&B&!C);
El código que se muestra arriba presenta las ecuaciones lógicas en la forma de suma de productos SOP, para su fácil identificación cada producto está encerrado entre paréntesis, de esta forma también se garantiza que cada producto AND se realice primero antes de la sentencia OR.
En ambos casos las ecuaciones tienen como entradas de excitación las mismas variables identificadas como A, B y C.
Proyectos en WINCUPL
65
Simulación
En la simulación se observa que las 8 posibles combinaciones para A, B y C están cambiando sucesivamente en los vectores, modificando las salidas de las ecuaciones lógicas identificadas como Ecu1 y Ecu2.
( )
( )
Tabla de verdad
A B C Ecu1 Ecu2
0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 0
Observe que las ecuaciones lógicas están expresadas en la forma de suma
de productos y su transformación en sumatoria de minterminos (Ecu1 =
1,2,6,7; Ecu2 = 1,3,5,6) corresponde con la presencia de 1 lógico en la configuración de las entradas ABC.
Proyectos en WINCUPL
66
Proyectos en WINCUPL
67
4.3. Sumador completo
Código Name FA ;
PartNo 00 ;
Date 03/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly None ;
Location NA ;
Device g16v8a ;
/**************** INPUT PINS *********************/
PIN 1 = A;
PIN 2 = B;
PIN 3 = Cin;
/**************** OUTPUT PINS *********************/
PIN 19 = S;
PIN 18 = Cout;
/************** LOGIC EQUATIONS *******************/
S= A$B$Cin;
Cout= (B&Cin) # (A&Cin) # (A&B);
Ecuaciones lógicas para los bits de salida:
( )
El sumador completo es un circuito que recibe dos bits sumando A y B, además de un bit de acarreo de entrada Cin, genera un bit de suma S y un bit de acarreo de salida Cout.
Proyectos en WINCUPL
68
Simulación
Tabla de verdad del sumador
Bit sumando Bit sumando Bit acarreo Bit de suma salida
Bit de acarreo salida
A B Cin S Cout 0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1 Cuando uno de los dos sumando es 1 la variable S muestra 1, cuando ambos sumando tienen 1 la variable S muestra 0 y 1 en el bit de acarreo de salida. El acarreo de entrada es un sumando que se agrega a las entradas A y B. Cuando A, B y Cin tienen 1, la salida es S = 1 y Cout = 1. Si analizamos esta entrada desde numeración decimal la suma de tres sumandos en 1 da 3, 3 en binario se expresa como 11. Note que el bit de acarreo Cout es el bit más significativo.
Proyectos en WINCUPL
69
Proyectos en WINCUPL
70
4.4. Sumador completo de 4 bits
Código Name Adder;
Partno 001;
Date 02/07/2012;
Rev 01;
Designer Teth Cortes;
Company ITS;
Assembly NA;
Location NA;
Device G16V8;
/** Inputs **/
Pin [1..4] = [X1..4]; /* First 4-bit number */
Pin [5..8] = [Y1..4]; /* Second 4-bit number */
/** Outputs **/
Pin [12..15] = [Z1..4]; /* 4-bit sum */
Pin [16..18] = [C1..3]; /* Intermediate carry values */
Pin 19 = Carry; /* Carry for 4-bit sum */
/* Adder-slice circuit - add 2, 1-bit, numbers with carry */
function adder_slice(X, Y, Cin, Cout) {
Cout = Cin & X /* Compute carry */
# Cin & Y
# X & Y;
adder_slice = Cin $ (X $ Y); /* Compute sum */
}
/* Perform 4, 1-bit, additions and keep the final carry */
Z1 = adder_slice(X1, Y1, 'h'0, C1); /* Initial carry = 'h'0 */
Z2 = adder_slice(X2, Y2, C1, C2);
Z3 = adder_slice(X3, Y3, C2, C3);
Z4 = adder_slice(X4, Y4, C3, Carry); /*Get final carry value*/
Proyectos en WINCUPL
71
Simulación
El sumador completo de 4 bits está conformado por cuatro sumadores completos conectados entre sí, donde el acarreo de salida del primero se enlaza al acarreo de entrada del segundo y así sucesivamente. Los cuatro bit de los dos sumandos X y Y entran en paralelo. Observe que el circuito no tiene el acarreo de entrada en el primer sumador y el acarreo de salida del cuarto, representa el acarreo total del circuito. En la simulación las entradas y las salidas se muestran como hexágonos enlazados y representan un bus de 4 bits, para observar su valor es necesario seleccionar la señal y el vector para la intersección deseada.
Proyectos en WINCUPL
72
Proyectos en WINCUPL
73
4.5. Decodificador paralelo de 2 bits
Código Name Dec2 ;
PartNo 00 ;
Date 03/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/**************** INPUT PINS *********************/
PIN 1 = A;
PIN 2 = B;
/**************** OUTPUT PINS *********************/
PIN 19 = M0;
PIN 18 = M1;
PIN 17 = M2;
PIN 16 = M3;
/************* LOGIC EQUATIONS *******************/
M0 = !A & !B;
M1 = !A & B;
M2 = A & !B;
M3 = A & B;
El decodificador paralelo de 2 bits es un circuito muy simple que se construye con cuatro ecuaciones lógicas. Para las cuatro posibles combinaciones de las entradas A y B se debe activar en alto una y solo una de las cuatro salidas identificadas en el código como M0, M1, M2 y M3.
Proyectos en WINCUPL
74
Simulación
Tabla de verdad
A B Mo M1 M2 M3 0 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
1 1 0 0 0 1
Observe la correspondencia entre la grafica de tiempos de la simulación y la tabla de verdad que describe el funcionamiento del circuito. Las ecuaciones lógicas descritas en el código están modeladas por minterminos, es decir:
Proyectos en WINCUPL
75
Proyectos en WINCUPL
76
4.6. Decodificador paralelo de 3 bits
Código Name DEC3;
PartNo 00;
Date 03/07/2012;
Revision 01;
Designer Teth Cortes;
Company ITS ZAPOPAN;
Assembly NA;
Location NA;
Device g16v8a;
/**************** INPUT PINS *********************/
PIN 1 = C; /* MSB */
PIN 2 = B;
PIN 3 = A; /* LSB */
/**************** OUTPUT PINS *********************/
PIN 19 =M0;
PIN 18 =M1;
PIN 17 =M2;
PIN 16 =M3;
PIN 15 =M4;
PIN 14 =M5;
PIN 13 =M6;
PIN 12 =M7;
/************** LOGIC EQUATIONS ******************/
M0 = !C & !B & !A;
M1 = !C & !B & A;
M2 = !C & B & !A;
M3 = !C & B & A;
M4 = C & !B & !A;
M5 = C & !B & A;
M6 = C & B & !A;
M7 = C & B & A;
Proyectos en WINCUPL
77
Simulación
Tabla de verdad
C B CA M0 M1 M2 M3 M4 M5 M6 M7 0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1
El circuito decodificador paralelo de tres bits exhibe un comportamiento similar al decodificador de dos bits, pero en esta ocasión se utilizan tres bits de selección C, B y A para colocar en alto uno y solo uno de los ocho bit de salida identificados como M0, M1, M2, M3, M4, M5, M6 y M7; como se observa en la grafica de tiempos de la simulación y la tabla de verdad.
Proyectos en WINCUPL
78
Proyectos en WINCUPL
79
4.7. Decodificador BCD a 7 segmentos
Código Name DECBCD;
PartNo 00;
Date 03/07/2012;
Revision 01;
Designer Teth Cortes;
Company ITS ZAPOPAN;
Assembly NA;
Location NA;
Device g16v8a;
/**************** INPUT PINS *********************/
PIN 2 = A0; /* LSB */
PIN 3 = A1;
PIN 4 = A2;
PIN 5 = A3; /* MSB */
/**************** OUTPUT PINS *********************/
PIN 12 = a;
PIN 13 = b;
PIN 14 = c;
PIN 15 = d;
PIN 16 = e;
PIN 17 = f;
PIN 18 = g;
/************ LOGIC EQUATIONS *********************/
TABLE A3,A2,A1,A0 => a,b,c,d,e,f,g {
'h'0=> 'b'1111110;
'h'1=> 'b'0110000;
'h'2=> 'b'1101101;
'h'3=> 'b'1111001;
'h'4=> 'b'0110011;
'h'5=> 'b'1011011;
'h'6=> 'b'0011111;
'h'7=> 'b'1110000;
'h'8=> 'b'1111111;
'h'9=> 'b'1110011;
Proyectos en WINCUPL
80
'h'A=> 'b'0000000;
'h'B=> 'b'0000000;
'h'C=> 'b'0000000;
'h'D=> 'b'0000000;
'h'E=> 'b'0000000;
'h'F=> 'b'0000000;
}
Simulación
El circuito decodificador BCD a 7 segmentos recibe como entrada un número binario de cuatro bits de A0 como el bit menos significativo LSB hasta A3 como el bit más significativo MSB, y genera siete salidas a, b, c, d, e, f, y g que encienden o apagan un arreglo de leds que forman un carácter numérico en un dispositivo conocido como display de 7 segmentos. En la figura de la derecha DP es un punto que acompaña al carácter, en el código DP se omite.
Proyectos en WINCUPL
81
Tabla de verdad
A3 A2 A1 A0 a b c d e f g 0 0 0 0 1 1 1 1 1 1 0
0 0 0 1 0 1 1 0 0 0 0
0 0 1 0 1 1 0 1 1 0 1
0 0 1 1 1 1 1 1 0 0 1
0 1 0 0 0 1 1 0 0 1 1
0 1 0 1 1 0 1 1 0 1 1
0 1 1 0 0 0 1 1 1 1 1
0 1 1 1 1 1 1 0 0 0 0
1 0 0 0 1 1 1 1 1 1 1
1 0 0 1 1 1 1 0 0 1 1
1 0 1 0 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0
1 1 0 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0
Observe que todas las posibles combinaciones de A0, A1, A2 y A3 están presentes en la tabla de verdad, sin embargo solo se despliega un valor en el display de 0 (0000) a 9 (1001), después a partir de 10 (1010) hasta 15 (1111) las salidas se asignan en cero. En el caso de desear continuar la cuenta en hexadecimal, desplegando los caracteres alfabéticos a, b, c, d, e y f es necesario configurar las salidas desde 1010 hasta 1111 para que se enciendan los leds correspondientes a cada carácter. Observe que en el código la palabra reservada table realiza una asignación de las salidas en función de las entradas simplificando la programación, de otra forma se debe definir una ecuación lógica por cada una de las salidas.
Proyectos en WINCUPL
82
Proyectos en WINCUPL
83
4.8. Codificador de 8 posiciones a binario
Código Name COD8 ;
PartNo 00 ;
Date 03/07/2012 ;
Revision 01 ;
Designer Teth Azrael ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/**************** INPUT PINS *********************/
PIN 2 = E0;
PIN 3 = E1;
PIN 4 = E2;
PIN 5 = E3;
PIN 6 = E4;
PIN 7 = E5;
PIN 8 = E6;
PIN 9 = E7;
/**************** OUTPUT PINS *********************/
PIN 19 = S0; /* LSB */
PIN 18 = S1;
PIN 17 = S2; /* MSB */
/************ LOGIC EQUATIONS *********************/
TABLE E7,E6,E5,E4,E3,E2,E1,E0 => S2,S1,S0 {
'b'00000001 => 'b'000;
'b'00000010 => 'b'001;
'b'00000100 => 'b'010;
'b'00001000 => 'b'011;
'b'00010000 => 'b'100;
'b'00100000 => 'b'101;
'b'01000000 => 'b'110;
'b'10000000 => 'b'111;
}
Proyectos en WINCUPL
84
Simulación
El circuito codificador de 8 posiciones a binario, en palabras simples, funciona de manera inversa al decodificador de tres bits. Es decir tiene ocho entradas y cuando una y solo una de ellas se activa en alto la salida muestra el número binario correspondiente. En la grafica de tiempos se observa como se fue activando sucesivamente cada una de las entradas y consecuentemente la cuenta binaria en S0-S2 fue incrementando, hasta llegar a 111. En el diagrama del circuito electrónico de prueba se propone colocar un conmutador rotativo de ocho posiciones, para evitar que ocurran dos o más entradas en alto, de lo contrario el circuito va hacia una situación no definida.
Proyectos en WINCUPL
85
Proyectos en WINCUPL
86
4.9. Multiplexor de 4 a 1
Código Name MUX4A1 ;
PartNo 00 ;
Date 03/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/**************** INPUT PINS *********************/
PIN 1 = G; /* Senal de habilitacion estroboscopica */
PIN 2 = D0; /* Senal de dato 0 */
PIN 3 = D1; /* Senal de dato 1 */
PIN 4 = D2; /* Senal de dato 2 */
PIN 5 = D3; /* Senal de dato 3 */
PIN 6 = A; /* LSB del codigo de seleccion */
PIN 7 = B; /* MSB del codigo de seleccion */
/**************** OUTPUT PINS *********************/
PIN 19 = Y; /* salida del muxtiplexor de 4 a 1 */
/************** LOGIC EQUATIONS *******************/
Y = !B&!A&D0&G # !B&A&D1&G # B&!A&D2&G # B&A&D3&G;
El multiplexor de 4 a 1 es un circuito que coloca un bit de dato de cuatro señales de datos identificados como D0, D1, D2 y D3 en el bit de salida Y. La señal de habilitación G es un estrobo que indica el tiempo en el que se muestrea el dato de las líneas de entrada. La ecuación lógica es:
( ) ( ) ( ) ( )
Proyectos en WINCUPL
87
Simulación
En el vector 1, B=0, A=0 y G=0, la salida se coloca en Y=0 porque la señal de habilitación inhibe que el dato de D0 se transfiera hacia Y. Por el contrario en el vector 2 B=0, A=0 y G=1, la selección de línea corresponde a D0 con 1 por lo tanto la salida Y=1, es decir Y tiene asignado el valor de D0 (Y=D0). En los vectores 3, 5 y 7 la señal de habilitación esta en cero G=0 y no existe muestreo de la señal de datos, la salida Y exhibe un valor en bajo. En el vector 4 con B=0, A=1 y G=1, la selección corresponde a la línea de datos D1, que muestra un 0, así la salida Y= D1=0. En el vector 6 con B=1, A=0 y G=1, la selección corresponde a la línea de datos D2, que muestra un 1, así la salida Y=D2=1. Finalmente en el vector 8 con B=1, A=1 y G=1, la selección corresponde a la línea de datos D3, que muestra un 1, así la salida Y=D3=1.
Proyectos en WINCUPL
88
Proyectos en WINCUPL
89
4.10. Multiplexor de 8 a 1
Código Name MUX8a1 ;
PartNo 00 ;
Date 03/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/**************** INPUT PINS *********************/
PIN 1 = G;
PIN 2 = D0;
PIN 3 = D1;
PIN 4 = D2;
PIN 5 = D3;
PIN 6 = D4;
PIN 7 = D5;
PIN 8 = D6;
PIN 9 = D7;
PIN 12 = A; /* LSB */
PIN 13 = B;
PIN 14 = C; /* MSB */
/**************** OUTPUT PINS *********************/
PIN 19 = Y; /* salida del multiplexor de 8 a 1 */
/************** LOGIC EQUATIONS *******************/
Y = !C&!B&!A&D0&G # !C&!B&A&D1&G # !C&B&!A&D2&G # !C&B&A&D3&G
# C&!B&!A&D4&G # C&!B&A&D5&G # C&B&!A&D6&G # C&B&A&D7&G;
El multiplexor de 8 a 1 es similar al multiplexor de 4 a 1. Transfiere un dato hacia el bit de salida Y de una selección de líneas, en este caso son ocho las líneas de datos de D0 a D7 y son tres los bits de selección C, B y A, donde C es el bit más significativo y A es el bit menos significativo.
Proyectos en WINCUPL
90
Simulación
En la simulación los vectores impares tienen la señal de habilitación en bajo, en consecuencia no existe muestreo en las señales de datos, la salida es Y=0. Por el contrario en los vectores pares se transfiere el dato de las líneas D0 a D7 según el código de selección en CBA, como se muestra en la siguiente tabla:
C B A Y 0 0 0 Y=D0
0 0 1 Y=D1
0 1 0 Y=D2
0 1 1 Y=D3
1 0 0 Y=D4
1 0 1 Y=D5
1 1 0 Y=D6
1 1 1 Y=D7
Proyectos en WINCUPL
91
Proyectos en WINCUPL
92
4.11. Comparador de magnitud de dos palabras
Código Name COMP2 ;
PartNo 00 ;
Date 03/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/**************** INPUT PINS *********************/
PIN 1 = A0;
PIN 2 = A1;
PIN 3 = B0;
PIN 4 = B1;
/**************** OUTPUT PINS *********************/
PIN 19 = F1; /* Ecuacion A menor que B */
PIN 18 = F2; /* Ecuacion A igual que B */
PIN 17 = F3; /* Ecuacion A mayor que B */
/************** LOGIC EQUATION ********************/
F1 = !A1&B1 # !A1&!A0&B0 # !A0&B1&B0;
F2 = !A1&!A0&!B1&!B0 # !A1&A0&!B1&B0 # A1&!A0&B1&!B0 #
A1&A0&B1&B0;
F3 = A1&!B1 # A0&!B1&!B0 # A1&A0&!B0;
Este circuito compara dos palabras binarias de dos bits cada una, identificadas como A y B, donde A0 y B0 son los bits menos significativos. Son tres los posibles resultados, A>B solo F3 se coloca en alto, A=B solo F2 se coloca en alto y A<B solo F1 se coloca en alto. Las ecuaciones lógicas de las funciones de salida son:
Proyectos en WINCUPL
93
Simulación
Tabla de verdad
A1 A0 B1 B0 F1
A<B F2
A=B F3
A>B 0 0 0 0 0 1 0
0 0 0 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 1 0 0 0 0 1
0 1 0 1 0 1 0
0 1 1 0 1 0 0
0 1 1 1 1 0 0
1 0 0 0 0 0 1
1 0 0 1 0 0 1
1 0 1 0 0 1 0
1 0 1 1 1 0 0
1 1 0 0 0 0 1
1 1 0 1 0 0 1
1 1 1 0 0 0 1
1 1 1 1 0 1 0
Entre la tabla de verdad y la simulación se observa la relación de las tres comparaciones.
Proyectos en WINCUPL
94
Proyectos en WINCUPL
95
4.12. Contador de décadas
Código Name Count10;
Partno 001;
Date 02/07/12;
Revision 02;
Designer Teth Cortes;
Company ITSZ;
Assembly NA;
Location NA;
Device g16v8a;
/** Inputs **/
Pin 1 = clk; /* Counter clock */
Pin 2 = clr; /* Counter clear input */
Pin 3 = dir; /* Counter direction input */
Pin 11 = !oe; /* Register output enable */
/** Outputs **/
Pin [14..17] = [Q3..0]; /* Counter outputs */
Pin 18 = carry; /* Ripple carry out */
/** Declarations and Intermediate Variable Definitions **/
field count = [Q3..0]; /* declare counter bit field */
$define S0 'b'0000 /* define counter states */
$define S1 'b'0001
$define S2 'b'0010
$define S3 'b'0011
$define S4 'b'0100
$define S5 'b'0101
$define S6 'b'0110
$define S7 'b'0111
$define S8 'b'1000
$define S9 'b'1001
field mode = [clr,dir]; /* declare mode control field */
up = mode:0; /* define count up mode */
down = mode:1; /* define count down mode */
clear = mode:[2..3]; /* define count clear mode */
/** Logic Equations **/
Proyectos en WINCUPL
96
Sequenced count { /* free running counter */
present S0 if up next S1;
if down next S9;
if clear next S0;
if down out carry;
present S1 if up next S2;
if down next S0;
if clear next S0;
present S2 if up next S3;
if down next S1;
if clear next S0;
present S3 if up next S4;
if down next S2;
if clear next S0;
present S4 if up next S5;
if down next S3;
if clear next S0;
present S5 if up next S6;
if down next S4;
if clear next S0;
present S6 if up next S7;
if down next S5;
if clear next S0;
present S7 if up next S8;
if down next S6;
if clear next S0;
present S8 if up next S9;
if down next S7;
if clear next S0;
present S9 if up next S0;
if down next S8;
if clear next S0;
if up out carry; /* carry output */
}
Simulación
Proyectos en WINCUPL
97
El circuito contador de décadas realiza una cuenta de 0 a 9 en sentido ascendente o descendente, cuando la entrada dir=0 la cuenta es ascendente, si dir=1 entonces la cuenta es descendente. En la simulación los hexágonos llevan la cuenta que se muestra en la casilla value, para ver resultado se debe seleccionar el renglón [Q3..Q0] y el vector deseado. Se comienza por definir en el código los diez estados, después a través de la función sequenced se determina la transición entre los estados según el valor de dir y en respuesta a cada pulso de la señal de reloj.
Diagrama de estados
S0
S1
S2
S3
S4 S5
S6
S7
S8
S9 dir=0
dir=0
dir=0
dir=0
dir=0
dir=0
dir=0
dir=0
dir=0
dir=0
dir=1 dir=1 dir=1
dir=1 dir=1
dir=1
dir=1 dir=1
dir=1
dir=1
Proyectos en WINCUPL
98
Proyectos en WINCUPL
99
4.13. Detector de secuencia
Código Name FSM2 ;
PartNo 00 ;
Date 04/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly None ;
Location ;
Device g16v8a ;
/* *************** INPUT PINS *********************/
PIN 1 = clock ;
PIN 2 = s ; /* data input */
PIN 3 = !enable ;
/* *************** OUTPUT PINS *********************/
PIN [14..15] = [Q1..0];
PIN 19 = found;
field STATE = [Q1..0];
$define S0 'b'00
$define S1 'b'01
$define S2 'b'10
$define S3 'b'11
SEQUENCE STATE {
present S0 if s next S1;
default next S0;
present S1 if s next S2;
default next S1;
present S2 if s next S3;
default next S1;
present S3 if s next S0;
out found;
default next S0;
}
Proyectos en WINCUPL
100
SO 00
S1 01
S2 10
S3 11
0 0
0
0
1
1 1 1
Simulación
Diagrama de estados
Este circuito tiene implementado una maquina de estados para detectar la secuencia 0111. Cuando es detectada found se coloca en alto de lo contrario found permanece en bajo. El diagrama de estados esta modelado en el código a través de la instrucción sequence que determina las transiciones de un estado a otro en respuesta al bit se entrada s. En la simulación se observa la llegada de s de dos secuencias 0111 una después de la otra y la activación en alto de found en el último bit se la secuencia.
Proyectos en WINCUPL
101
Proyectos en WINCUPL
102
4.14. Generador de secuencia
Código Name FSM3 ;
PartNo 00 ;
Date 05/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/* *************** INPUT PINS *********************/
PIN 1 = clock ;
PIN 2 = s ; /* data input */
PIN 11 = !enable ;
/* *************** OUTPUT PINS *********************/
PIN [14..15] = [Q1..0];
PIN 19 = sal;
field STATE = [Q1..0];
$define S0 'b'00
$define S1 'b'01
$define S2 'b'10
$define S3 'b'11
SEQUENCE STATE {
present S0 if s next S1 ;
default next S0;
present S1 if s next S2 out sal;
default next S0;
present S2 if s next S3 out sal;
default next S2;
present S3 if s next S0 out sal;
default next S0;
}
Este circuito es la implementación de una maquina de estados que genera en la salida sal la secuencia 0111 con la llegada de los pulsos de reloj y la transición entre los estados.
Proyectos en WINCUPL
103
Secuencia
Tabla de excitación
S 0 1
S0 S0 / 0 S1 / 0
S1 S0 / 0 S2 / 1
S2 S0 / 0 S3 / 1
S3 S0 / 0 S0 / 1
En la tabla de excitación se deduce lo siguiente: cuando la entrada s es igual a 0 todas las transiciones son hacia el estado S0 con la sal en 0, por otro lado cuando la entrada s es igual a 1 las transiciones ocurren de S0 hacia S1 con sal en 0, de S1 hacia S2 con sal en 1, de S2 hacia S3 con sal en 1 y de S3 hacia S0 con sal en 1. En el circuito electrónico s se propone como un botón pulsador, mientras permanezca oprimido el circuito genera de forma ininterrumpida la secuencia 0111, cuando el botón deje de oprimirse la secuencia no se genera, es decir sal es 0 y el estado actual fija en S0.
Proyectos en WINCUPL
104
Proyectos en WINCUPL
105
4.15. Contador de anillo
Código Name CONTADOR ;
PartNo 00 ;
Date 05/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/** Inputs **/
Pin 1 = clk;
Pin 2 = clr;
Pin 3 = dir;
Pin 11 = !oe; /* Register output enable */
/** Outputs **/
Pin [14..17] = [Q3..0]; /* Counter outputs */
/** Declarations and Intermediate Variable Definitions **/
field count = [Q3..0]; /* declare counter bit field */
$define S0 'b'0000 /* define counter states */
$define S1 'b'0001
$define S2 'b'0010
$define S3 'b'0100
$define S4 'b'1000
field mode = [clr,dir]; /* declare mode control field */
anillo_up = mode:0;
anillo_dw = mode:1;
clear = mode:[2..3]; /* define count clear mode */
Proyectos en WINCUPL
106
/** Logic Equations **/
Sequenced count {
present S0 if anillo_up next S1;
if anillo_dw next S4;
if clear next S0;
present S1 if anillo_up next S2;
if anillo_dw next S4;
if clear next S0;
present S2 if anillo_up next S3;
if anillo_dw next S1;
if clear next S0;
present S3 if anillo_up next S4;
if anillo_dw next S2;
if clear next S0;
present S4 if anillo_up next S1;
if anillo_dw next S3;
if clear next S0;
}
Simulación
El contador de anillo va colocando en alto cada uno de los bits de forma sucesiva, como se observa en la tabla de verdad. En el diagrama electrónico construido con flip flops tipo D la salida Q del cuarto dispositivo alimenta la entrada D del primero.
Proyectos en WINCUPL
107
Proyectos en WINCUPL
108
4.16. Contador Johnson
Código Name johnson ;
PartNo 00 ;
Date 05/07/2012 ;
Revision 01 ;
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA ;
Location NA ;
Device g16v8a ;
/** Inputs **/
Pin 1 = clk;
Pin 2 = clr;
Pin 3 = dir;
Pin 11 = !oe; /* Register output enable
*/
/** Outputs **/
Pin [14..17] = [Q3..0]; /* Counter outputs */
/** Declarations and Intermediate Variable Definitions **/
field count = [Q3..0]; /* declare counter bit field */
$define S0 'b'0000 /* define counter states */
$define S1 'b'0001
$define S2 'b'0011
$define S3 'b'0111
$define S4 'b'1111
field mode = [clr,dir]; /* declare mode control field */
anillo_up = mode:0;
anillo_dw = mode:1;
clear = mode:[2..3]; /* define count clear mode */
Proyectos en WINCUPL
109
/** Logic Equations **/
Sequenced count {
present S0 if anillo_up next S1;
if anillo_dw next S4;
if clear next S0;
present S1 if anillo_up next S2;
if anillo_dw next S4;
if clear next S0;
present S2 if anillo_up next S3;
if anillo_dw next S1;
if clear next S0;
present S3 if anillo_up next S4;
if anillo_dw next S2;
if clear next S0;
present S4 if anillo_up next S1;
if anillo_dw next S3;
if clear next S0;
}
Simulación
El contador de Johnson va colocando en alto sucesivamente los bits hasta completar los cuatro bits, como se observa en la tabla de verdad. En el
diagrama electrónico construido con flip flops tipo D la salida del cuarto dispositivo alimenta la entrada D del primero.
Proyectos en WINCUPL
110
Proyectos en WINCUPL
111
Anillo Johnson
CLK Q0 Q1 Q2 Q3 Q0 Q1 Q2 Q3
1 0 0 0 1 0 0 0
0 1 0 0 1 1 0 0
0 0 1 0 1 1 1 0
0 0 0 1 1 1 1 1
1 0 0 0 1 0 0 0
0 1 0 0 1 1 0 0
0 0 1 0 1 1 1 0
0 0 0 1 1 1 1 1
Los contadores de anillo y Johnson se consideran como registros simples de corrimiento (shift register).
El diagrama electrónico mostrado arriba representa un circuito SIPO serial-in parallel-out, Su funcionamiento es el siguiente, entra un dato de forma serial que se va recorriendo de Q1 hacia Q4 con la llegada de cada pulso de la señal de reloj. Este circuito es un ejemplo de la importancia de los registros de corrimiento en los sistemas digitales, ya que permiten manejar flujos de datos entre formatos serie y paralelo.
Proyectos en WINCUPL
112
4.17. Control de motores a pasos
Código Name Stepper;
Partno 01;
Date 14/04/11;
Revision 01;
Designer ELECTRONICA 2;
Company ITS ZAPOPAN;
Assembly None;
Location None;
Device g16v8a;
/** Inputs **/
Pin 1 = clk; /* Step advance */
Pin 2 = motor; /* Select which motor to step */
Pin 3 = dir; /* Step direction input */
/* Pin 11 = !oe;*/ /* Register output enable */
/** Outputs **/
Pin [19..16] = [A3..0]; /* Stepper A outputs */
Pin [15..12] = [B3..0]; /* Stepper B outputs */
/** Declarations and Intermediate Variable Definitions **/
field stepA = [A3..0]; /* declare stepper bit field */
field stepB = [B3..0];
$define S0 'b'0011 /* define stepper excitation states */
$define S1 'b'0010
$define S2 'b'0110
$define S3 'b'0100
$define S4 'b'1100
$define S5 'b'1000
$define S6 'b'1001
$define S7 'b'0001
$define SI 'b'1111 /* the power-on state */
field mode = [motor,dir]; /* declare mode control field */
upA = mode:1;
downA = mode:0;
upB = mode:3;
downB = mode:2;
Proyectos en WINCUPL
113
/** Logic Equations **/
Sequenced stepA { /* stepper A counter */
present SI default next S0;
present S0 if upA next S1;
if downA next S7;
default next S0;
present S1 if upA next S2;
if downA next S0;
default next S1;
present S2 if upA next S3;
if downA next S1;
default next S2;
present S3 if upA next S4;
if downA next S2;
default next S3;
present S4 if upA next S5;
if downA next S3;
default next S4;
present S5 if upA next S6;
if downA next S4;
default next S5;
present S6 if upA next S7;
if downA next S5;
default next S6;
present S7 if upA next S0;
if downA next S6;
default next S7;
}
Sequenced stepB { /* stepper B counter */
present SI default next S0;
present S0 if upB next S1;
if downB next S7;
default next S0;
present S1 if upB next S2;
if downB next S0;
default next S1;
present S2 if upB next S3;
if downB next S1;
default next S2;
present S3 if upB next S4;
if downB next S2;
default next S3;
present S4 if upB next S5;
if downB next S3;
default next S4;
present S5 if upB next S6;
if downB next S4;
default next S5;
present S6 if upB next S7;
Proyectos en WINCUPL
114
if downB next S5;
default next S6;
present S7 if upB next S0;
if downB next S6;
default next S7;
}
El circuito controla de manera alternada dos motores a pasos identificados en el código dentro de las secuencias como A y B. El pin 2 permite seleccionar cual de los dos motores estará activado, es importante recalcar que el código no permite que los dos motores trabajen de forma simultanea. El pin 3 selecciona el sentido de giro del motor invirtiendo la transición de estados según el valor almacenado en las variables up y down. field mode = [motor,dir]; /* declare mode control field */
upA = mode:1;
downA = mode:0;
upB = mode:3;
downB = mode:2;
El segmento de código reproducido arriba es una parte importante de la estructura del código, su análisis es el siguiente: Las variables motor y dir configuradas a través de los pines 2 y 3 del circuito integrado se almacenan en un campo de dos variables. El campo mode determina las cuatro posibles opciones de operación del circuito descritas en la siguiente tabla.
mode motor dir Descripción mode:0 0 0 downA Motor A activado con giro reverso
mode:1 0 1 upA Motor A activado con giro directo
mode:2 1 0 downB Motor B activado con giro reverso
mode:3 1 1 upB Motor B activado con giro directo
Según el valor del campo mode se carga en alto el valor de una de las variables upA, upB, downA y downB, que posteriormente son evaluadas en las sentencias if que configuran la transiciones de estados dentro de las dos instrucciones sequenced asignada cada una para el control de un motor distinto.
Proyectos en WINCUPL
115
Proyectos en WINCUPL
116
En el proyecto se propone el control de un motor a pasos unipolar con secuencia de medio paso, sin embargo existen otras dos formas de secuencia. A continuación se describen sus características principales.
Secuencia de medio paso. Se obtiene un paso más corto activando dos bobinas y luego sólo una y así sucesivamente.
Paso Bobina
A B C D
1 1 0 0 0
2 1 1 0 0
3 0 1 0 0
4 0 1 1 0
5 0 0 1 0
6 0 0 1 1
7 0 0 0 1
8 1 0 0 1
Proyectos en WINCUPL
117
Secuencia de paso completo. Consiste en activar cada una de las bobinas de forma independiente, lo que provoca que el eje del motor se oriente hacia la bobina activada. En algunos motores esto brinda un funcionamiento más suave. Su desventaja es que al estar solo una bobina activada el par de paso y de retención es menor.
Paso Bobina
A B C D
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
Impulsor (motor) unipolar Unipolar significa que cada extremo de bobina tiene solamente una polaridad. Una bobina unipolar cuenta con dos bobinas. De forma alternativa, la corriente circula a través de una de estas bobinas y en una dirección. Comparado con un motor bipolar, sólo se utiliza la mitad de cobre. El devanado en fase del motor debe tener una derivación central. Con frecuencia se utiliza un diodo Zener adicional para asegurar un rápido decaimiento de corriente en la bobina apagada. Esto proporcionará un par motor mayor, especialmente en frecuencias más altas.
Proyectos en WINCUPL
118
Secuencia de paso completo doble. Consiste en tener activadas dos bobinas al mismo tiempo, ambas consecutivas, de modo que el eje del motor se oriente hacia el punto medio de ambas bobinas. Esta es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia se obtiene un alto par de paso y de retención.
Paso Bobina
A B C D
1 1 1 0 0
2 0 1 1 0
3 0 0 1 1
4 1 0 0 1
Velocidad de rotación Revoluciones del motor por minuto se calculan mediante
, donde f = frecuencia de pasos, α = ángulo de paso.
Paso Movimiento rotativo del rotor a través de un ángulo de paso. Ángulo de paso Ángulo rotativo a través del cual el eje del motor gira por un pulso controlado. Frecuencia de pasos Número de pasos del motor (paso a paso) en un segundo.
Proyectos en WINCUPL
119
4.18. Control de un torniquete de paso
Código Name turnstile1 ;
PartNo 02 ;
Date 29/06/2012 ;
Revision 01 ;
Designer Engineer ;
Company ITS ZAPOPAN ;
Assembly None ;
Location Zapopan ;
Device g16v8 ;
/** INPUT PINS **/
PIN 1 = clock;
PIN 2 = Walk_Thru;
PIN 3 = coin;
/** OUTPUT PINS **/
PIN 14 = CNT_PULSE;
PIN 15 = LOCK;
$define LOCKED 'b'0
$define OPEN 'b'1
/** State Machine **/
Sequenced LOCK {
Present LOCKED
if coin next OPEN;
if !coin next LOCKED;
Present OPEN
if Walk_Thru next LOCKED;
Default next OPEN;
Out CNT_PULSE;
}
El código es la implementación de una maquina de estados para el control de un torniquete de paso para el acceso de personas. Su funcionamiento es muy simple, si el usuario deposita una moneda, el torniquete se desbloquea y permite el paso, después se vuelve a bloquear y envía un pulso en alto para realizar una cuenta del transito de las personas.
Proyectos en WINCUPL
120
Diagrama de estados
En el estado LOCKED pueden ocurrir dos situaciones, mientras no se detecte una moneda (coin) el sistema se mantiene en el mismo estado, cuando se detecta una moneda existe una transición del estado LOCKED hacia OPEN, el torniquete esta desbloqueado esperando que una persona pase a través de él. Mientras no se detecte el transito de una persona por un giro del torniquete el sistema permanece en OPEN. La variable CNT_PULSE (contador de pulsos) se coloca en alto para enviar la señal a otro circuito externo para que realice la cuenta del número de veces que el sistema estuvo en OPEN como la interpretación del número de personas que pasaron por el torniquete. Si la variable walk_thru se coloca en alto, está es la señal del transito de una persona por el giro del torniquete, en consecuencia el siguiente estado es LOCKED y el sistema bloquea el torniquete hasta que no se vuelva a recibir una moneda.
LOCKED 0
OPEN 1
!coin
coin walk_thru
!walk_thru
CNT_PULSE
Proyectos en WINCUPL
121
Simulación
Del análisis del código de control de un torniquete de paso se deduce lo siguiente: En el vector 1 se recibe en alto las señal coin y la señal de salida LOCK está en alto desbloqueando el pasador magnético del torniquete y este queda libre para girar. En el vector 2 se mantiene el estado OPEN. En el vector 3 se activa en alto la señal Walk_Thru está puede ser generada por un interruptor electromecánico o un sensor de presencia que detecte el giro del torniquete ciertos grados, inmediatamente ocurre una transición de estados hacia LOCKED bloqueando el pasador, quedando el sistema en espera de una nueva señal de coin. El proceso se vuelve a replicar a partir del vector 6. Cabe señalar que la señal CNT_PULSE va reproduciendo los valores de LOCK sin embargo sus aplicaciones son diferentes. La señal LOCK se utiliza para controlar el pasador magnético que bloquea el giro del torniquete, por otro lado CNT_PULSE produce una señal de pulsos hacia un circuito contador externo, con las conexiones correctas es posible visualizar en un display el número de personas que han transitado a través del torniquete.
Proyectos en WINCUPL
122