Proyectos en WINCUPL
3.
PROYECTOS EN
WINCUPL
60
Proyectos en WINCUPL
4.1. Compuertas lógicas
Código
Name
Partno
Revision
Date
Designer
Company
Location
Assembly
Device
Gates;
01;
00;
02/07/2012;
Teth;
ITS Zapopan;
None;
None;
g16v8a;
/* Inputs:
define inputs to build simple gates from
*/
Pin 1 = a;
Pin 2 = b;
/* Outputs:
Pin
Pin
Pin
Pin
Pin
Pin
Pin
Pin
12
13
14
15
16
17
18
19
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
*/
inva;
invb;
and;
nand;
or;
nor;
xor;
xnor;
/* Logic:
inva
invb
and
nand
or
nor
xor
xnor
define outputs as active HI levels
!a;
!b;
a &
!(a
a #
!(a
a $
!(a
examples of simple gates expressed in CUPL */
/* NOT inverters
b;
& b);
b;
# b);
b;
$ b);
/*
/*
/*
/*
/*
/*
*/
AND gate
*/
NAND gate
*/
OR gate
*/
NOR gate
*/
XOR exclusive or gate
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.
61
Proyectos en WINCUPL
Simulación
Tabla de verdad
a
0
0
1
1
b
0
1
0
1
inva
1
1
0
0
invb
1
0
1
0
and
0
0
0
1
nand
1
1
1
0
or
0
1
1
1
nor
1
0
0
0
xor
0
1
1
0
xnor
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.
62
Proyectos en WINCUPL
63
Proyectos en WINCUPL
4.2. Ecuaciones lógicas
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
ECULOG1 ;
00 ;
02/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
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.
64
Proyectos en WINCUPL
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
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
Ecu1
0
1
1
0
0
0
1
1
Ecu2
0
1
0
1
0
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.
65
Proyectos en WINCUPL
66
Proyectos en WINCUPL
4.3. Sumador completo
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
FA ;
00 ;
03/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
None ;
NA ;
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.
67
Proyectos en WINCUPL
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
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
0
0
1
0
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.
68
Proyectos en WINCUPL
69
Proyectos en WINCUPL
4.4. Sumador completo de 4 bits
Código
Name
Partno
Date
Rev
Designer
Company
Assembly
Location
Device
Adder;
001;
02/07/2012;
01;
Teth Cortes;
ITS;
NA;
NA;
G16V8;
/** Inputs **/
Pin [1..4] = [X1..4];
Pin [5..8] = [Y1..4];
/* First 4-bit number
/* Second 4-bit number
*/
*/
/** Outputs **/
Pin [12..15] = [Z1..4];
Pin [16..18] = [C1..3];
Pin 19 = Carry;
/* 4-bit sum
/* Intermediate carry values
/* 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
Z2
Z3
Z4
=
=
=
=
adder_slice(X1,
adder_slice(X2,
adder_slice(X3,
adder_slice(X4,
Y1, 'h'0, C1); /* Initial carry = 'h'0 */
Y2,
C1, C2);
Y3,
C2, C3);
Y4,
C3, Carry); /*Get final carry value*/
70
Proyectos en WINCUPL
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.
71
Proyectos en WINCUPL
72
Proyectos en WINCUPL
4.5. Decodificador paralelo de 2 bits
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
Dec2 ;
00 ;
03/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
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
M1
M2
M3
= !A & !B;
= !A & B;
= A & !B;
= 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.
73
Proyectos en WINCUPL
Simulación
Tabla de verdad
A
B
Mo
M1
M2
M3
0
0
1
1
0
1
0
1
1
0
0
0
0
1
0
0
0
0
1
0
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:
̅ ̅
̅
̅
74
Proyectos en WINCUPL
75
Proyectos en WINCUPL
4.6. Decodificador paralelo de 3 bits
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
DEC3;
00;
03/07/2012;
01;
Teth Cortes;
ITS ZAPOPAN;
NA;
NA;
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
M1
M2
M3
M4
M5
M6
M7
=
=
=
=
=
=
=
=
!C
!C
!C
!C
C
C
C
C
&
&
&
&
&
&
&
&
!B
!B
B
B
!B
!B
B
B
&
&
&
&
&
&
&
&
!A;
A;
!A;
A;
!A;
A;
!A;
A;
76
Proyectos en WINCUPL
Simulación
Tabla de verdad
C
B
CA
M0
M1
M2
M3
M4
M5
M6
M7
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
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.
77
Proyectos en WINCUPL
78
Proyectos en WINCUPL
4.7. Decodificador BCD a 7 segmentos
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
DECBCD;
00;
03/07/2012;
01;
Teth Cortes;
ITS ZAPOPAN;
NA;
NA;
g16v8a;
/**************** INPUT PINS *********************/
PIN
PIN
PIN
PIN
2
3
4
5
=
=
=
=
A0; /* LSB */
A1;
A2;
A3; /* MSB */
/**************** OUTPUT PINS *********************/
PIN
PIN
PIN
PIN
PIN
PIN
PIN
12
13
14
15
16
17
18
=
=
=
=
=
=
=
a;
b;
c;
d;
e;
f;
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;
79
Proyectos en WINCUPL
'h'A=>
'h'B=>
'h'C=>
'h'D=>
'h'E=>
'h'F=>
}
'b'0000000;
'b'0000000;
'b'0000000;
'b'0000000;
'b'0000000;
'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.
80
Proyectos en WINCUPL
Tabla de verdad
A3 A2 A1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
A0
a
b
c
d
e
f
g
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
1
0
1
1
0
1
0
1
1
1
0
0
0
0
0
0
1
1
1
1
1
0
0
1
1
1
0
0
0
0
0
0
1
1
0
1
1
1
1
1
1
1
0
0
0
0
0
0
1
0
1
1
0
1
1
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
1
1
0
1
1
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.
81
Proyectos en WINCUPL
82
Proyectos en WINCUPL
4.8. Codificador de 8 posiciones a binario
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
COD8 ;
00 ;
03/07/2012 ;
01 ;
Teth Azrael ;
ITS ZAPOPAN ;
NA ;
NA ;
g16v8a ;
/**************** INPUT PINS *********************/
PIN
PIN
PIN
PIN
PIN
PIN
PIN
PIN
2
3
4
5
6
7
8
9
=
=
=
=
=
=
=
=
E0;
E1;
E2;
E3;
E4;
E5;
E6;
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;
}
83
Proyectos en WINCUPL
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.
84
Proyectos en WINCUPL
85
Proyectos en WINCUPL
4.9. Multiplexor de 4 a 1
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
MUX4A1 ;
00 ;
03/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
g16v8a ;
/**************** INPUT PINS *********************/
PIN
PIN
PIN
PIN
PIN
PIN
PIN
1
2
3
4
5
6
7
=
=
=
=
=
=
=
G;
D0;
D1;
D2;
D3;
A;
B;
/*
/*
/*
/*
/*
/*
/*
Senal de habilitacion estroboscopica */
Senal de dato 0 */
Senal de dato 1 */
Senal de dato 2 */
Senal de dato 3 */
LSB del codigo de seleccion */
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:
̅̅ (
)
̅
(
)
̅(
)
(
)
86
Proyectos en WINCUPL
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.
87
Proyectos en WINCUPL
88
Proyectos en WINCUPL
4.10. Multiplexor de 8 a 1
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
MUX8a1 ;
00 ;
03/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
g16v8a ;
/**************** INPUT PINS *********************/
PIN
PIN
PIN
PIN
PIN
PIN
PIN
PIN
PIN
PIN
PIN
PIN
1 = G;
2 = D0;
3 = D1;
4 = D2;
5 = D3;
6 = D4;
7 = D5;
8 = D6;
9 = D7;
12 = A;
13 = B;
14 = C;
/* LSB */
/* 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.
89
Proyectos en WINCUPL
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
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Y=D0
Y=D1
Y=D2
Y=D3
Y=D4
Y=D5
Y=D6
Y=D7
90
Proyectos en WINCUPL
91
Proyectos en WINCUPL
4.11. Comparador de magnitud de dos palabras
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
COMP2 ;
00 ;
03/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
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:
̅̅̅̅
̅̅̅̅ ̅̅̅̅
̅̅̅̅
̅̅̅̅ ̅̅̅̅ ̅̅̅̅ ̅̅̅̅ ̅̅̅̅
̅̅̅̅
̅̅̅̅
̅̅̅̅ ̅̅̅̅
̅̅̅̅
̅̅̅̅
̅̅̅̅
92
Proyectos en WINCUPL
Simulación
Tabla de verdad
A1
A0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
B1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
B0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
F1
A<B
F2
A=B
F3
A>B
0
1
1
1
0
0
1
1
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
1
1
0
0
1
1
1
0
Entre la tabla de verdad y la simulación se observa la relación de las tres
comparaciones.
93
Proyectos en WINCUPL
94
Proyectos en WINCUPL
4.12. Contador de décadas
Código
Name
Partno
Date
Revision
Designer
Company
Assembly
Location
Device
/**
Pin
Pin
Pin
Pin
/**
Count10;
001;
02/07/12;
02;
Teth Cortes;
ITSZ;
NA;
NA;
g16v8a;
Inputs
1
2
3
11
=
=
=
=
**/
clk;
clr;
dir;
!oe;
Outputs
/*
/*
/*
/*
Counter clock
Counter clear input
Counter direction input
Register output enable
*/
*/
*/
*/
**/
Pin [14..17] = [Q3..0];
Pin 18 = carry;
/* Counter outputs
/* Ripple carry out
*/
*/
/** Declarations and Intermediate Variable Definitions **/
field count = [Q3..0];
$define S0 'b'0000
$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];
up = mode:0;
down = mode:1;
clear = mode:[2..3];
/* declare counter bit field */
/* define counter states
*/
/*
/*
/*
/*
declare mode
define count
define count
define count
control field */
up mode */
down mode */
clear mode */
/** Logic Equations **/
95
Proyectos en WINCUPL
Sequenced count {
present S0
present S1
present S2
present S3
present S4
present S5
present S6
present S7
present S8
present S9
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
/* free running counter */
up
down
clear
down
up
down
clear
up
down
clear
up
down
clear
up
down
clear
up
down
clear
up
down
clear
up
down
clear
up
down
clear
up
down
clear
up
next S1;
next S9;
next S0;
out carry;
next S2;
next S0;
next S0;
next S3;
next S1;
next S0;
next S4;
next S2;
next S0;
next S5;
next S3;
next S0;
next S6;
next S4;
next S0;
next S7;
next S5;
next S0;
next S8;
next S6;
next S0;
next S9;
next S7;
next S0;
next S0;
next S8;
next S0;
out carry;
/* carry output */
}
Simulación
96
Proyectos en WINCUPL
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
dir=0
dir=0
S9
S0
dir=0
dir=1
S1
dir=1
S8
dir=1
dir=0
dir=0
dir=1
dir=1
S7
S2
dir=1
dir=1
dir=0
dir=0
S6
dir=1
dir=0
S5
dir=1
dir=1
S4
S3
dir=0
dir=0
97
Proyectos en WINCUPL
98
Proyectos en WINCUPL
4.13. Detector de secuencia
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
FSM2 ;
00 ;
04/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
None ;
;
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
default
present S1 if
s
default
present S2 if
s
default
present S3 if
s
out found;
default
}
next
next
next
next
next
next
next
S1;
S0;
S2;
S1;
S3;
S1;
S0;
next S0;
99
Proyectos en WINCUPL
Simulación
Diagrama de estados
1
0
0
SO
00
1
S1
01
1
S2
10
1
S3
11
0
0
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.
100
Proyectos en WINCUPL
101
Proyectos en WINCUPL
4.14. Generador de secuencia
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
FSM3 ;
00 ;
05/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
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
default
present S1 if
s
default
present S2 if
s
default
present S3 if
s
default
}
next
next
next
next
next
next
next
next
S1 ;
S0;
S2 out sal;
S0;
S3 out sal;
S2;
S0 out sal;
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.
102
Proyectos en WINCUPL
Secuencia
Tabla de excitación
S
S0
S1
S2
S3
0
1
S0 / 0
S0 / 0
S0 / 0
S0 / 0
S1 / 0
S2 / 1
S3 / 1
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.
103
Proyectos en WINCUPL
104
Proyectos en WINCUPL
4.15. Contador de anillo
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
/**
Pin
Pin
Pin
Pin
/**
CONTADOR ;
00 ;
05/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
g16v8a ;
Inputs
1
2
3
11
=
=
=
=
**/
clk;
clr;
dir;
!oe;
Outputs
/* Register output enable
*/
/* Counter outputs
*/
**/
Pin [14..17] = [Q3..0];
/** Declarations and Intermediate Variable Definitions **/
field count = [Q3..0];
$define S0 'b'0000
$define S1 'b'0001
$define S2 'b'0010
$define S3 'b'0100
$define S4 'b'1000
/* declare counter bit field */
/* define counter states
*/
field mode = [clr,dir];
anillo_up = mode:0;
anillo_dw = mode:1;
clear = mode:[2..3];
/* declare mode control field */
/* define count clear mode
*/
105
Proyectos en WINCUPL
/** Logic Equations **/
Sequenced count {
present S0
present S1
present S2
present S3
present S4
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
next
next
next
next
next
next
next
next
next
next
next
next
next
next
next
S1;
S4;
S0;
S2;
S4;
S0;
S3;
S1;
S0;
S4;
S2;
S0;
S1;
S3;
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.
106
Proyectos en WINCUPL
107
Proyectos en WINCUPL
4.16. Contador Johnson
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
/**
Pin
Pin
Pin
Pin
*/
/**
johnson ;
00 ;
05/07/2012 ;
01 ;
Teth Cortes ;
ITS ZAPOPAN ;
NA ;
NA ;
g16v8a ;
Inputs
1
2
3
11
Outputs
**/
=
=
=
=
clk;
clr;
dir;
!oe;
/* Register output enable
**/
Pin [14..17] = [Q3..0];
/* Counter outputs
*/
/** Declarations and Intermediate Variable Definitions **/
field count = [Q3..0];
$define S0 'b'0000
$define S1 'b'0001
$define S2 'b'0011
$define S3 'b'0111
$define S4 'b'1111
field mode = [clr,dir];
anillo_up = mode:0;
anillo_dw = mode:1;
clear = mode:[2..3];
/* declare counter bit field */
/* define counter states
*/
/* declare mode control field */
/* define count clear mode
*/
108
Proyectos en WINCUPL
/** Logic Equations **/
Sequenced count {
present S0
present S1
present S2
present S3
present S4
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
anillo_up
anillo_dw
clear
next
next
next
next
next
next
next
next
next
next
next
next
next
next
next
S1;
S4;
S0;
S2;
S4;
S0;
S3;
S1;
S0;
S4;
S2;
S0;
S1;
S3;
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.
109
Proyectos en WINCUPL
110
Proyectos en WINCUPL
Anillo
CLK
Q0
1
0
0
0
1
0
0
0
Q1
0
1
0
0
0
1
0
0
Q2
0
0
1
0
0
0
1
0
Johnson
Q3
0
0
0
1
0
0
0
1
Q0
1
1
1
1
1
1
1
1
Q1
0
1
1
1
0
1
1
1
Q2
0
0
1
1
0
0
1
1
Q3
0
0
0
1
0
0
0
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.
111
Proyectos en WINCUPL
4.17. Control de motores a pasos
Código
Name
Partno
Date
Revision
Designer
Company
Assembly
Location
Device
/**
Stepper;
01;
14/04/11;
01;
ELECTRONICA 2;
ITS ZAPOPAN;
None;
None;
g16v8a;
Inputs
Pin 1
Pin 2
Pin 3
/* Pin 11
/**
Outputs
**/
= clk;
= motor;
= dir;
= !oe;*/
/*
/*
/*
/*
Step advance
Select which motor to step
Step direction input
Register output enable
*/
*/
*/
*/
**/
Pin [19..16] = [A3..0];
Pin [15..12] = [B3..0];
/* Stepper A outputs
/* Stepper B outputs
*/
*/
/** Declarations and Intermediate Variable Definitions **/
field stepA = [A3..0];
field stepB = [B3..0];
$define S0 'b'0011
$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
field
upA =
downA
upB =
downB
/* declare stepper bit field */
/* define stepper excitation states */
mode = [motor,dir];
mode:1;
= mode:0;
mode:3;
= mode:2;
/* the power-on state */
/* declare mode control field */
112
Proyectos en WINCUPL
/** Logic Equations **/
Sequenced stepA {
present SI
default
present S0
if upA
if downA
default
present S1
if upA
if downA
default
present S2
if upA
if downA
default
present S3
if upA
if downA
default
present S4
if upA
if downA
default
present S5
if upA
if downA
default
present S6
if upA
if downA
default
present S7
if upA
if downA
default
}
Sequenced stepB {
present SI
default
present S0
if upB
if downB
default
present S1
if upB
if downB
default
present S2
if upB
if downB
default
present S3
if upB
if downB
default
present S4
if upB
if downB
default
present S5
if upB
if downB
default
present S6
if upB
/* stepper A counter */
next S0;
next S1;
next S7;
next S0;
next S2;
next S0;
next S1;
next S3;
next S1;
next S2;
next S4;
next S2;
next S3;
next S5;
next S3;
next S4;
next S6;
next S4;
next S5;
next S7;
next S5;
next S6;
next S0;
next S6;
next S7;
/* stepper B counter */
next S0;
next S1;
next S7;
next S0;
next S2;
next S0;
next S1;
next S3;
next S1;
next S2;
next S4;
next S2;
next S3;
next S5;
next S3;
next S4;
next S6;
next S4;
next S5;
next S7;
113
Proyectos en WINCUPL
if downB
default
if upB
if downB
default
present S7
next S5;
next S6;
next S0;
next S6;
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
upA =
downA
upB =
downB
mode = [motor,dir];
mode:1;
= mode:0;
mode:3;
= mode:2;
/* declare mode control field */
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
mode:0
mode:1
mode:2
mode:3
0
0
1
1
0
1
0
1
Descripción
downA
upA
downB
upB
Motor A activado con giro reverso
Motor A activado con giro directo
Motor B activado con giro reverso
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.
114
Proyectos en WINCUPL
115
Proyectos en WINCUPL
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.
Bobina
Paso
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
116
Proyectos en WINCUPL
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.
Bobina
Paso
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.
117
Proyectos en WINCUPL
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.
Bobina
Paso
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.
118
Proyectos en WINCUPL
4.18. Control de un torniquete de paso
Código
Name
PartNo
Date
Revision
Designer
Company
Assembly
Location
Device
/**
PIN
PIN
PIN
turnstile1 ;
02 ;
29/06/2012 ;
01 ;
Engineer ;
ITS ZAPOPAN ;
None ;
Zapopan ;
g16v8 ;
INPUT PINS **/
1 = clock;
2 = Walk_Thru;
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.
119
Proyectos en WINCUPL
Diagrama de estados
!coin
LOCKED
0
walk_thru
coin
OPEN
1
!walk_thru
CNT_PULSE
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.
120
Proyectos en WINCUPL
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.
121
Proyectos en WINCUPL
122