illera cueva marcos practicas cyse

99
“PRÁCTICAS COMPONENTES Y SISTEMAS ELECTRÓNICOSAlumno: Marcos Illera Cueva Alumno de Ingeniería Industrial Universidad de La Rioja Peticionario: J. Vicuña Asignatura: C.I.S.E. Universidad de La Rioja Lugar y Fecha: Logroño, 26 de Mayo de 2010

Upload: marcosillera

Post on 04-Apr-2015

216 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Illera Cueva Marcos Practicas Cyse

“P RÁCTICAS

COMPONENTES Y SISTEMAS ELECTRÓNICOS”

Alumno: Marcos Illera Cueva Alumno de Ingeniería Industrial Universidad de La Rioja Peticionario: J. Vicuña Asignatura: C.I.S.E. Universidad de La Rioja Lugar y Fecha: Logroño, 26 de Mayo de 2010

Page 2: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

2 / 99

ÍNDICE

PRÁCTICA 1: SÍNTESIS SISTEMAS COMBINACIONALES

P1A Máquina Paletizadora 5

P1A1-S1 Entradas y Salidas del sistema. 6

P1A1-S2 Tipo de sistema. 6

P1A1-S3 Elección de criterio de lógica. 7

P1A1-S4 Convenio de entradas y salidas. 7

P1A1-S5 Tabla de verdad. 8

P1A1-S6 Funciones de Salida. 9

P1A1-S7 Esquema digital. 16

P1A1-S8 Coste. 17

P1A2-S1 Xilinx ISE. 22

P1B Planta de embotellado 24

P1B1-S1 Entradas y Salidas del sistema. 25

P1B1-S2 Tipo de sistema. 26

P1B1-S3 Elección de criterio de lógica. 26

P1B1-S4 Convenio de entradas y salidas. 26

P1B1-S5 Tabla de verdad. 27

P1B1-S6 Funciones de Salida. 28

P1B1-S7 Esquema digital. 32

P1B2-S1 Circuito de memoria no volátil. 33

PRÁCTICA 2: SISTEMAS SECUENCIALES

P2 Motor Paso a Paso unipolar 34

P2-S1.1 Entradas y Salidas del sistema. 37

P2-S1.2 Tipo de sistema. 37

P2-S1.3 Elección de criterio de lógica. 38

P2-S1.4 Convenio de entradas y salidas. 38

P2-S1.5 Diagrama de Estados. 38

P2-S1.6 Codificación de estados. 39

Page 3: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

3 / 99

P2-S1.7 Tabla excitación y salida del sistema. 40

P2-S1.8 Funciones de salida. 40

P2-S1.9 Esquema digital. 44

P2-S2.1 Síntesis del circuito en un PLD. 46

P2-S2.2 Modificar circuito PLD. 48

PRÁCTICA 3: VHDL

P3A Sumador números 1 Bit 52

P3A1-S1 Entradas y Salidas del sistema. 53

P3A1-S2 Tipo de sistema. 53

P3A1-S3 Elección de criterio de lógica. 54

P3A1-S4 Convenio de entradas y salidas. 54

P3A1-S5 Tabla de verdad. 54

P3A1-S6 Funciones de Salida. 54

P3A1-S7 Esquema digital. 57

P3A1-S8 VDHL. 58

P3A2-S1 Sumador de 3 Bits en VDHL. 59

P3B Multiplexor 4 canales 62

P3B-S1 Introducción. 62

P3B-S2 Código VDHL de un buffer triestato. 63

P3B-S3 Código VDHL de un decodificador. 64

P3B-S4 Código VDHL Multiplexor. 65

PRÁCTICA 4: SIMULACIÓN VHDL

P4A Contador reset, carga síncronos 67

P4A1-S Código VHDL contador. 68

P4A2-S Testbench en VHDL. 69

P4A3-S Visualizador dinámico. 75

P4B Contador reset, carga asíncronos 76

P4B-S Código VHDL contador 76

Page 4: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

4 / 99

PRÁCTICA 5: MICROCONTROLADORES PIC

P5A Programa PIC16F84A 77

P5A1-S Programa desp. Izd-dcha, dcha-izda 78

P5A2-S Programa desp. central 88

P5B Programa 2º PIC16F84A 89

P5C Programa PIC16F876A 91

Page 5: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

5 / 99

PRÁCTICA 1: Síntesis Sistemas Combinacionales

P1.- A) Para controlar el movimiento de una máquina paletizadora se desea

emplear un joystick de 9 posiciones (8 más posición neutra). El vehículo puede

guiarse hacia delante, atrás, girar hacia la derecha y hacia la izquierda así

como combinaciones contiguas de dos movimientos. Para ello, el vehículo

cuenta con dos motores, los cuales pueden operar en cinco modos, mediante 3

señales de control M2 M1 M0 (ver tabla adjunta).

El giro a la izquierda o a la derecha se consigue mediante el bloqueo de uno de

los motores y el accionamiento rápido de contrario. El giro combinado se

obtiene con un motor en movimiento lento y el contrario en movimiento rápido.

Se pide:

Primero:

- Diseñar el sistema mínimo de control de los motores a partir de la posición del

joystick.

- Coste en nº de circuitos integrados y precio de las alternativas de

implementación práctica del circuito:

a) funciones AND2, OR2, NOT

b) PLD.

c) Memoria no volátil.

Page 6: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

6 / 99

Segundo:

Crear un proyecto con la herramienta Xilinx ISE y en él editar un archivo

esquemático que permita a partir de él sintetizar, simular y programar un

dispositivo lógico programable con la lógica requerida por el sistema.

P1A1-S1 Entradas y Salidas del sistema:

- Entradas:

• Mando IZD: si movemos el mando a la izquierda. IZD=1 Activo.

• Mando DCH: si movemos el mando a la derecha. DCH =1 Activo.

• Mando ADE: si movemos el mando adelante. ADE =1 Activo.

• Mando ATR: si movimos el mando atrás. ATR =1 Activo.

- Salidas:

• Motor MI0: señal control 1 motor de la izquierda. MI0 =1 Activo.

• Motor MI1: señal control 2 motor de la izquierda. MI1 =1 Activo.

• Motor MI2: señal control 3 motor de la izquierda. MI2 =1 Activo.

• Motor MD0: señal control 1 motor de la derecha. MD0 =1 Activo.

• Motor MD1: señal control 2 motor de la derecha. MD1 =1 Activo.

• Motor MD2: señal control 3 motor de la derecha. MD2 =1 Activo.

P1A1-S2 Tipo de sistema:

Puesto que las salidas únicamente dependen de las entradas se trata de

un sistema combinacional.

Page 7: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

7 / 99

P1A1-S3 Elección de criterio de lógica:

Tomamos el criterio de lógica positiva, es decir, un 1 lógico equivaldrá a

existencia de tensión y un 0 lógico equivaldrá a no existencia de tensión.

P1A1-S4 Convenio de entradas y salidas:

Para el convenio de entradas supondremos que es posible activar al

mismo tiempo el mando hacia delante o atrás y hacia uno de los lados. El

convenio de salidas lo obtenemos de la tabla que se nos da en el enunciado.

�� � �����

Sistema

Combinacional

Salidas ���� Entradas ����

IZD MI0

DCH MI1

ADE MI1

ATR MD0

MD1

MD2

Page 8: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

8 / 99

P1A1-S5 Tabla de verdad:

Tomamos IZD como el bit de mayor peso y ATR como el bit de menor peso.

Entradas ��� Salidas �� �

П Σ IZD DCH ADE ATR MI2 MI1 MI0 MD2 MD1 MD0

15 0 0 0 0 0 0 X X 0 X X

14 1 0 0 0 1 1 0 1 1 0 1

13 2 0 0 1 0 1 1 1 1 1 1

12 3 0 0 1 1 X X X X X X

11 4 0 1 0 0 1 1 1 0 X X

10 5 0 1 0 1 1 0 1 1 0 0

9 6 0 1 1 0 1 1 1 1 1 0

8 7 0 1 1 1 X X X X X X

7 8 1 0 0 0 0 X X 1 1 1

6 9 1 0 0 1 1 0 0 1 0 1

5 10 1 0 1 0 1 1 0 1 1 1

4 11 1 0 1 1 X X X X X X

3 12 1 1 0 0 X X X X X X

2 13 1 1 0 1 X X X X X X

1 14 1 1 1 0 X X X X X X

0 15 1 1 1 1 X X X X X X

Page 9: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

9 / 99

P1A1-S6 Funciones de Salida:

��2 � ��1,2,4,5,6,9,10� � ��3,7,11,12,13,14,15���

��2 � ��7,15��

� ��0,1,2,3,4,8,12��

��1 � ��2,4,6,10� � ��0,3,7,8,11,12,13,14,15���

��1 � ��6,10,14��

� ��0,1,2,3,4,7,8,12,15��

��0 � ��1,2,4,5,6� � ��0,3,7,8,11,12,13,14,15���

��0 � ��5,6��

� ��0,1,2,3,4,7,8,12,15��

� 2 � ��1,2,5,6,8,9,10� � ��3,7,11,12,13,14,15���

� 2 � ��11,15��

� ��0,1,2,3,4,8,12��

� 1 � ��2,6,8,10� � ��0,3,4,7,11,12,13,14,15���

� 1 � ��6,10,14��

� ��0,1,2,3,4,8,11,12,15��

