Está en la página 1de 7

PARCIAL 2º CORTE

1. DISEÑO DE UN CIRCUITO DECODIFICADOR DE CONTROL REMOTO:

Existen varios protocolos de transmisión de mandos infra-rojos (IR). Uno de ellos se


denomina codificación RC5 y consiste en la “modulación” del dato a transmitir en base a la
relación del tiempo en alto y en bajo de la señal “portadora” digital. Dicha codificación se
realiza de la siguiente forma:

-Cada bit de información está codificado mediante un nivel bajo y un nivel alto: Un "0" está
codificado con un nivel bajo y alto de duración T respectivamente, y un "1" está codificado
con un nivel bajo de duración T y un nivel alto de duración 2T. Cada “T” tiene una duración
de 600us (el reloj principal, es decir, CLK, tiene un periodo de 1us).

La trama de bits generada al pulsar una tecla en el mando tiene el siguiente formato:
Primero se transmite una cabecera, que consiste en el llamado bit START con una duración
a nivel alto de 3T (1800 us); seguidamente se transmiten 8 Bits que contienen dato a
transmitir iniciando con el LSB. Si por ejemplo en IN_IR está el dato “00000101” (decimal
’5’), la forma de onda que se aplicará a la entrada del circuito integrado será:

Como puede apreciarse, su tarea es DECODIFICAR la trama RC5 y colocar a su salida en un


bus paralelo de 8 bits el dato proveniente del codificador. En quartus sería así:
En total, el circuito debe poder decodificar 256 tramas diferentes.

2. DISEÑO DE UN GENERADOR DE SEÑALES

Diseñar Un circuito generador de señales, que tendrá la siguiente interfaz:

La entrada CLK tiene un periodo de 1ns. La entrada Amp controlará la amplitud de la forma
de onda de salida, así:

00-> factor de amplitud igual a 1

01->factor de amplitud igual a 2

10->factor de amplitud igual a 3

11->factor de amplitud igual a 4

La entrada Freq controlará la frecuencia de la señal:

00->periodo “base” de 64ns

01->periodo de 128ns

10->periodo de 256ns

11->periodo de 512 ns

La entrada “tipo” permitirá seleccionar el tipo de señal:

00->seno

01->cuadrada

10->triangular
11->diente de sierra.

Las señales tendrán 64 muestras. Debido a que la salida es un vector, es necesario habilitar
la vista de señales analógicas en Quartus. Explicación:

¿Cómo genero una señal analógica dentro de un dispositivo digital? La respuesta es sencilla,
esto NO se puede, pero si puedo obtener una versión DISCRETA de esa señal analógica. La
técnica se explica a continuación:

Una señal senoidal puede ser implementada en una FPGA a través de una LUT (Look-Up Table)
que no es más que la equivalencia de una tabla en un microcontrolador.

Si obtenemos la discretización de una señal senoidal y almacenamos dichas muestras en una


tabla y luego las vamos sacando de manera secuencial sincronizados con una señal de reloj, el
efecto a través del tiempo será que estaremos generando una señal senoidal de manera digital:

Valores Unipolares sin signo

Cómo se obtienen las muestras de la señal seno para poder incluirlas en la LUT?

Una de las primeras confusiones es como generar la tabla de senos que encontramos en muchos
programas y cuáles son sus distintas variantes. Lo primero que debemos determinar es la
resolución en bits de la onda analógica. Esto determinará la calidad de la misma. Por simplicidad
vamos a trabajar a 8 bits por lo que aplicando la siguiente fórmula será posible obtener las
muestras de nuestra onda seno:

para 0 ≤ N ≤ 255

Al ir calculando los datos obtendremos unos valores que debemos redondear a entero si es el
caso, cada uno de estos valores representará una muestra de la onda seno y por lo tanto un dato
de la LUT. Los cálculos pueden hacerse con calculadora o si lo prefiere puede utilizar un software
especializado como Matlab. Calculemos algunos valores representativos:

Para N=0

Y = 128 + 127 *sin(2π * 0/ 256)= 128

Para N=64

Y = 128 + 127 *sin(2π * 64/ 256)= 255

Para N=127

Y = 128 + 127 *sin(2π * 127/ 256)= 128

Observe que el efecto de sumar 128 es que en la tabla solo se obtengan números positivos, esto
facilita el diseño mucho.

Implementación de la LUT

Para implementar la LUT en VHDL se debe crear un tipo de datos que me permita almacenar
valores de 8 bits. Inmediatamente podemos inferir que se debe crear un vector 1Dx1D y declarar
una CONSTANTE de este tipo que contenga las muestras calculadas. Se debe declarar CONSTANT
(constante) ya que las muestras son valores fijos y no cambian. Recuerde que la creación del
tipo de datos y la declaración de esta señal se hacen en la zona declarativa de la arquitectura.
Aquí hay un ejemplo:

ARCHITECTURE seno OF fácil IS

TYPE tabla IS ARRAY(0 TO 127) OF STD_LOGIC_VECTOR(7 DOWNTO 0);

CONSTANT mi_tabla: tabla:=(“00000000”, “00000011”, “00000101”,…………….);

BEGIN

Acceder a los valores dentro de la tabla no tiene mayor misterio, simplemente puedo acceder a
cada valor así: (esto es un ejemplo)

Señal_1<=mi_tabla(n) ; -- donde n es el índice del valor al que quiero acceder

Para aumentar o disminuir la frecuencia de la señal senoidal discretizada bastará con variar
el tiempo en que demoramos accediendo a cada uno de los datos (muestras) de la tabla.

La salida será un bus de 8 bits que contiene las muestras de la señal modulada, así que
físicamente se verá como un número binario de 8 bits. Pero el QUARTUS 6.1 o superior permite
ajustar entre las propiedades de la señal en la simulación obtener una versión analógica de una
señal de salida por lo que será posible ver la salida modulada como si se tratase de una señal
analógica. Lo que hace QUARTUS es “pasar” esa señal a través de un DAC para que podamos
verla como analógica.
A continuación se explicará cómo hacerlo por medio de un ejemplo sencillo:

EJEMPLO:

Se desea diseñar un generador de diente de sierra. Este tipo de señal es analógica pero puede
ser implementada digitalmente por medio de un contador ascendente de 8 bits. El código es
muy simple:

Los resultados de simulación normalmente son como se ve:

Puede verse que simplemente se trata de un contador ascendente. Pero si damos click izquierdo
sobre la señal “sierra” para que se seleccione y luego click derecho para que se expanda el menú
como se ve en la figura podemos seleccionar en Display Format la opción Analog Waveform:
Al dar click en esta opción entonces aparecerá posiblemente el siguiente mensaje,
seleccionamos como indica la figura:

En la siguiente ventana damos click en “si”

Luego nuevamente damos click sobre la señal para seleccionarla, después click derecho y
nuevamente seleccionamos analog waveform y sale la siguiente ventana:
Seleccionamos las opciones como se muestran y click ok. Y allí tenemos nuestra onda:

Como puede verse la forma de onda es la representación analógica del contador ascendente.

También podría gustarte