Está en la página 1de 23

Proyectos en WINCUPL

3.
PROYECTOS EN
WINCUPL
Proyectos en WINCUPL

4.1. Compuertas lógicas


Código

Name 
Name  Gates;
Partno 
Partno  01;
Revision 
Revision  00;
Date 
Date  02/07/2012;
Designer 
Designer  Teth;
Company ITS Zapopan;
Location 
Location  None;
Assembly 
Assembly  None;
Device 
Device  g16v8a;

/* Inputs: define inputs to build simple gates from */

Pin 1 = a;
Pin 1
Pin 2
Pin 2 = b;

/* Outputs: define outputs as active HI levels */

Pin 12
Pin 12 = inva;
Pin 13
Pin 13 = invb;
Pin 14
Pin 14 = and;
Pin 15
Pin 15 = nand;
Pin 16
Pin 16 = or;
Pin 17
Pin 17 = nor;
Pin 18
Pin 18 = xor;
Pin 19
Pin 19 = xnor;

/* Logic:
Logic: examples of simple
simple gates
gates expressed
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,


compuerta, NOT  !, AND
Proyectos en WINCUPL

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


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
grafica de tiempos esta en bajo para
para
esta condición.
Proyectos en WINCUPL
Proyectos en WINCUPL

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

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
Proyectos en WINCUPL

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

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

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;
Proyectos en WINCUPL

'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
Proyectos en WINCUPL

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
Proyectos en WINCUPL

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

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

4.16. Contador Johnson


Código

Name johnson ;
PartNo 00 ;
Date 05/07/2012 ;
Revision 01
Revision 01 ;
Designer Teth
Designer Teth Cortes ;
Company ITS ZAPOPAN ;
Assembly NA
Assembly NA ;
Location 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]
Pin [14..17] = [Q3..0]; /* Counter outputs */

/** Declarations and Intermediate Variable Definitions **/

field count = [Q3..0];
field count /* declare counter bit field */
$define S0
$define S0 'b'0000 /* define counter states */
$define S1
$define S1 'b'0001
$define S2
$define S2 'b'0011
$define S3
$define S3 'b'0111
$define S4
$define S4 'b'1111

field mode = [clr,dir];
field mode /* declare mode control field */
anillo_up = mode:0;
anillo_dw = mode:1;
clear = mode:[2..3]; /* define count clear mode */
Proyectos en WINCUPL

/** Logic Equations **/

Sequenced count
Sequenced count {

present S0
present S0 if anillo_up
if anillo_up next S1;
next S1;
if anillo_dw
if anillo_dw next S4;
next S4;
if clear
if clear next S0;
next S0;
present S1
present S1 if anillo_up
if anillo_up next S2;
next S2;
if anillo_dw
if anillo_dw next S4;
next S4;
if clear
if clear next S0;
next S0;
present S2
present S2 if anillo_up
if anillo_up next S3;
next S3;
if anillo_dw
if anillo_dw next S1;
next S1;
if clear
if clear next S0;
next S0;
present S3
present S3 if anillo_up
if anillo_up next S4;
next S4;
if anillo_dw
if anillo_dw next S2;
next S2;
if clear
if clear next S0;
next S0;
present S4
present S4 if anillo_up
if anillo_up next S1;
next S1;
if anillo_dw
if anillo_dw next S3;
next S3;
if clear
if clear next S0;
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
Proyectos en WINCUPL

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

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

/** 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;
Proyectos en WINCUPL

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

También podría gustarte