� 0 � ��1,2,8,9,10� � ��0,3,4,7,11,12,13,14,15���

� 0 � ��9,10��

� ��0,1,2,3,4,8,11,12,15��

Ahora intentamos simplificar las funciones obtenidas mediante los

mapas de Karnaugh, lo haremos tanto para las funciones expresadas como

suma de productos como para las mismas expresadas como producto de

sumas:

Page 10: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

10 / 99

��2 � ��1,2,4,5,6,9,10� � ��3,7,11,12,13,14,15���

� !" � #$% � # &

��2 � ��7,15��

� ��0,1,2,3,4,8,12� � !" � #$% � # &�

X

1 1

1 1 1

1 1

X

X

X

X X X

X X

X

0

X

X

X

X

0

Page 11: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

11 / 99

��1 � ��2,4,6,10� � ��0,3,7,8,11,12,13,14,15� � #$%''''''��

��1 � ��6,10,14��

� ��0,1,2,3,4,7,8,12,15� � #$%''''''�

X

1

1 1

1

X

X

X

X X X

X X

X 0

X

X

X

X

X

X

X

0

0 X

Page 12: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

12 / 99

��0 � ��1,2,4,5,6� � ��0,3,7,8,11,12,13,14,15���

� �� '''''

��0 � ��5,6��

� ��0,1,2,3,4,7,8,12,15� � �� '''''�

X

1

1 1 1

X

X

X

X X X

X X

X 0

X

X

X

X

X

X

X

0

X

1

Page 13: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

13 / 99

� 2 � ��1,2,5,6,8,9,10� � ��3,7,11,12,13,14,15� � �� � #$% � # &��

� 2 � ��11,15��

� ��0,1,2,3,4,8,12��

� �� � #$% � # &

X

1

1 1

X

X

1

X X X

X X

X

X

X

X

X

1

0

1

1 X

0

Page 14: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

14 / 99

� 1 � ��2,6,8,10� � ��0,3,4,7,11,12,13,14,15���

� #$%''''''

� 1 � ��6,10,14��

� ��0,1,2,3,4,8,11,12,15 � #$%''''''��

X

1

X 1

1

X

X

X

X X X

X X

X 0

X

X

X

X X

X

1

0

0 X

Page 15: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

15 / 99

� 0 � ��1,2,8,9,10� � ��0,3,4,7,11,12,13,14,15���

� !"''''''

� 0 � ��9,10��

� ��0,1,2,3,4,8,11,12,15��

� !"''''''

X

1

X

X

X

1

X X X

X X

X

0

X

X

X

X

X

1

0

X

1

1 X

X

Page 16: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

16 / 99

P1A1-S7 Esquema digital:

��2 � !" � #$% � # &

��1 � #$%''''''

��0 � �� '''''

� 2 � �� � #$% � # &

� 1 � #$%''''''

� 0 � !"''''''

ATR

ADE

DCH

IZD

MI2

≥1

1 MI1

1 MI0

MD2

≥1

MD1

1 MD0

Page 17: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

17 / 99

P1A1-S8.1 Coste puertas lógicas:

Empleando funciones AND2, OR2 y NOT necesitaríamos 3 OR2 y 3

NOT. En el esquema digital dibujado en el apartado anterior se utilizaron 2 OR3

en lugar de 3 OR2.

Para obtener un precio aproximado acudimos a la página de internet

www.alldatasheet.com. En ella podemos introducir la referencia de un

componente y visualizar sus características y precios de numerosos

proveedores.

En nuestro caso buscamos las referencias 74SL04 (circuito integrado

con 6 puertas Not) y 74SL32 (circuito integrado con 4 puertas OR2).

De entre todas las posibilidades que encuentra la citada página elegimos

los siguientes circuitos:

Page 18: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

18 / 99

Teniendo en cuenta el pedido mínimo (en este caso de 2500 unidades)

el coste total sería aproximadamente de 0.32 €.

Page 19: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

19 / 99

P1A1-S8.2 Coste PLD

Como en el apartado anterior obtenemos directamente en internet las

características y precio de un posible PLD a emplear.

El precio que se obtuvo fue de 2,88 €.

Page 20: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

20 / 99

P1A1-S8.3 Coste memoria no volátil:

Empleamos un dispositivo de memoria no volátil con 4 entradas y 6

salidas, con capacidad para almacenar 16 datos de cuatro bits. De esa forma

podrríamos “grabar” la tabla de la verdad que se calculó anteriormente y en

función del número decimal que formen S1,S2,S3,S4 el dispositivo asignará a

las salidas los valores previamente grabados en la fila correspondiente a dicho

número:

0 0 0 0 0 0

1 0 1 1 0 1

1 1 1 1 1 1

0 0 0 0 0 0

1 1 1 0 0 0

1 0 1 1 0 0

1 1 1 1 1 0

0 0 0 0 0 0

0 0 0 1 1 1

1 0 0 1 0 1

1 1 0 1 1 1

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

PROM es el acrónimo de Programmable Read-Only Memory (ROM

programable). Es una memoria digital donde el valor de cada bit depende del estado

de un fusible (o antifusible), que puede ser quemado una sola vez. Por esto la

memoria puede ser programada (pueden ser escritos los datos) una sola vez a través

de un dispositivo especial, un programador PROM. Estas memorias son utilizadas

MI2 IZD

MI1 DCHA

MI0 ADE

MD2 ATR

MD1

MD0

Page 21: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

21 / 99

para grabar datos permanentes en cantidades menores a las ROMs, o cuando los

datos deben cambiar en muchos o todos los casos.

Una PROM común se encuentra con todos los bits en valor 1 como valor por

defecto de las fábricas; el quemado de cada fusible, cambia el valor del

correspondiente bit a 0. La programación se realiza aplicando pulsos de altos voltajes

que no se encuentran durante operaciones normales (12 a 21 voltios). El término

Read-only (sólo lectura) se refiere a que, a diferencia de otras memorias, los datos no

pueden ser cambiados (al menos por el usuario final).

Escogemos una memoria capaz de grabar 32 datos de una longitud de 8 bits,

suficiente para nuestro problema.

74S288 MEMORIA PROM 32X8 BITS 2,0080EUR

Page 22: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

22 / 99

P1A2-S1 Xilinx ISE:

Para simular el circuito en el programa Xilinx ISE empleamos un chip

7432, que permite utilizar 4 puertas OR2. Sus características vienen indicadas

en el programa. También empleamos un chip 7404 que permite utilizar 6

puertas not.

Page 23: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

23 / 99

Page 24: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

24 / 99

P1.- B) Una planta de embotellado dispone de una zona de inspección final,

para el control del correcto llenado, etiquetado y taponado de los envases. En

esta zona se dispone de cuatro sensores los cuales, captan información del

estado de los envases ver figura).

Los cuatro sensores manifiestan la presencia de envase, etiqueta, tapón

y botella llena, presentando una tensión de 5V entre sus respectivos terminales

de salida. Cuando no los detectan, presentan una tensión de 0V. En la salida

de la zona de inspección se encuentran 3 cilindros neumáticos que desplazan

los envases para distribuirlos hacia diferentes cintas transportadoras que los

desvían hacia zonas diferentes:

.- Cilindro 1: “Hacia la zona de defectuosos” (cuando los envases están

tapados pero vacíos, con o sin etiqueta)

.- Cilindro 2: “Incompleto” (cuando a los envases les falta algún proceso de

acabado: llenado, etiqueta, o tapón y se pueden reciclar)

.- Cilindro 3:”Hacia la zona de embalaje” (cuando los envases están llenos,

tapados y etiquetados).

Page 25: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

25 / 99

Para activar cualquiera de los cilindros, basta con aplicar una tensión de 5V a

sus terminales de entrada.

Se pide:

1º) Diseñar el circuito digital mínimo que en función del estado de los sensores

de la zona de inspección, gobierne de forma adecuada los pistones de

distribución P1, P2, P3 y que además, active una lámpara de ALARMA, cuando

se detecte un mal funcionamiento de los sensores S1, S2, S3 y S4.

Nota: www.alldatasheet.com contiene información sobre circuitos

integrados y permite búsquedas por referencia o por tipo de función.

2º) Diseñar un circuito alternativo al anterior que emplee únicamente un

dispositivo de memoria no volátil de tamaño adecuado, mostrando los datos

que se deberían grabar en el mismo para implementar la función.

P1B1-S1 Entradas y Salidas del sistema:

- Entradas:

• Sensor S1: si detecta envase activo. S1=1 Activo.

• Sensor S2: si detecta etiqueta activo. S2=1 Activo.

• Sensor S3: si detecta llenado activo. S3=1 Activo.

• Sensor S4: si detecta tapón activo. S4=1 Activo.

Page 26: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

26 / 99

- Salidas:

• Pistón P1: botella tapada y vacía activo. P1=1 Activo.

• Pistón P2: falta llenar, etiqueta o tapón activo. P2=1 Activo.

• Pistón P3: botella correcta activo. P3=1 Activo.

• Alarma A: no existe botella activa. A=1 Activo.

P1B1-S2 Tipo de sistema:

Puesto que las salidas únicamente dependen de las entradas se trata de

un sistema combinacional.

P1B1-S3 Elección de criterio de lógica:

Tomamos el criterio de lógica positiva, es decir, un 1 lógico equivaldrá a

existencia de tensión y un 0 lógico equivaldrá a no existencia de tensión.

P1B1-S4 Convenio de entradas y salidas:

Indicado en el enunciado del problema. Ver apartado P1B1-S1.

�� � �����

Sistema

Combinacional

Salidas ���� Entradas ����

S1 P1

S2 P2

S3 P3

S4 A

Page 27: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

27 / 99

P1B1-S5 Tabla de verdad:

Tomamos S1 como el bit de mayor peso y S4 como el bit de menor peso.

Entradas ��� Salidas �� �

П Σ S1

envase

S2

etiqu

S3

lleno

S4

tapón

P1

defec

P2

incom

P3

emba A

15 0 0 0 0 0 0 0 0 0

14 1 0 0 0 1 0 0 0 1

13 2 0 0 1 0 0 0 0 1

12 3 0 0 1 1 0 0 0 1

11 4 0 1 0 0 0 0 0 1

10 5 0 1 0 1 0 0 0 1

9 6 0 1 1 0 0 0 0 1

8 7 0 1 1 1 0 0 0 1

7 8 1 0 0 0 0 1 0 0

6 9 1 0 0 1 1 0 0 0

5 10 1 0 1 0 0 1 0 0

4 11 1 0 1 1 0 1 0 0

3 12 1 1 0 0 0 1 0 0

2 13 1 1 0 1 1 0 0 0

1 14 1 1 1 0 0 1 0 0

0 15 1 1 1 1 0 0 1 0

Page 28: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

28 / 99

P1B1-S6 Funciones de Salida:

(1 � ��9,13� � ��0,1,3,4,5,7,8,9,10,11,12,13,14,15���

(2 � ��8,10,11,12,14� � ��0,2,6,8,9,10,11,12,13,14,15���

(3 � ��15� � ��1,2,3,4,5,6,7,8,9,10,11,12,13,14,15���

# � ��1,2,3,4,5,6,7� � ��0,1,2,3,4,5,6,7,15���

Ahora intentamos simplificar las funciones obtenidas mediante los

mapas de Karnaugh, lo haremos tanto para las funciones expresadas como

suma de productos como para las mismas expresadas como producto de

sumas:

(1 � ��9,13� � )1 * )3''' * )4�

