0% encontró este documento útil (0 votos)
33 vistas90 páginas

uCyLP p3

En esta práctica se generan formas de onda utilizando hardware especializado en lugar de la CPU. Se configura un timer para generar pulsos sin intervención de la CPU. Luego se agrega una entrada digital para controlar el ancho de pulso mediante PWM. Finalmente, se implementa un contador de código Gray utilizando lógica programable para crear hardware personalizado.

Cargado por

Henry Delgado
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • salidas digitales,
  • componentes digitales,
  • registros de control,
  • código de reinicio,
  • interrupciones en flanco,
  • configuración de entradas,
  • deshabilitación de hardware,
  • ajuste de temporizadores,
  • implementación de FSM,
  • lógica programable
0% encontró este documento útil (0 votos)
33 vistas90 páginas

uCyLP p3

En esta práctica se generan formas de onda utilizando hardware especializado en lugar de la CPU. Se configura un timer para generar pulsos sin intervención de la CPU. Luego se agrega una entrada digital para controlar el ancho de pulso mediante PWM. Finalmente, se implementa un contador de código Gray utilizando lógica programable para crear hardware personalizado.

Cargado por

Henry Delgado
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • salidas digitales,
  • componentes digitales,
  • registros de control,
  • código de reinicio,
  • interrupciones en flanco,
  • configuración de entradas,
  • deshabilitación de hardware,
  • ajuste de temporizadores,
  • implementación de FSM,
  • lógica programable

Microprocesadores y Lógica

Programable
Práctica 3: Uso del HW para
Generar Formas de Onda

1
Objetivos práctica

• Generar formas de onda sin intervención


la CPU (sólo HW).
• Configurar entradas externas.
• Usar lógica programable para crear HW
especializado.
• Comunicar el HW con el SW.

2
Resumen prácticas (I)

• En las prácticas 1 y 2 hemos estado


generando una forma de onda.
• Para ello, en la práctica 1 hemos utilizado
intensivamente la CPU.
• Con la flexibilidad de una CPU y una
salida digital se puede crear casi cualquier
F.O. o implementar muchos protocolos.
• Esto se conoce como bitbanging.
3
Resumen prácticas (II)

• Si bien esto es posible para aplicaciones


sencillas, no es escalable ni eficiente.
• Las distintas tareas interfieren entre sí y
es difícil obtener una buena precisión
temporal.

4
Resumen prácticas (III)

• En la práctica 2, usamos interrupciones.


• Sólo usábamos ciclos de CPU cuando era
necesario.
• La precisión temporal mejoraba.
• Pero seguimos usando la CPU:
– Quitamos tiempo de otras tareas.
– Existe una latencia desde que la CPU detecta
la petición hasta que puede atenderla.
5
Situación ideal

• En un diseño, al elegir el uC, debemos


buscar uno cuyos periféricos puedan
resolver la mayor parte de sus tareas sin
intervención de la CPU.
• Idealmente la CPU sólo debería configurar
y supervisar el HW.

6
Actividad 1

• En esta actividad lograremos generar la


forma de onda sólo con HW, sin consumir
ciclos de CPU.
• Usaremos la sección OC (Output
Compare) de un temporizador.
• Generaremos un tren de pulsos con una
temporización tan precisa como el reloj del
uC.
7
Timer Output Compare (I)
• Casi siempre los timers CLK
incluyen una etapa OC
n
(comparación de salida). CONTADOR OC
>
• Se usa para generar REG. VALOR
n
COMPARACIÓN
formas de onda.
• En su forma más simple,
consta de un
comparador y un
registro para el valor de
comparación.
• OC = VALOR > CUENTA ? 1 : 0

8
Timer Output Compare (II)
• Con la frecuencia de CLK
reloj del timer y su
n
periodo, ajustamos el CONTADOR OC
periodo de la señal. REG. VALOR
n
>
COMPARACIÓN
• Con el valor del registro
de comparación, la
anchura del pulso.

9
Hacer copia de p1-a1

10
Renombrar copia a p3-a1

11
Añadir señal de reloj

12
Configurar a 1 kHz

13
Incorporar PWM

14
Configurar PWM

15
Conectar salidas al HW

16
Circuito final

17
Generar aplicación

18
Borrar código antiguo

19
Añadir código
inicialización PWM

20
Construir y programar

21
Visualizar mensajes

22
Cuestiones Actividad 1

• ¿Cuántos ciclos de CPU consume la


generación de la intermitencia?
• ¿Tiene algún efecto la generación de la
intermitencia sobre el código que ejecuta
la CPU?
• ¿Y el código que ejecuta la CPU sobre la
precisión de la intermitencia?

23
Actividad 2

• Usaremos el PWM para una conversión


D/A.
• Usaremos las capacidades de los circuitos
de E/S para:
– Configurar una patilla como entrada.
– Conectar la entrada a una resistencia de pull-
up interna.

24
Hacer copia de p3-a1

25
Renombrar copia a p3-a2

26
Cambiar frecuencia reloj

27
Reconfigurar PWM

28
Agregar entrada digital

29
Configurar entrada (I)

• Cambiamos el nombre a UsrBtn.


• No vamos a conectarla a ningún HW, así que
desmarcamos la casilla HW connection.
• Pero sí necesitamos acceso a una patilla
externa: marcamos la casilla External Terminal.
• El interruptor, al cortocircuitar a tierra, pone un
‘0’ en la entrada; pero cuando está abierto, el
nivel en la entrada es indeterminado.
• Necesitamos una resistencia de pull-up; vamos
a usar la interna que poseen las E/S del uC.
30
Configurar entrada (II)