S3S4

00 01 11 10

S1S2

00 0 1 3 2

01 4 5 7 6

11 12

13 15 14

10 8 9 11 10

1

1

Page 29: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

29 / 99

0

1 1

(1 � ��0,1,3,4,5,7,8,9,10,11,12,13,14,15��

� )1 * �)1''' � )3'''� * �)1''' � )4� �

� �)1 * )1''' � )1 * )3'''� * �)1''' � )4� � �)1 * )3''' * )1'''� � �)1 * )3''' * )4�� )1 * )3''' * )4

(2 � ��8,10,11,12,14� � �)1 * )4'''� ��

�)1 * )2''' * )3� � )1 * �)4''' � )2''' * )3�

0

0 0 0

0

0 0 0 0

0 0 0 0

1 1

1

Page 30: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

30 / 99

0

0

0 0 0

0 0

(2 � ��0,2,6,8,9,10,11,12,13,14,15��

� )1 * �)1''' � )2''' � )4'''� * �)3 � )4'''�

(3 � ��15� � )1 * )2 * )3 * )4�

(3 � ��1,2,3,4,5,6,7,8,9,10,11,12,13,14,15� � )1 * )2 * )3 * )4�

0 0

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

0

Page 31: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

31 / 99

0

0 0 0

0 0

0

# � ��1,2,3,4,5,6,7� ��

�)1''' * )2� � �)1''' * )4� � �)1''' * )3� � )1''' * �)2 � )3 � )4�

# � ��0,1,2,3,4,5,6,7,15��

� )1''' * �)2 � )3 � )4�

1

0

0

1

1 1 1 1

1

Page 32: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

32 / 99

P1B1-S7 Esquema digital:

(1 � )1 * )3''' * )4

(2 � )1 * �)4''' � )2''' * )3�

(3 � )1 * )2 * )3 * )4

# � )1''' * �)2 � )3 � )4�

&

S4 S3 S2 S1

P1 1

&

1

≥1

1

&

P2

&

P3

≥1 &

A

Page 33: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

33 / 99

P1B2-S1 Circuito alternativo de memoria no volátil:

Empleamos un dispositivo de memoria no volátil con 4 entradas y 4

salidas, con capacidad para almacenar 16 datos de cuatro bits. De esa forma

podríamos “grabar” la tabla de la verdad que se calculó anteriormente y en

función del número decimal que formen S1,S2,S3,S4 el dispositivo asignará a

las salidas los valores previamente grabados en la fila correspondiente a dicho

número:

0 0 0 0

0 0 0 1

0 0 0 1

0 0 0 1

0 0 0 1

0 0 0 1

0 0 0 1

0 0 0 1

0 1 0 0

1 0 0 0

0 1 0 0

0 1 0 0

0 1 0 0

1 0 0 0

0 1 0 0

0 0 1 0

P1

P2

P3

A

S1

S2

S3

S4

Page 34: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

34 / 99

PRÁCTICA 2: Sistemas Secuenciales

P2. Un motor paso a paso unipolar es una máquina eléctrica rotativa de

corriente continua que necesita para su funcionamiento una determinada

polarización consecutiva de sus devanados. Existen dos modos de

funcionamiento: modo de Paso Completo (se activan dos fases

simultáneamente) y modo de Medio Paso (sólamente una). El modo de Medio

Paso conlleva el giro de la mitad de grados que en el modo de Paso Completo.

La forma de conectar sus devanados se puede ver en la figura siguiente:

Se Pide:

1º) Diseñar el sistema electrónico digital necesario para el control de giro

de un motor de 4 fases unipolar como el descrito, que disponga de la siguientes

señales: Una entrada denominada “SENTIDO” mediante la cual especifirar el

sentido de giro del motor: (0: giro a Izda, 1: giro a Dcha.). Una entrada

Page 35: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

35 / 99

denominada “ENCLAVAR” con la cual controlaremos el giro y la detención:

(0:el motor gira, 1:enclavamiento del motor). El sistema recibirá una señal de

RELOJ de 0-5 V de frecuencia variable que marcará la velocidad de giro del

motor en función de la frecuencia de esta señal de sincronismo.

2º.- Editar el archivo necesario para la síntesis posterior del circuito en

un PLD PALCE22V10.

3º.- Modificar y reprogramar el PLD del circuito para que el motor trabaje

en Medio Paso, controlado por una entrada adicional denominada MODO,

(MODO=0: Medio Paso, Modo =1: Paso Completo). Usando otro PLD adicional

PALCE16V8, se desea además que el sistema de control del motor indique (en

el modo de paso completo) en un display de 7 segmentos los estados

correspondientes a los pasos de polarización (1,2,3,4), activando los

Page 36: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

36 / 99

segmentos “a, b, g, f “ respectivamente. En el modo de medio paso, los

segmentos “g, c, d, e” respectivamente.

Page 37: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

37 / 99

P2-S1.1 Entradas y Salidas del sistema:

- Entradas:

• Sentido giro S. S=0 giro a la izquierda. S=1 giro a la derecha.

• Enclavar E. E=0 el motor gira. E=1 el motor se enclava.

• Reloj CLK: Señal de reloj de frecuencia variable.

- Salidas:

• Fase A: se activa la señal A del motor si A=1.

• Fase B: se activa la señal B del motor si B=1.

• Fase C: se activa la señal C del motor si C=1.

• Fase D: se activa la señal D del motor si D=1.

P2-S1.2 Tipo de sistema:

Puesto que las salidas dependen de las entradas y del Estado en el que

se encuentre el sistema se trata de un sistema Secuencial. Realizaremos un

sistema secuencial tipo Moore por su mayor sencillez respecto al Mealy.

�� � �+,��-�.

Sistema

Secuencial

Tipo Moore

Salidas ���� Entradas ����

S

E

A

B

C

D

Page 38: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

38 / 99

P2-S1.3 Elección de criterio de lógica:

Tomamos el criterio de lógica positiva, es decir, un 1 lógico equivaldrá a

existencia de tensión y un 0 lógico equivaldrá a no existencia de tensión

P2-S1.4 Convenio de entradas y salidas:

Indicado en el enunciado del problema. Ver apartado P2-S1.1.

P2-S1.5 Diagrama de Estados:

Puesto que se trata de un sistema Moore identificamos los diferentes

Estados Internos que se pueden dar con una combinación de las variables de

salida. Nunca se deberá activar al mismo tiempo las fases A y B y, por otro

lado, las fases C y D. Siempre deberemos activar dos fases. Así tendremos 4

estados.

La notación empleada en el diagrama de estados será la siguiente:

Ex: Estado interno del sistema nºx.

ABCD: Valor lógico de las salidas

ES: Valor lógico de las entradas

Ex ABCD

ES

Page 39: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

39 / 99

P2-S1.6 Codificación de estados:

De forma que su valor coincida con los dígitos centrales de los Estados

asignamos los siguientes valores a los estados internos.

E0: Q1=0; Q0=0

E1: Q1=0; Q0=1

E2: Q1=1; Q0=1

E3: Q1=1; Q0=0

01

1X

E0 1001

E1 1010

00

00

E3 0101

E2 0110

01

00 01 00 01

1X

1X 1X

Page 40: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

40 / 99

P2-S1.7 Tabla de excitación y de salida del sistema:

Entradas ���

Est. interno

(t)

Est. interno

(t+1) Salidas �� �

Σ E S Q1 Q0 Q1 Q0 A B C D

0 0 0 0 0 1 0 1 0 0 1

1 0 0 0 1 0 0 1 0 1 0

2 0 0 1 0 1 1 0 1 0 1

3 0 0 1 1 0 1 0 1 1 0

4 0 1 0 0 0 1 1 0 0 1

5 0 1 0 1 1 1 1 0 1 0

6 0 1 1 0 0 0 0 1 0 1

7 0 1 1 1 1 0 0 1 1 0

8 1 0 0 0 0 0 1 0 0 1

9 1 0 0 1 0 1 1 0 1 0

10 1 0 1 0 1 0 0 1 0 1

11 1 0 1 1 1 1 0 1 1 0

12 1 1 0 0 0 0 1 0 0 1

13 1 1 0 1 0 1 1 0 1 0

14 1 1 1 0 1 0 0 1 0 1

15 1 1 1 1 1 1 0 1 1 0

P2-S1.8 Funciones de Salida:

/1�- � 1� � ��0,2,5,7,10,11,14,15��

/0�- � 1� � ��2,3,4,5,9,11,13,15��

# � ��0,1,4,5,8,9,12,13��

0 � ��2,3,6,7,10,11,14,15��

! � ��1,3,5,7,9,11,13,15��

� ��0,2,4,6,8,10,12,14��

Page 41: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

41 / 99

Ahora simplificaremos las funciones obtenidas:

/1�- � 1� � ��0,2,5,7,10,11,14,15��

� &'. )2. /0'''' � &'. ). /0 � &. /1

/0�- � 1� � ∑ �2,3,4,5,9,11,13,15�� � &'. )2. /1 � &'. ). /1'''' � &. /0

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

Page 42: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

42 / 99

# � ��0,1,4,5,8,9,12,13��

� /1''''

0 � ��2,3,6,7,10,11,14,15��

� /1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

Page 43: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

43 / 99

! � ��1,3,5,7,9,11,13,15��

� /0

� ��0,2,4,6,8,10,12,14��

� /0''''

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

Page 44: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

44 / 99

P2-S1.9 Esquema digital:

Resolveremos primero el sistema combinacional II dónde los estados

internos Qi(t+1) dependen de los estados internos inciales Q0(t) y de las

entradas Xi. Utilizaremos Biestables tipo D.

/1�- � 1� � ��0,2,5,7,10,11,14,15��

� &'. )2. /0'''' � &'. ). /0 � &. /1

/0�- � 1� � ∑ �2,3,4,5,9,11,13,15�� � &'. )2. /1 � &'. ). /1'''' � &. /0

E

Q0(t+1)

& 1 S

Bies. D

/0''''

/0

Bies. D

/1''''

/1

1 &

≥1

≥1

Q1(t+1)

CLK

&

&

&

&

&

&

Page 45: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

45 / 99

Ahora resolveremos el sistema combinacional que calcula las salidas en

función de los estados internos y de las entradas (aunque en este caso por

haber elegido un sistema tipo Moore, las salidas no dependerán de las

entradas, como puede verse en las expresiones calculadas). Puede observarse

como las salidas coinciden directamente con los estados al haber codificado los

mismos de forma que coincidieran con las primeras.

# � /1''''

0 � /1

! � /0

� /0''''

S

E

Sis

tem

a

Co

mb

ina

cio

na

l II

Q0(t+1)

Q1(t+1) 1 A

B

1 C

D

Page 46: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

46 / 99

P2-S2 Síntesis del circuito en un PLD.

Utilizando el programa PLDSHELL se definió un programa de acuerdo a

las especificaciones antes mencionadas. En este caso la codificación de

estados fue la siguiente:

E0: Q1=0; Q0=0

E1: Q1=0; Q0=1

E2: Q1=1; Q0=0

E3: Q1=1; Q0=1

Archivo del PLD:

Title CONTROL MOTOR PASO A PASO PRACTICA CYSE Pattern pds Revision 1 Author CYSE Date 14/04/08 CHIP MOTOR_PP 22V10 ;------------------ ASIGNACIàN DE PINES ----------- -------------- PIN RELOJ PIN DIR PIN ENCLAV PIN 16 FA PIN 17 FB PIN 18 FC PIN 19 FD NODE Q0 NODE Q1 ;-----------------DECLARACIàN DE SE¥ALES Y ECUACION ES----------- EQUATIONS Q0.CLKF = RELOJ Q1.CLKF = RELOJ T_TAB ( ENCLAV DIR Q1 Q0 :>> Q1.D Q0.D ) 0 0 0 0 : 0 1 0 0 0 1 : 1 0 0 0 1 0 : 1 1 0 0 1 1 : 0 0 0 1 0 0 : 1 1 0 1 0 1 : 0 0 0 1 1 0 : 0 1 0 1 1 1 : 1 0 1 X 0 0 : 0 0 1 X 0 1 : 0 1 1 X 1 0 : 1 0

Page 47: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

47 / 99

1 X 1 1 : 1 1 ;-------------------------------------------------- ------------ T_TAB ( Q1 Q0 >> FA FB FC FD ) 0 0 : 1 0 0 1 0 1 : 1 0 1 0 1 0 : 0 1 1 0 1 1 : 0 1 0 1 ;-------------------------------------------------- ----------- SIMULATION VECTOR CUENTA := [ Q1 Q0 ] ;--------------------DECLARAR UN VECTOR DE CUENTA-- ----------- SETF /RELOJ /ENCLAV /DIR PRLDF /Q1 /Q0 ;---------DEFINIMOS EL ESTADO INICIAL DEL SISTEMA-- ----------- CLOCKF RELOJ CLOCKF RELOJ FOR k := 1 TO 10 DO BEGIN CLOCKF RELOJ END ;--------------------CUENTA 0123------------------- -------------- SETF DIR FOR k := 1 TO 10 DO BEGIN CLOCKF RELOJ END ;-----------------CUENTA 3210-------------------- SETF ENCLAV CLOCKF RELOJ CLOCKF RELOJ SETF /ENCLAV CLOCKF RELOJ CLOCKF RELOJ SETF ENCLAV CLOCKF RELOJ CLOCKF RELOJ ;-----------------------ENCLAVAMIENTO-------------- --------- ;FIN

Page 48: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

48 / 99

P2-S3 Modificar y reprogramar el PLD.

Código VHDL para que el motor puede trabajar en Medio Paso,

añadiendo una entrada adicional. Asi mismo, se indica el código VHDL para

que un display muestre para el caso de paso completo los estados de

polarización.

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity motor_paso_a_paso is

Port ( RELOJ : in std_logic; SENT : in std_logic; ENCLAV : in std_logic; MODO: in std_logic; FASES : out std_logic_vector(3 downto 0));

end motor_paso_a_paso; architecture behavioral of motor_paso_a_paso is signal CUENTA:std_logic_vector (1 downto 0); begin

process (RELOJ) begin

if RELOJ'event and RELOJ='1' then if ENCLAV='0' then

if SENT='1' then CUENTA <= CUENTA + '1';

CUENTA <= CUENTA - '1'; end if;

end if; end if;

end process; process (CUENTA,MODO) begin

if MODO='1' then case CUENTA is

when "00" => FASES <= "1001";

when "01" => FASES <= "1010";

when "10" => FASES <= "0110";

when "11" => FASES <= "0101";

when others => Null; end case;

else case CUENTA is

when "00" => FASES <= "0001";

Page 49: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

49 / 99

when "01" => FASES <= "0100";

when "10" => FASES <= "0010";

when "11" => FASES <= "1000";

when others => Null; end case;

end if; end process;

end behavioral;

Segunda parte: (Display de control)

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity vis is

Port ( MODO : in STD_LOGIC; SENT: in STD_LOGIC; FASES : in STD_LOGIC_VECTOR (3 downto 0); SEGMENTOS: out STD_LOGIC_VECTOR (0 to 6)); --segmen tos

display end vis; architecture Behavioral of vis is begin

process (MODO,SENT,FASES) begin if (MODO = '1' and SENTIDO = '1' ) then

case FASES is when "1001" =>

SEGMENTOS <= "1000000"; --segmento a when "1010" =>

SEGMENTOS <= "0100000"; --segmento b when "0110" =>

SEGMENTOS <= "0000001"; --segmento g when "0101" =>

SEGMENTOS <= "0000010"; --segmento f when others => Null;

end case; elsif (MODO = '1' and SENT = '0') then

case FASES is when "0101" =>

SEGMENTOS <= "1000000"; --segmento a when "0110" =>

SEGMENTOS <= "0100000"; --segmento b when "1010" =>

SEGMENTOS <= "0000001"; --segmento g when "1001" =>

SEGMENTOS <= "0000010"; --segmento f when others => Null;

end case;

Page 50: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

50 / 99

elsif (MODO = '0' and SENT = '1') then case FASES is

when "1000" => SEGMENTOS <= "0000001"; --segmento g

when "0010" => SEGMENTOS <= "0010000"; --segmento c

when "0100" => SEGMENTOS <= "0001000"; --segmento d

when "0001" => SEGMENTOS <= "0000100"; --segmento e

when others => Null; end case;

else case FASES is

when "0001" => SEGMENTOS <= "0000001"; --segmento g

when "0100" => SEGMENTOS <= "0010000"; --segmento c

when "0010" => SEGMENTOS <= "0001000"; --segmento d

when "1000" => SEGMENTOS <= "0000100"; --segmento e

when others => Null; end case;

end if; end process;

end Behavioral;

Page 51: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

51 / 99

PRÁCTICA 3: VHDL

Se desea diseñar un circuito digital que realice la suma de números de 1

bit (a,b), incluyendo un bit de acarreo de entrada (Ci), y genere un bit de Suma

(S) y otro de acarreo de salida (Co).

Se pide:

a.1) -Tabla de la verdad del sistema y esquema lógico.

- Descripción en VDHL del módulo

- Síntesis y simulación.

a.2) Utilizando como componentes tres módulos de los anteriores, describir

en VHDL estructural un circuito sumador de 3 bits.

a.3) El sistema se pretende diseñar en VDHL estructurado y se sintetizará

sobre un dispositivo FPGA tipo Spartan 3 (XC3S200 ft256 -4), disponible en la

tarjeta de desarrollo Digilent.

b) Análogamente, diseñar un Multiplexor de 4 canales con salida triestado

mediante la descripción de un módulo Decodificador “uno entre cuatro” y

módulos de tipo Buffer Triestado, mediante VHDL estructural.

Page 52: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

52 / 99

P3A1-S1 Entradas y Salidas del sistema:

- Entradas:

• a: bit lógico. Primer número a sumar .

• b: bit lógico. Segundo número a sumar.

• Ci: bit lógico. Acarreo inicial a sumar.

- Salidas:

• S: bit lógico. Cifra de menor peso de Suma de a+b

• Co: bit lógico. Acarreo de salida. Cifra de mayor peso de Suma de

a+b (necesario para representar el número 3 en binario mediante dos

dígitos).

P3A1-S2 Tipo de sistema:

Puesto que las salidas únicamente dependen de las entradas se trata de

un sistema combinacional.

�� � �����

Sistema

Combinacional

Salidas ���� Entradas ����

a S

b

Co Ci

Page 53: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

53 / 99

P3A1-S3 Elección de criterio de lógica:

Tomamos el criterio de lógica positiva, es decir, un 1 lógico equivaldrá a

existencia de tensión y un 0 lógico equivaldrá a no existencia de tensión.

P3A1-S4 Convenio de entradas y salidas:

Puesto que tanto las entradas como las salidas son números binarios no

es necesario establecer ningún convenio adicional. Únicamente señalar que en

la salida el bit de menor peso de la suma será ‘S’ y el de mayor peso ‘Co’.

P3A1-S5 Tabla de verdad:

Entradas ��� Salidas �� �

П Σ Ci a b Co S

7 0 0 0 0 0 0

6 1 0 0 1 0 1

5 2 0 1 0 0 1

4 3 0 1 1 1 0

3 4 1 0 0 0 1

2 5 1 0 1 1 0

1 6 1 1 0 1 0

0 7 1 1 1 1 1

P3A1-S6 Funciones de Salida:

!4 � ��3,5,6,7� � ��3,5,6,7�55

) � ��1,2,4,7� � ��1,2,4,7�55

Page 54: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

54 / 99

Ahora intentamos simplificar las funciones obtenidas mediante los

mapas de Karnaugh, lo haremos tanto para las funciones expresadas como

suma de productos como para las mismas expresadas como producto de

sumas, obteniendo el mismo resultado:

!4 � ��3,5,6,7� � !6. 7 � 8. 7 � !6. 85

) � ��1,2,4,7� � !6. 8'. 7' � !9: . 8'. 7 � !6. 8. 7 � !9: . 8. 7' � 8. �7. !6 � 7'. !9: �5

� 8.: +7'. !6 � 7. !9: . � 8. +7 ; !9'''''''''. � 8'. �7 ; !6� � 8 ; 7 ; !6