31
Configurar entrada (III)

• Por último, usamos la capacidad de las


entradas digitales para provocar
interrupciones.
• Configuramos la entrada para provocar
una interrupción en el flanco de bajada (al
accionar el pulsador).

32
Configurar entrada (IV)

33
Asignar patilla

34
Añadir interrupción

35
Cambiar nombre a BtnIsr

36
Añadir pulsador

37
Añadir tierra

38
Finalizar esquemático

39
Generar aplicación

40
Escribir ISR

41
Inicializar interrupción

42
Enviar nivel por UART

43
Compilar y programar

44
Visualizar

45
Cuestiones Actividad 2

• ¿Por qué es necesario configurar la


entrada UsrBtn como pull-up?

46
Actividad 3

• Los PSoC de Cypress contienen periféricos


“fijos” como los de otros fabricantes.
• Pero, además, contienen hasta 24 bloques de
lógica programable llamados UDB (Universal
Digital Block).
• Estos UDB permiten:
– Adaptar o personalizar (customize) un periférico fijo a
nuestra aplicación.
– Crear componentes nuevos que el fabricante no ha
previsto.
47
Diagrama de un UDB

48
Diagrama de los PLD

49
Diagrama macrocelda
PLD

50
Objetivos Actividad 3

• Crear un componente con una


funcionalidad no proporcionada por el
entorno (contador de código Gray).
• Interactuar con el componente desde el
SW.

51
Contador de Código Gray

• Cuando la cuenta se incrementa en un


contador binario, puede cambiar más de
un bit de la salida a la vez.
• En un circuito real, es imposible conseguir
que dos salidas cambien exactamente a la
vez.
• Eso implica que en la salida aparecen
distintos valores hasta que se estabiliza el
valor final.
52
Contador de Código Gray

• En muchas aplicaciones (síncronas) esto


no es un problema.
• Pero en otras (asíncronas) puede ser
inaceptable.
• En estos casos se puede usar un contador
de código Gray.
• El código Gray garantiza que de un valor
al siguiente sólo cambia un bit.
53
Tabla verdad contador Gray

Cuenta Código Código + 1


0 000 001
1 001 011
2 011 010
3 010 110
4 110 111
5 111 101
6 101 100
7 100 000

54
Tabla de búsqueda

• Para implementar nuestro contador


usaremos el componente tabla de
búsqueda (LUT: Look-Up Table).
• Este componente nos permite usar
fácilmente los UDB del PSoC.
• Podemos introducir la tabla de la verdad
de nuestro diseño.
• Usando las salidas registradas podemos
implementar FSMs. 55
Implementación

• Usaremos una LUT con salidas


registradas.
• La LUT generará el siguiente valor del
contador.
• Este nuevo valor se guardará en los
registros de salida.
• Las salidas se realimentarán hacia las
entradas para calcular un nuevo valor.
56
Reset

• Añadiremos una entrada más como reset.


• Cuando esta entrada esté a ‘1’, el
siguiente código, sean cuales sean las
otras entradas, será 0.
• Usaremos el bit de más peso (MSB) de
las entradas.
• Conectaremos el reset con el pulsador de
la tarjeta a través de una ISR.
57
Tabla verdad LUT

Reset Código Código + 1


0 000 001
0 001 011
0 011 010
0 010 110
0 110 111
0 111 101
0 101 100
0 100 000
1 XXX 000

X: cualquier valor

58
Hacer copia de p3-a2

59
Renombrar copia a p3-a3

60
Páginas esquemático

• Cuando el diseño se complica:


– Hay que desplazarlo continuamente para ver
las distintas partes.
– Es complicado ver la estructura del diseño.
• El esquemático se puede dividir en varias
páginas para:
– Estructurar el diseño.
– Habilitar o deshabilitar partes concretas del
diseño.
61
Añadir página

62
Renombrar página (I)

63
Renombrar página (II)

64
Seleccionar y cortar PWM y
LEDs

65
Pegar en nueva página

66
Renombrar página original

67
Añadir LUT

68
Documentación LUT

69
Configurar LUT

70
Realimentar salidas

71
Añadir reloj 5Hz

72
Registros

• Vamos a hacer nuestro HW accesible


desde el SW.
• Para ello emplearemos registros:
– Un registro de estado para que el SW pueda
leer el valor del contador.
– Un registro de control para que el SW pueda
reiniciar el contador.

73
Registro de estado

74
Añadir registro de estado

75
Configurar registro de
estado

76
Registro de control

77
Añadir registro de control

78
Modo pulso

• Para el bit de reset usaremos el modo


“pulso”.
• Con este modo el bit permanece a ‘1’
durante un pulso de reloj y después
vuelve automáticamente a ‘0’.
• Esto simplifica el código de nuestra
aplicación.

79
Configurar registro de
control

80
Cablear

81
Deshabilitar HW
temporalmente

• En esta actividad no vamos a utilizar el


PWM ni los LEDs.
• No queremos borrarlos, sólo excluirlos de
la generación del programa.
• Para ello deshabilitaremos la página del
esquemático.

82
Deshabilitar página PWM

83
Generar código

84
Función StatusReg_Read

85
Función Control_Reg_Write

86
Modificar código aplicación

87
Construir y programar

88
Visualizar

89
Cuestiones Actividad 3

• ¿Nuestra aplicación puede leer/modificar


directamente los valores digitales del HW?
• Si no puede hacerlo, ¿cómo podemos
lograr que el SW interactúe con el HW?

90

También podría gustarte