1

1 1 1

1

1

1

1

Page 55: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

55 / 99

!4 � ��3,5,6,7� �5

�!6 � 7�. �8 � 7�. �!6 � 8�

� �!6. 8 � !6. 7 � 7. 8 � 7. 7�. �!6 � 8�� !6. 8. !6 � !6. 8. 8 � !6. 7. !6 � !6. 7. 8 � 7. 8. !6 � 7. 8. 8 � 7. 7. !6� 7. 7. 8 � 8. !6 � 8. !6 � 7. !6 � !6. 7. 8 � 7. 8. !6 � 7. 8 � 7. !6 � 7. 8� 8. !6 � 7. !6 � 8. 7. !6 � 7. 8 � 8. !6 � 7. !6 � 7. 8

) � ��1,2,4,7�5

� +!6 � 8' � 7�'''. �!9'''' � 8' � 7.. �!6 � 8 � 7�. �!9: � 8 � 7�''' �

� 8. +7 ; !9'''''''''. � 8'. �7 ; !6� � 8 ; 7 ; !6

0

0 0 0

0

0

0

0

Page 56: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

56 / 99

P3A1-S7 Esquema digital:

) � 8 ; 7 ; !6 !4 � !6. 7 � 8. 7 � !6. 8

b

a

Ci

S

≥1

&

Co

=1

&

&

Page 57: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

57 / 99

P3A1-S8 VDHL:

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity SUMA1BIT is Port ( a : in STD_LOGIC; b : in STD_LOGIC; ci : in STD_LOGIC; s : out STD_LOGIC; co : out STD_LOGIC); end SUMA1BIT; architecture Behavioral of SUMA1BIT is begin s<=a XOR b XOR ci; co<=(a AND b) OR (a AND ci) OR (b AND ci); end Behavioral;

Page 58: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

58 / 99

P3A2-S1 Sumador de 3 Bits en VDHL:

Emplearemos el código del sumador de 1Bit utilizándolo en el código del

sumador de 3 Bit como un componente.

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity SUMA3BIT is Port ( A : in STD_LOGIC_VECTOR (2 downto 0); B : in STD_LOGIC_VECTOR (2 downto 0); c_int : in STD_LOGIC; suma : out STD_LOGIC_VECTOR (2 downto 0); c_out : out STD_LOGIC); end SUMA3BIT; architecture Behavioral of SUMA3BIT is component SUMA1BIT is Port ( a : in STD_LOGIC; b : in STD_LOGIC; ci : in STD_LOGIC; s : out STD_LOGIC; co : out STD_LOGIC); end component; signal nodo1:STD_LOGIC; signal nodo2:STD_LOGIC; begin U1: SUMA1BIT port map (A(0),B(0),c_int,suma(0),nodo1); U2: SUMA1BIT port map (A(1),B(1),nodo1,suma(1),nodo2); U3: SUMA1BIT port map (A(2),B(2),nodo2,suma(2),c_out); end Behavioral;

A continuación simulamos el programa con el siguiente código de Testbench:

Page 59: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

59 / 99

LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; ENTITY TB_SUMA1BIT IS END TB_SUMA1BIT; ARCHITECTURE behavior OF TB_SUMA1BIT IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT SUMA1BIT PORT( a : IN std_logic; b : IN std_logic; ci : IN std_logic; s : OUT std_logic; co : OUT std_logic ); END COMPONENT; --Inputs signal a : std_logic := '0'; signal b : std_logic := '0'; signal ci : std_logic := '0'; --Outputs signal s : std_logic; signal co : std_logic; BEGIN -- Instantiate the Unit Under Test (UUT) uut: SUMA1BIT PORT MAP ( a => a, b => b, ci => ci, s => s, co => co ); -- No clocks detected in port list. Replace <clock> below with -- appropriate port name -- Stimulus process stim_proc: process begin -- hold reset state for 100ms. wait for 100ms;

Page 60: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

60 / 99

a<='0'; b<='1'; ci<='1'; wait for 100ms; a<='1'; b<='1'; ci<='1'; wait for 100ms; a<='0'; b<='0'; ci<='0'; wait; end process; END;

Page 61: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

61 / 99

P3B-S1 Introducción

Un multiplexor es un dispositivo que dispone de un conjunto de entradas

de datos y de control y una única salida. Mediante las patillas de control,

permite dirigir la información digital procedente de una de las diferentes

entradas de datos hacia la salida. Un multiplexor con salida triestato sigue

teniendo una única salida pero ésta puede presentar tres valores diferentes: ‘0’

lógico, ‘1’ lógico, y un estado de Alta impedancia. Esto se consigue mediante el

uso de Buffers Triestado.

Buffers Triestado: Consisten en dispositivos que pueden presentar en su

salida 3 estados diferentes. Dos de éstos estados son los estados lógicos 0 y 1.

El tercer estado, denominado “estado de Alta Impedancia”, no es un estado

lógico como tal, sino que se trata de un modo de funcionamiento en el cual la

salida del dispositivo queda flotante, es decir, presenta una impedancia

suficientemente grande (idealmente infinita) como para considerar que la salida

está desconectada del resto del circuito.

Un Multiplexor triestado se construye mediante el uso de un

decodificador y buffers triestado. En nuestro ejemplo, contamos con la ayuda

de 4 buffers triestado. Estas puertas poseen una entrada de desinhibición (EN)

del tercer estado de la salida y una salida sigue a la entrada D. Por el contrario,

cuando EN se encuentra a nivel cero, la salida se pone en Alta Impedancia.

También contamos con un decodificador de 2 a 4 con enable activo a nivel

bajo. Siguiendo el funcionamiento del decodificador, poniendo una combinación

binaria en las patillas de entrada, sólo una de las salidas se activará. Cada

salida del decodificador se conectará a la alimentación de cada buffer triestado,

permitiendo el funcionamiento de un buffer para cada combinación de entrada.

Y como tenemos la absoluta certeza de que sólo un buffer se activará para

cada combinación binaria, podemos unir todas las salidas de los buffers,

teniendo una única salida. Hemos construido, por tanto, un multiplexor de 4

canales (las 4 entradas de los buffers triestado), con 2 entradas de selección

(las entradas del decodificador) y con enable a nivel bajo.

Page 62: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

62 / 99

P3B-S2 Código VDHL de un buffer triestato.

library ieee; use.ieee.std_logic_1164.all; ENTITY buffer3e IS

PORT (d,t: IN std_logic;

s: OUT std_logic);

END buffer3e

ARCHITECTURE arq_ buffer3e OF buffer3e IS

BEGIN

PROCESS (d, t)

BEGIN

IF t=’1’ THEN s <= d;

ELSE s<= ‘Z’;

END IF;

END PROCESS;

END arq_ buffer3e;

Page 63: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

63 / 99

P3B-S3 Código VDHL de un decodificador 2 a 4 con enable activo a nivel bajo

(tomaremos también las salidas activas a nivel bajo):

library ieee; use.ieee.std_logic_1164.all; ENTITY deco2a4 IS

PORT (en: IN std_logic;

a: IN bit_vector(1 DOWNTO 0);

b: OUT bit_vector(3 DOWNTO 0);

END deco2a4

ARCHITECTURE arq_deco2a4 OF deco2a4 IS

BEGIN

PROCESS (en, a)

BEGIN

IF en=’0’ THEN

b<=”1111”;

ELSE

CASE a IS

WHEN “00” => b <=”1110”;

WHEN “01” => b <=”1101”;

WHEN “10” => b <=”1011”;

WHEN “11” => b <=”0111”;

WHEN OTHERS => b <=”1111”;

END CASE;

END IF;

END PROCESS;

END arq_deco2a4;

Page 64: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

64 / 99

P3B-S4 Multiplexor:

Ahora describiremos el módulo del multiplexor empleando como

componentes los módulos antes descritos:

library ieee; use.ieee.std_logic_1164.all; ENTITY mux4tri IS

PORT (en: IN std_logic;

s: IN bit_vector(1 DOWNTO 0);

d: IN bit_vector(3 DOWNTO 0);

sal: OUT std_logic);

END mux4tri

ARCHITECTURE arq_ mux4tri OF mux4tri IS

COMPONENT buffer3e

PORT (d,t: IN std_logic;

s: OUT std_logic);

END COMPONENT;

COMPONENT deco2a4

PORT (en: IN std_logic;

a: IN bit_vector(1 DOWNTO 0);

b: OUT bit_vector(3 DOWNTO 0);

END COMPONENT;

Page 65: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

65 / 99

SIGNAL c1,c2,c3,c4,sal1,sal2,sal3,sal4: std_logic;

BEGIN

U1: deco2a4 PORT MAP(en,s,b);

U2: buffer3e PORT MAP(d(1),b(1),sal1);

U3: buffer3e PORT MAP(d(2),b(2),sal2);

U4: buffer3e PORT MAP(d(2),b(3),sal3);

U5: buffer3e PORT MAP(d(2),b(4),sal4);

PROCESS (sal1,sal2,sal3,sal4)

IF sal1 /= ‘Z’ THEN sal <=sal1;

ELSE IF sal2 /= ‘Z’ THEN sal <=sal2;

ELSE IF sal3 /= ‘Z’ THEN sal <=sal4;

ELSE sal<=sal4;

END IF

END PROCESS

END arq_ mux4tri

Page 66: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

66 / 99

PRÁCTICA 4: SIMULACIÓN VHDL

A)

1º) Describir en lenguaje VHDL un contador reversible de cuatro bits,

con entradas de habilitación a cuenta, reset y carga en paralelo todas de tipo

síncrono y activas a nivel bajo.

2º) Diseñar un testbench en VHDL que permita comprobar su correcto

funcionamiento dentro del simulador integrado en ISE.

3º) Ampliar el sistema con un bloque visualizador dinámico y sintetizar

de manera que permita comprobar experimentalmente en los visualizadores de

la tarjeta de desarrollo Spartan 3 el correcto funcionamiento del contador,

interactuando con los pulsadores y los switches para su operación.

B) Modificar el archivo final para que el reset y la carga paralelo sean de tipo

asíncrono

Page 67: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

67 / 99

P4A1-S Código VHDL contador:

ENTITY contador4r IS

PORT (rst,en,load,up_down: IN std_logic;

d: IN std_logic _vector(3 DOWNTO 0);

q: OUT std_logic _vector(3 DOWNTO 0));

END contador4r

ARCHITECTURE arq_ contador4r OF contador4r IS

SIGNAL cuenta: std_logic_vector(3 DOWNTO 0);

BEGIN

PROCESS (clk)

BEGIN

IF clk’event AND clk=’1’ THEN

IF en=’0’ THEN

IF rst=’0’ THEN

cuenta<=”0000”;

ELSE IF load=’0’ THEN

g<=d;

ELSE IF up=’1’ THEN

cuenta<=cuenta+1;

ELSE cuenta<=cuenta-1;

END IF

END IF;

END IF;

END PROCESS;

q<=cuenta;

END cuenta;

Page 68: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

68 / 99

P4A2-S Testbench en VHDL

A continuación se incluyen unas capturas de pantalla que muestran el

proceso para realizar la simulación en ISE.

Page 69: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

69 / 99

Page 70: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

70 / 99

Page 71: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

71 / 99

Page 72: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

72 / 99

Partimos de un modelo de código ya existente en el programa para un

contador, y lo modificamos según nuestras especificaciones de diseño.

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity practica4 is Port ( ce : in STD_LOGIC; rst : in STD_LOGIC; up_down : in STD_LOGIC; load : in STD_LOGIC; clk : in STD_LOGIC; d : in STD_LOGIC_VECTOR (3 downto 0); q : out STD_LOGIC_VECTOR (3 downto 0)); end practica4; architecture Behavioral of practica4 is signal CUENTA: STD_LOGIC_VECTOR (3 DOWNTO 0); begin process (<clk>) begin if clk='1' and <clk>'event then if rst='0' then CUENTA <= (others => '0'); elsif ce='1' then if load='0' then CUENTA <=d; else if up_down>='1' then CUENTA <= CUENTA + 1; else CUENTA <= CUENTA - 1; end if; end if; end if; end if; end process; Q<=CUENTA; end Behavioral;

Page 73: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

73 / 99

A continuación el código VHDL utilizado para la simulación:

LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; ENTITY tb_contador_vhd IS END tb_contador_vhd; ARCHITECTURE behavior OF tb_contador_vhd IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT contador PORT( RST : IN std_logic; CLK : IN std_logic; CE : IN std_logic; UP_ND : IN std_logic; LOAD : IN std_logic; D : IN std_logic_vector(3 downto 0); Q : OUT std_logic_vector(3 downto 0) ); END COMPONENT; --Inputs SIGNAL RST : std_logic := '0'; SIGNAL CLK : std_logic := '0'; SIGNAL CE : std_logic := '0'; SIGNAL UP_ND : std_logic := '0'; SIGNAL LOAD : std_logic := '0'; SIGNAL D : std_logic_vector(3 downto 0) := (others=>'0'); --Outputs SIGNAL Q : std_logic_vector(3 downto 0); BEGIN -- Instantiate the Unit Under Test (UUT) uut: contador PORT MAP( RST => RST, CLK => CLK, CE => CE, UP_ND => UP_ND, LOAD => LOAD, D => D, Q => Q ); reloj : PROCESS constant periodo : time := 200 ns; BEGIN CLK <= '0';

Page 74: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

74 / 99

wait for periodo / 2; CLK <= '1'; wait for periodo / 2; END PROCESS; control : PROCESS constant T20 : time := 4000 ns; constant T5 : time := 1000 ns; BEGIN D <= "1010"; CE <= '1'; RST <= '1'; LOAD <= '1'; UP_ND <= '1'; wait for T20; RST <= '0'; wait for T5; CE <= '0'; wait for T5; RST <= '1'; wait for T20; LOAD <= '0'; wait for T20; LOAD <= '1'; wait for T20; END PROCESS; END;

P4A3-S Visualizador dinámico:

No se llegó a realizar este apartado por falta de tiempo. A pesar de ello,

en clase se vieron las principales características de la tarjeta Spartan 3.

Page 75: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

75 / 99

P4B-S Código VHDL contador reset y carga asíncronos

ENTITY contador4r IS

PORT (rst,en,load,up_down: IN std_logic;

d: IN std_logic _vector(3 DOWNTO 0);

q: OUT std_logic _vector(3 DOWNTO 0));

END contador4r

ARCHITECTURE arq_ contador4r OF contador4r IS

SIGNAL cuenta: std_logic_vector(3 DOWNTO 0);

BEGIN

PROCESS (clk,rst,load)

BEGIN

IF clk’event AND clk=’1’ THEN

IF en=’0’ THEN

IF rst=’0’ THEN

cuenta<=”0000”;

ELSE IF load=’0’ THEN

g<=d;

ELSE IF up=’1’ THEN

cuenta<=cuenta+1;

ELSE cuenta<=cuenta-1;

END IF

END IF;

ELSE IF rst=’0’ THEN cuenta<=”0000”;

ELSE IF load=’0’ THEN g<=d;

END IF;

END PROCESS;

q<=cuenta;

END cuenta;

Page 76: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

76 / 99

PRÁCTICA 5: Microcontroladores PIC

P5.E1 Diseñar el programa para un PIC16F84A, para que realice lo siguiente:

a) Un programa que desplace de forma contínua el encendido de un

LED sobre ocho del puerto B, de derecha a izquierda y de izquierda a derecha,

a intervalos de 1 segundo. Este efecto será cíclico. La señal externa de

oscilación para utilizar con el sistema será de 400 Hz.

b) Realizar un programa similar que desplace simultáneamente el

encendido de los dos LED de los extremos, sobre 7 del puerto B, de izquierda a

derecha y de derecha a izquierda respectivamente, hasta el extremo opuesto.

El efecto será cíclico.

P5.E2 Modificar los programas que mediante un bit de entrada PA.0, se elija el

funcionamiento en el modo a) o en el modo b) descritos anteriormente.

Page 77: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

77 / 99

P5.E3 Diseñar el código y simular su correcto funcionamiento para un

dispositivo PIC de gama media PIC16F876A, para que realice un programa que

utilize el contador interno y presente en un puerto de salidas (PB), el número de

pulsos que han llegado al micro a intervalos de 30 segundos procedentes de un

detector fotoeléctrico. El micro, cuando se le solicite mediante un uno lógico por

la patilla de entrada PA.0, deberá presentar por el puerto C, a intervalos de un

segundo, el histórico del número de pulsos que han llegado en los ochos

últimos minutos. (Nota: suponer que en 30 segundos, el detector nunca emite

más de 200 pulsos. Elegir la frecuencia externa para el oscilador del micro

considerando el tiempo invertido por ciclo máquina.)

P5A1-S Programa desp. Izd-dcha, dcha-izda

Primeramente, en www.microchip.com encontramos las caracterícticas

del microcontrolador PIC16F84A. A continuación se reproducen las

característica principales y necesarias para la realización de la práctica.

Page 78: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

78 / 99

Del diagrama de patillas y la tabla con la descripción de las mismas nos

deberemos fijar de la disposición de los puertos, así como de sus

características. En este caso, tenemos dos puertos de entrada/salida, el

PORTA (5 bits) y el PORTB (8 bits). También se nos muestra las patillas para

conectar el PIC a corriente, al oscilador y la patilla reset.

Page 79: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

79 / 99

En la Figura 2.1 se nos muestra la distribución de la memoria del

programa. En este caso nos fijaremos en las direcciones reservadas, la del

vector reset y la de vector de interrupción, y también en la capacidad disponible

(en nuestro caso desde 0000h hasta 3FFh.

En la figura 2.2 podemos apreciar las direcciones asignadas dentro de la

memoria de datos. Nos fijaremos principalmente en nuestro caso en las

direcciones de los puertos (PORTA ->05h y PORTB -> 06h ámbos en el banco

0) así como de los registros para configurar dichos puertos (TRISA ->85h y

TRISB ->86h ambos en el banco 1), y también de la dirección asignada al

registro STATUS (03h o 83 h para el banco 0 o el banco 1)

Page 80: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

80 / 99

En la Tabla 2.1 se nos muestran las características de los registros

especiales dentro de la memoria de datos.

Por otro lado, en la Tabla 2.2 se nos muestran las instrucciones

disponibles a la hora de realizar el código de nuestro programa.

Page 81: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

81 / 99

Page 82: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

82 / 99

Page 83: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

83 / 99

Nuestro programa debe poner a uno el primer bit del puerto “B”,

esperar un segundo y encender el siguiente bit, realizando una secuencia

cíclica de izquierda a derecha y de derecha a izquierda.

Puesto que nuestro oscilador interno es de 4MHz, las instrucciones se

ejecutarán en 1uS (1 cm=1/4f), exceptuando los saltos que tardarán 2 ciclos, es

decir 2uS. Para generar el retardo de 1 segundo deberemos crear una

subrutina que ejecutará una serie de instrucciones ocupando al

microcontrolador durante 1 segundo, para volver finalmente a la siguiente

instrucción desde dónde fue llamada. Para crear dicha subrutina podemos

realizar un código de la forma siguiente:

A la derecha de cada instrucción aparece el número de ciclos que

tomará cada una. Las primeras dos toman solamente 1 ciclo, la tecera decfsz

toma (N-1)+2, porque decrementará N-1 veces la variable N y en el último

decremento hará un salto, es por eso el +2. La instrucción goto se ejecuta en 2

ciclos y se ejecutará N-1 veces, es por eso que se toma como 2*(N-1). De esta

forma tenemos que el número de ciclos, y por lo tanto el tiempo que tendremos

de retardo está dado por la siguiente expresión: 1+1+(1)(N-1)+2+(2)(N-1) , ó

4+N-1+2N-2, o lo que es lo mismo 3N+1. Si queremos un retardo de 100uS

entonces tenemos que 3N+1=100, despejando tenemos N=(100-1)/3=33, asi

que para tener un retardo de 100uS el valor de la variable N debe ser 33.

Anidando ciclos como el anterior podemos llegar a conseguir retardos

de la magnitud deseada, aunque la precisión lo sea del 100%. En nuestro caso,

para un segundo de retardo tendríamos que emplear este código:

Page 84: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

84 / 99

Aqui vemos que la variable P afecta a los dos retardos que ya habíamos

definido de modo que la expresión para calcular el nuevo retardo total seria

[(3N+1)M+3M+1]P+1+1+(1)(P-1)+2+(2)(P-1), y reduciendo terminos la

expresion seria [(3N+1)M+3M+1]P+3P+1. Queremos un retardo de 1 segundo,

esto son 1000000 ciclos, por lo que nuestra expresión del retardo debe ser

igual a un millón: [(3N+1)M+3M+1]P+3P+1=1000000. Sustituyendo N y M

tenemos 9995P+1=1000000, entonces tenemos que P=(999999)/9995 y P

entonces es aproximadamente igual a 100.

Otra opción, para lograr retardos exactos, puede ser emplear la

aplicación existente en http://www.piclist.com/techref/piclist/codegen/delay.htm.

Allí, indicando la frecuencia de reloj, el retardo deseado, los nombres de las

variables y de la subrutina, obtenemos el siguiente código:

; Delay = 1 seconds ; Clock frequency = 4 MHz ; Actual delay = 1 seconds = 1000000 cycles ; Error = 0 % cblock d1 d2 d3 endc retraso ;999990 cycles movlw 0x07

Page 85: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

85 / 99

movwf d1 movlw 0x2F movwf d2 movlw 0x03 movwf d3 retraso_0 decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto retraso_0 ;6 cycles goto $+1 goto $+1 goto $+1 ;4 cycles (including call) return

Otra opción puede ser utilizar una libreria que incluya una instrucción

para realizar retardos, incluyendo en el código INCLUDE<RETARDOS.INC> y por

ejemplo, call Retardo_10ms (llama al retardo de 10 mili segundos).

Page 86: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

86 / 99

Finalmente, el código del programa seria el siguiente:

#include "P16F84.INC"

cont equ 0x0C ; para hacer el retardo cont2 equ 0x0D cont3 equ 0x0E reset org 0x00 ; origen del programa, aqu í ; comenzará ; siempre que ocurra un reset goto inicio ; salta a "inicio" INICIO bsf STATUS, RP0 ; Selecciona el banco1

movlw B'00000000' ; (W) <= '00000000' movwf TRISB ; PORT B como salida bcf STATUS, RP0 ; Selecciona el banco0 movlw B'00000001' ; (W) <= '00000001' movwf PORTB ; (PORTB) <= '00000001' call retardo ; llama a retardo IZDA rlf PORTB, F ; rota Portb izd y lo guarda en

; el mismo Portb call retardo ; llama a retardo

btfss PORTB, 0x07 ; comprueba bit 7 de PORTB goto IZDA ; si no ha llegado al final va a

; izda para seguir rotando. Si ; ultimo bit del Puerto b está ; encendido salta la siguiente ; linea y pasa a rotar a la dcha

DCHA rrf PORTB, F ; rota Portb dcha y lo guard a en

; el mismo Portb call retardo ; llama a retardo

btfss PORTB, 0x00 ;comprueba bit 0 de PORTB goto DCHA goto IZDA ;repite el ciclo entero ;subrutina retardo RETARDO movlw B'01100100'; (W) <= 100

movwf CONT3 CICLO 3 movlw B'01100001'; (W) <= 97

movwf CONT2 CICLO 2 movlw B'00100001'; (W) <= 33

movwf CONT CICLO decfsz CONT,f

goto CICLO decfsz CONT2,f goto CICLO2 decfsz CONT3,f goto CICLO3 return

end

Page 87: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

87 / 99

P5B-S Programa desp. central.

Nuestro programa debe encender secuencialmente los bit 7-0, 6-1,5-2-4-

3,5-2,6-1,7-0.. del puerto b:

#include "P16F84.INC"

cont equ 0x0C ; para hacer el ret ardo cont2 equ 0x0D cont3 equ 0x0E

reset org 0x00 ; origen del programa, aquí ; comenzará ; siempre que ocurra un reset goto inicio ; salta a "inicio" INICIO bsf STATUS, RP0 ; Selecciona el banco1

movlw B'00000000' ; (W) <= '00000000' movwf TRISB ; PORT B como salida bcf STATUS, RP0 ; Selecciona el banco0 CICLO movlw 0x41 ; (W) <= '0100 0001' movwf PORTB ; (PORTB) <= '0100 0001' call retardo ; llama a retardo

movlw 0x22 ; (W) <= '0010 0010' movwf PORTB ; (PORTB) <= '0010 0010' call retardo ; llama a retardo

movlw 0x22 ; (W) <= '0001 0100' movwf PORTB ; (PORTB) <= '0001 0100' call retardo ; llama a retardo

movlw 0x22 ; (W) <= '0010 0010' movwf PORTB ; (PORTB) <= '0010 0010' call retardo ; llama a retardo goto ciclo

;subrutina retardo RETARDO movlw B'01100100'; (W) <= 100

movwf CONT3 CICLO 3 movlw B'01100001'; (W) <= 97

movwf CONT2 CICLO 2 movlw B'00100001'; (W) <= 33

movwf CONT CICLO decfsz CONT,f

goto CICLO decfsz CONT2,f goto CICLO2 decfsz CONT3,f goto CICLO3 return

end

Page 88: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

88 / 99

P5-S.E.2 Incluir un selector de modo.

En este caso tendremos que emplear también el puerto A, configurarlo

como puerto de entrada y chequear el valor del primer dígito para ejecutar uno

u otro programa.

#include "P16F84.INC"

cont equ 0x0C ; para hacer el ret ardo cont2 equ 0x0D cont3 equ 0x0E

reset org 0x00 ; origen del programa, aquí ; comenzará ; siempre que ocurra un reset goto inicio ; salta a "inicio" INICIO bsf STATUS, RP0 ; Selecciona el banco1

movlw B'00000000' ; (W) <= '00000000' movwf TRISB ; PORT B como salida bcf STATUS, RP0 ; Selecciona el banco0

btfss PORTA, 0x00 ; comprueba bit 0 de PORTA goto MODO A ; si es 1 salta la línea

goto ciclo

MODO A movlw B'00000001' ; (W) <= '00000001' movwf PORTB ; (PORTB) <= '00000001' call retardo ; llama a retardo IZDA rlf PORTB, F ; rota Portb izd y lo guarda en

; el mismo Portb call retardo ; llama a retardo

btfss PORTB, 0x07 ; comprueba bit 7 de PORTB goto IZDA ; si no ha llegado al final va a

; izda para seguir rotando. Si ; ultimo bit del Puerto b está ; encendido salta la siguiente ; linea y pasa a rotar a la dcha

DCHA rrf PORTB, F ; rota Portb dcha y lo guarda en

; el mismo Portb call retardo ; llama a retardo

btfss PORTB, 0x00 ;comprueba bit 0 de PORTB goto DCHA goto IZDA

MODO B movlw 0x41 ; (W) <= '0100 0001' movwf PORTB ; (PORTB) <= '0100 0001' call retardo ; llama a retardo

movlw 0x22 ; (W) <= '0010 0010' movwf PORTB ; (PORTB) <= '0010 0010' call retardo ; llama a retardo

Page 89: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

89 / 99

movlw 0x22 ; (W) <= '0001 0100' movwf PORTB ; (PORTB) <= '0001 0100' call retardo ; llama a retardo

movlw 0x22 ; (W) <= '0010 0010' movwf PORTB ; (PORTB) <= '0010 0010' call retardo ; llama a retardo goto MODO B

;subrutina retardo RETARDO movlw B'01100100'; (W) <= 100

movwf CONT3 CICLO 3 movlw B'01100001'; (W) <= 97

movwf CONT2 CICLO 2 movlw B'00100001'; (W) <= 33

movwf CONT CICLO decfsz CONT,f

goto CICLO decfsz CONT2,f goto CICLO2 decfsz CONT3,f goto CICLO3 return

end

Page 90: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

90 / 99

P5-S.E.3 Detector Fotoeléctrico usando PIC16F876A.

Primeramente obtenemos de www.microchip.com las características

principales del PIC a emplear.

Page 91: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

91 / 99

Page 92: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

92 / 99

Page 93: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

93 / 99

Page 94: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

94 / 99

Page 95: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

95 / 99

El Programa utilizará el timer del pic como contador para detectar el

número de pulsos que llega al puerto A. El puerto B lo tendremos que

configurar como salida, el puerto A como entrada, opción que viene por

defecto, específicamente emplearemos el pin nº6 “RA4/TOCK” para introducir

la señal de pulsos del detector fotoeléctrico, y el pin nº 2 “RA0” para indicar el

momento en el que queremos que se muestren los valores deseados en el

puerto B.

Utilizando direccionamiento indirecto iremos almacenando en una “tabla”

de 16 filas los valores que se almacenan en el Timer0 cada 30 s. Se utilizará un

método parecido para, en el caso de que PA.0 valga 1 (esto se comprobará

cada segundo) mostrar los valores en el puerto B con un periodo de 1s.

Elegimos una frecuencia externa para el oscilador del micro de 4 MHz.

Este dato lo tendremos en cuenta a la hora de realizar el código para el retardo

de 1s. El registro OPTION_REG tiene por defecto sus valores a uno (el Timer0

ya esta configurado como contador de pulsos). Debemos cambiar los tres

primeros dígitos a cero, para que el divisor de frecuencia sea de 1:1.

A continuación se realizará el diagrama de bloques del programa.

Posteriormente se indicará el código para el microcontrolador especificado.

Page 96: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

96 / 99

INICIO

CONFIGURAR:

- TIMER

- PUERTOS

- VARIABLES

R:30

TMR0=0

CALL RETARDOA

Dec. R

R=0

W<-TMR0

FSR 0x20h

MOVEWF INDF

INC FSR

FSR.4=1

FSR 0x20h

NO

SI

Page 97: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

97 / 99

TABLA

PORTB=FSR

CALL RETARDO1

FSR= 0X20h

FSR=0x30h

SI

DEC FSR

T=16

T=0

SI RETURN

DEC T

RETARDOA

PA0=0

RETURN

CALL RETARDO1

NO

CALL TABLA

Page 98: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

98 / 99

#include " PIC16F876A.INC"

cont equ 0x30h ; para hacer el ret ardo 1s cont2 equ 0x31h cont3 equ 0x32h cont30 equ 0x33h ; para hacer el retard o 30s tab equ 0x34h ; para hacer recorrido ta bla reset org 0x00 ; origen del programa, aquí ; comenzará ; siempre que ocurra un reset goto inicio ; salta a "inicio" INICIO movlw B'00100000' ;(W) <= '00100000'

movwf FSR ; (FSR) <= 20h bsf STATUS, RP0 ; Selecciona el banco1 movlw B'00000000' ; (W) <= '00000000'

movwf TRISB ; PORT B como salida

bsf OPCION-REG, RP0 ; divisor frecuencia 1:1 bsf OPCION-REG, RP1; bsf OPCION-REG, RP2;

BUCLE movlw B'00011110' ;(W) <= 30decimal movwf cont30 ; (cont30) <= 30d clrf TMR0 ; ponemos contador a 0

RET30 CALL RETARDOA DECFSZ cont30,1 ;decrementa y salta si es0 GOTO RET30 movf TMR0 ; muevo nº pulsos a w movwf INDF ; muevo w a FSR incf FSR,1 ; incremento FSR y guardo en FSR btfss FSR,4 ;si FSR.4 es 1 salta línea goto BUCLE movlw B'00100000' ;(W) <= '00100000' movwf FSR ; (FSR) <= 20h goto BUCLE

;subrutina retardoA RETARDOA call RETARDO1

btfsc PA,0 ;si PA.0 es 0 salta línea call TABLA return

Page 99: Illera Cueva Marcos Practicas Cyse

PRÁCTICAS C.I.S.E MARCOS ILLERA CUEVA

99 / 99

;subrutina Tabla TABLA movlw B'00010000' ;(W) <= 16decimal

movwf tab ; (tab) <= 16d BUCLE2 DECFSZ tab,1 ;decrementa y salta si es0

goto BUCLE3 return

BUCLE3 btfsc FSR,4 ;si FSR.4 es 0 salta línea GOTO BUCLE 4

btfsc FSR,3 ;si FSR.3 es 0 salta línea GOTO BUCLE 4

btfsc FSR,2 ;si FSR.2 es 0 salta línea GOTO BUCLE 4

btfsc FSR,1 ;si FSR.1 es 0 salta línea GOTO BUCLE 4

btfsc FSR,0 ;si FSR.0 es 0 salta línea GOTO BUCLE 4 movlw B'00110000' ;(W) <= '00110000'

movwf FSR ; (FSR) <= '00110000'

BUCLE 4 decf fsr,1 ; decremento FSR y guardo en FSR movf FSR ; muevo a w el contenido de FSR movwf PORTB ; muevo w a PORTB call retardo1 ; mantengo 1 segundo. goto BUBLE 2

;subrutina retardo1

RETARDO1 movlw B'01100100'; (W) <= 100

movwf CONT3 CICLO 3 movlw B'01100001'; (W) <= 97

movwf CONT2 CICLO 2 movlw B'00100001'; (W) <= 33

movwf CONT CICLO decfsz CONT,f

goto CICLO decfsz CONT2,f goto CICLO2 decfsz CONT3,f goto CICLO3 return

end