You are on page 1of 8

Desarrollo de un sistema para controlar el nivel de agua dentro de

un depósito utilizando lenguaje VHDL


Adrián Rodrigo Herrera Saldaña
Iván Alejandro López Mercado
Clarivel Fabela Soto
Eduardo Pinto García
Instituto Tecnológico de la Laguna
División de Estudios de Posgrado e Investigación
12 Diciembre 2018

Resumen
En el siguiente documento se presenta un diseño e implementación de un sistema para poder controlar
el nivel de agua en un depósito creando una interfaz máquina humano. El sistema creado emplea un sensor
de presión diferencial MPX2010p junto con una bomba de agua, un amplificador de instrumentación y
convertidor analógico digital.
Palabras clave: VHDL, MPX2010p, Nivel, Agua,

1. Introducción permitiendo con esto la facilidad de ser empleado en ins-


trumentos militares, nucleares, espaciales, automotrices,
En el mundo actual, el uso de dispositivos digitales se médicos etc.
ha convertido en una parte fundamental de la vida diaria La complejidad de los sistemas tienden a estar en ocasio-
encontrandose desde las computadoras para poder reali- nes limitados por la falta de algunos circuitos o programa-
zar los complejos cálculos que permiten diseñar grandes ción para que estos funcionen de acuerdo a alguna tarea en
estructuras, pasando por los robots que pueden construir específico, por lo que es necesario crear aquellos progra-
automóviles, la telefonía para poder comunicarse con pa- mas de computadora y circuitos que tengan la capacidad
rientes lejanos, y el transporte para llegar todos los días al de recibir e interpretar los datos binarios y a su vez , para
trabajo [4]. Todas estas aplicaciones son importantes ya que estas puedan formar parte de un sistema más grande
que se manifiesta en prácticamente todos los campos de como puede ser el control de un proceso industrial.[3]
la actividad humana además de que tienen una influencia Con todo lo anterior mencionado, el objetivo de este ar-
global en el desempeño de la sociedad. [2] tículo es entonces crear un control de nivel por medio de
En lo que se refiere a la parte industrial, la calidad de los una interfaz máquina humano que permita a un operador
productos, procesos y servicios depende cada vez más de llenar un tanque a cierto volumen para poder llevar alguna
la aplicación de los sistemas digitales ya que es más fácil tarea industrial
controlar un proceso por medio de un sistema digital ya Este artículo está estructurado de la siguiente manera:
que estos cuentan con memoria y tienen la capacidad de En el capítulo 2 del artículo se dan a conocer las bases
comunicarse con otros sistemas digitales.[1] teóricas que fueron necesarias para poder programar los
En un sistema digital, el hardware y el software se han diversos componentes que fueron creados por medio del
convertido en los materiales necesarios para que los pro- lenguaje VHDL y con esto poder armar el sistema .
ductos, procesos y servicios sean más avanzados. La tec- En el capítulo 3 se presenta el desarrrollo del sistema ex-
nología en el área de la microelectrónica permite la im- plicando tanto la parte eléctronica como la programación.
plementación de un completo y complejo sistema de pro- En el capítulo 4 se obtienen los resultados al poder imple-
cesamiento de información en un solo circuito como es el mentar el sistema así como ciertas observaciones que en
caso de las FPGA , creando entonces sistemas integrados un futuro servirán para crear un sistema aún mas comple-
que realizan aplicaciones específicas que a su vez pueden to.
ser construidos en volúmenes de producción a gran escala En el capítulo 5 se muestran las conclusiones que mues-

1
tran una reflexión acerca del proyecto realizado así co- tubo de vidrio de un metro de largo con mercurio, cerró
mo las recomendaciones para poder crear un sistema más herméticamente el tubo en un extremo y lo colocó ver-
grande en el futuro. ticalmente con el extremo abierto en un recipiente lleno
. de mercurio. La columna de mercurio cayó a unos 760
mm, dejando un espacio vacío por encima de su nivel.
La unidad de presión, Torr, fue nombrada en honor a este
2. Conceptos preliminares inventor y tiene una proporción de 1 a 760 atmósferas es-
tándar. La presión arterial se mide en Torr (milímetros de
2.1. Convertidor analógico digital mercurio) en la mayor parte del mundo. Las unidades de
presión contemporáneas incluyen el Pa (Pascal) definido
Un convertidor analógico a digital (ADC, A / D o A a por System International (SI) como la unidad de presión
D) es un sistema que convierte una señal analógica, como principal Pa = N . En EE. UU, la presión se mide libras
m2
un sonido captado por un micrófono o una luz que ingresa por pulgada cuadrada (PSI).
a una cámara digital, en una señal digital. Un ADC tam-
bién puede proporcionar una medida aislada, como un dis-
positivo electrónico que convierte una tensión o corriente 2.3.1. Sensor de presión diferencial
analógica de entrada en un número digital que representa
Un sensor de presión diferencial mide la diferencia en-
la magnitud de la tensión o la corriente. Normalmente, la
tre dos o más presiones introducidas como entradas en la
salida digital es un número binario de complemento a dos
unidad de detección. Un ejemplo de aplicación de tal sen-
que es proporcional a la entrada, pero hay otras posibili-
sor es el medidor de flujo de presión diferencial donde el
dades. Hay varias arquitecturas ADC. Debido a la com-
cambio en la velocidad del fluido produce un cambio en
plejidad y la necesidad de componentes emparejados con
la presión y crea una diferencia de presión, de acuerdo a
precisión, todos, excepto los ADC más especializados, se
la ecuación siguiente
implementan como circuitos integrados (IC).
δ P = P1 − P2 (1)

2.3.2. MPX2010DP
El sensor de presión MPX2010DP es un sensor de pre-
sión diferencial que proporciona una señal eléctrica en
mV, es proporcional a la señal de presión de entrada, ade-
más que se puede alimentar con 10 voltios de corriente
directa, su principio de funcionamiento es piezorresistivo.
La presión máxima de operación es de 10 kPa teniendo
2,5mV
entonces una resolución de ∆V∆P = kPa
Figura 1: Primer circuito

2.2. ADC0804
El ADC0804 es un convertidor de analógico a digital
de 8 bits donde sus salidas digitales varían de 0 a un má-
ximo de 255. Que además tiene la cualidad que el tama-
ño del paso del convertidor se puede ajustar ajustando la
tensión de referencia en el pin9. Cuando este pin no está
conectado, el voltaje de referencia predeterminado es el
voltaje de operación, es decir, Vcc. El tamaño del escalón
a 5V es 19.53mV (5V / 255), es decir, por cada aumento
Figura 2: Sensor de presión
de 19.53mV en la entrada analógica, la salida varía en 1
unidad.
2.4. Amplificador de instrumentación
2.3. Medición de presión
Un amplificador de instrumentación es un dispositivo
La medición de la presión moderna fue iniciada por el que permite acoplar sensores a unas entradas que tienen
físico italiano Evangelista Torricelli1 a través de su inven- una alta resistencia en modo diferencial y que además per-
to en 1643, el barómetro de mercurio. Torricelli llenó un mite variar la ganancia por medio de las resistencias.

2
2.4.1. AD620 Se tendrá que el sensor tendrá un rango máximo de 3.67
mV. Esa ganancia se conectó al amplificador de instru-
El AD620 es un amplificador de instrumentación de ba- mentación para que operará en un rango de 0 a 5V y pu-
jo costo y alta precisión que requiere solo una resistencia diera ser convertido a su equivalente digital. Teniendo en-
externa para establecer ganancias de 1 a 10000. Donde la tonces que
ganancia G está dada por
49,4kΩ 5V
49,4kΩ Ganancia = +1 = (5)
G= +1 (2) R g 3,67mV
Rg
49,4kΩ
y donde además Rg es la resistencia externa que se debe 1362,39 = +1 (6)
Rg
de calcular para llegar a la amplificación deseada
49,4kΩ
49,4kΩ 1361,39 = (7)
Rg = (3) Rg
G−1 Quedando entonces que
49,4kΩ
Rg = = 36,28 (8)
1361,39
Para despues arma un circuito de instrumentación como
el siguiente.

Figura 3: AD620

2.5. VGA
La sigla VGA proviene de Video Graphics Array lo
qiue traducido significa arreglo gráfico de video ó adap-
tador gráfico de video. Se trata de un conector semitrape-
zoidal con 15 terminales, que se encarga de enviar las se-
ñales referentes a los gráficos desde la computadora hsata
una pantalla para que sean mostrados al usuario.Por el he- Figura 4: Circuito de instrumentación
cho de permitir la transmisión de datos hacia un disposi-
tivo externo desde la computadora se le denomina puerto. Mientras que para activar el motor se le conectó un sis-
El puerto VGA se encarga de enviar las señales desde la tema relevador transistor para que energízando la base con
computadora hacia la pantalla con soporte de 256 a 16.7 la FPGA se pudiese activar
millones de colores y resoluciones desde 640x480 píxeles
en adelante

3. Desarrollo
Ya que el depósito medía aproximadamente 15 cm.
y considerando que el sensor tenía una resolución de
∆V 2,5mV
∆P = kPa además tomando en cuenta que una columna
de agua de 10,197cm produce 1kPA de presión. Se llega a
la conclusión que 2,5mV = 10,197cm Entonces haciendo Figura 5: Circuito para activar motor
una relación entre la altura y la resolución del sensor

2,5mV Para conectar el monitor con el puerto VGA , segun lo


x= ∗ 15 = 3,67mV (4) que indica la guia de la tarjeta Spartan3 cuando se conecta
10,197

3
el puerto VGA se tiene que enviarle 5 diferentes señales se declaran directamente sobre los PORT MAP.
de 1 bit, La sincronizacion Horizontal (HS), la sincroni-
zacion vertical (VS) y las 3 señales restantes son para los
colores rojo(R), verde (G) y azul (B).Para la sincroniza- 4. Resultados
ción horizontal se tiene un contador de 800 pulsos de reloj
que tiene un total de tiempo de 32uS, y que además duran- Se conectó la pantalla junto con el sensor y la bomba
te la cuenta se tienen 4 zonas distintas Porche delantero, de agua obteniendo el control de nivel
zona visible, Porche trasero y la sincronización, cada una
con su respectivo tiempo en uS. La señal HS durara activa
hasta llegar a la zona de sincronización y cuando llegue a
esa zona se desactivara lo cual le servira a la pantalla para
sincronizarse con su resolucion horizontal.
Para la sincronizacion vertical HS hay varias diferencias,
el tiempo de esta señal cuenta con las mismas 4 zonas e
igual al llegar a la zona de sincronizacion el estado de la
señal VS cambiara a estado bajo, la diferencia entre las se-
ñales HS y VS es el tiempo ya que el contador vertical que
se usa aumenta cada vez que el contador de la cuenta ho-
rizontal termina entonces el tiempo total de la resolucion
vertical es de 16mS tal y como se programó en Anexo 6.1.
Para tener un mejor control, se decidió realizar un mues-
treo como se muestra en el código del Anexo 6.2 donde se Figura 6: Bomba vaciando el agua
tiene un contador que depende del reloj interno de reloj, y
cada vez que llegue a un cierto valor tomara el valor de la
entrada y lo mandara directamente a la salida lo que quie-
re decir que mientras no llegue a ese valor no importara
que el valor en la entrada cambie constantemente mostrar
el que tenga cuando llegue a la cantidad para evitar asi que
la lectura del sensor varie constantemente.
En el código del Anexo 6.3 se reciben las señales del nu-
mero de fila y el numero de columna del componente de
sincronización.Tomando un cierto valor tanto de las filas
como de las columnas y se le indica manualmente que co-
lor se va a necesitar en cada pixel pero si se toman dos
valores, por ejemplo de la columna mayor a 100 y la co-
lumna menor a 200 y se unen con una AND es posible
indicarle a la FPGA que dentro de ese rango se necesita
un cierto valor o color y uniendo ese valor de la columna Figura 7: Interfaz máquina humano y sistema de instru-
en conjunto con las filas igualmente con AND se forma- mentación
rán figuras más definidas.
Además se realizo Anexo 6.4 como un divisor de frecuen-
cia ya que como se pide en los tiempos de sincronizacion 5. Conclusiones
mostrados en las tablas de la tarjeta Spartan3 para cumplir
con la resolucion de 640 X 480 a una frecuencia de trans- La programación se ha convertido en la actualidad en
mision de 60 Hz como stardard para las pantallas fabrica- una herramienta indispensable para manejar cualquier sis-
das en la region de América. La frecuencia de entrada será tema digital ya que estos sistemas tienen cada vez más
entonces la frecuencia del reloj de la tarjeta de 50 MHz y aplicaciones en la vida diaria. Se puede considerar que el
a la salida se tendrá por lo tanto una de 25 MHz. proyecto cumplió su objetivo ya que se pudo controlar el
En este código Anexo 6.5 se declara la entidad principal, nivel de líquido además de que se pudo visualizar en la
aqui se incluye cada uno de los componentes utilizados pantalla la situación del proyecto en tiempo real . Sin em-
para la realización del sensor de nivel. Declarando el ma- bargo la capacidad de la bomba no fue la adecuada ya que
peo de cada puerto con cada uno de los componentes utili- el tiempo de bombeo era demasidao lento, problema que
zados, utilizando señales del mismo tamaño de resolucion se solucionaría con una bomba de más potencia. En lo que
para hacer la conexion entre cada componente, en donde respecta al sensor y a la parte de instrumentación se pu-
si se utilizan las entradas o salidas de la entidad principal diera el proyecto utilizando un sensor de más precisión y
un filtro analógico para tener una resolución mayor.

4
Referencias END I F ;
END PROCESS ;
[1] Mano, Morris: Diseño digital, volumen 4 de 10. Pear- −−−−−−−−−−−−−−−−−−−−−−−−−−SINCRONIZACION
PROCESS (CONH)
son, 2013, ISBN 9786073220408. BEGIN
I F (CONH > " 1 0 1 0 0 0 1 1 1 1 " ) AND (CONH < " 1 0 1 1 1 0 1 1 1 1 " ) THEN
[2] Prado, Daniel: Electrónica del pasado al presente. −− 655 − 751
Universidad de Salamanca, Graficas Lope Laguna −−" 1 0 1 0 0 0 1 1 1 1 " − " 1 0 1 1 1 0 1 1 1 1 "
Grande 79, 2011. −−S i n c r o n i z a c i o n HS
HS <= ’ 0 ’ ;
[3] Ruiz, Gustavo A.: Electrónica básica para ingenie- ELSE HS <= ’ 1 ’ ;
END I F ;
ros, volumen 1. Universidad de Cantabria, Servicio END PROCESS ;
de Repografía Facultad de Ciencias Universidad de
Cantabria Avda. de los Castros S/n 39005-Santander PROCESS (CONV)
España, 2001, ISBN 84-607-1933-2. BEGIN
I F (CONV > " 1 1 1 1 0 1 0 0 0 " )
AND (CONV < " 1 1 1 1 0 1 0 1 0 " ) THEN
[4] Tocci, Ronald J. Neal S. Widmer: Sistemas digitales. −− 488 − 490
Principios y aplicaciones, volumen 4 de 10. Pearson, −−" 1 1 1 1 0 1 0 0 0 " − " 1 1 1 1 0 1 0 1 0 "
53519. Naucalpan de Juárez, Edo.de México, 3a edi- −− S i n c r o n i z a c i o n VS
ción, Julio 2007, ISBN 970-26-0970-4. VS <= ’ 0 ’ ;
ELSE VS <= ’ 1 ’ ;
END I F ;
END PROCESS ;
−−−−−−−−−−−−−−−Zona v i s i b l e
6. Anexos PROCESS (CONH)
BEGIN
I F (CONH > = " 0 0 0 0 0 0 0 0 0 0 " )
6.1. Conexión VGA AND (CONH < " 1 0 0 1 1 1 1 1 1 1 " ) THEN
−−−−−−−−− c o l u m n a s 0 A 639
VISH <= ’ 1 ’ ;
l i b r a r y IEEE ; ELSE VISH <= ’ 0 ’ ;
u s e IEEE . STD_LOGIC_1164 . ALL ; END I F ;
u s e IEEE . STD_LOGIC_ARITH . ALL ; END PROCESS ;
u s e IEEE . STD_LOGIC_UNSIGNED . ALL ;
PROCESS (CONV)
e n t i t y SINCROVGA i s BEGIN
P o r t ( FILA : o u t STD_LOGIC_VECTOR ( 9 downto 0 ) ; I F (CONV >= " 0 0 0 0 0 0 0 0 0 " )
COL : o u t STD_LOGIC_VECTOR ( 9 downto 0 ) ; AND (CONV < " 0 1 1 1 0 1 1 1 1 1 " )
CLK : i n STD_LOGIC ; THEN −−−−−−−−−−−−−−−−−−−−−−−− f i l a s 0 A 479
RST : i n STD_LOGIC ; VISV <= ’ 1 ’ ;
VISIBLE : o u t STD_LOGIC ; ELSE VISV <= ’ 0 ’ ;
HSYNC : o u t STD_LOGIC ; END I F ;
VSYNC : o u t STD_LOGIC ) ; END PROCESS ;
end SINCROVGA ; COL <= CONH;
FILA <= CONV;
a r c h i t e c t u r e B e h a v i o r a l o f SINCROVGA i s HSYNC <= HS ;
VSYNC <= VS ;
SIGNAL CONH , CONV : STD_LOGIC_VECTOR ( 9 DOWNTO 0 ) VISIBLE ; <= VISH AND VISV ;
SIGNAL HS , VS , VISH , VISV : STD_LOGIC ; end B e h a v i o r a l ;
}
begin
−−−−−−−−−−−−−−−−−−−−−−−−− CUENTAS
CONTEO: PROCESS (CLK , RST , CONH , CONV)
BEGIN
6.2. Muestreo
I F RST= ’1 ’ THEN
CONH <= " 0 0 0 0 0 0 0 0 0 0 " ;
CONV <= " 0 0 0 0 0 0 0 0 0 0 " ; l i b r a r y IEEE ;
ELSIF CLK’EVENT AND CLK= ’1 ’ THEN u s e IEEE . STD_LOGIC_1164 . ALL ;
I F CONH = " 1 1 0 0 0 1 1 1 1 1 " THEN u s e IEEE . STD_LOGIC_ARITH . ALL ;
−−−−−− 0 − 799 " 1 1 0 0 0 1 1 1 1 1 " u s e IEEE . STD_LOGIC_UNSIGNED . ALL ;
CONH <= " 0 0 0 0 0 0 0 0 0 0 " ;
I F CONV = " 1 0 0 0 0 0 0 1 1 1 " THEN −−−− Uncomment t h e f o l l o w i n g l i b r a r y
−−−−−− 0 − 520 " 1 0 0 0 0 0 0 1 1 1 " −−− d e c l a r a t i o n i f i n s t a n t i a t i n g
CONV <= " 0 0 0 0 0 0 0 0 0 0 " ; −−−− any X i l i n x p r i m i t i v e s i n t h i s c o d e .
ELSE CONV <= CONV + 1 ; −− l i b r a r y UNISIM ;
END I F ; −−u s e UNISIM . VComponents . a l l ;
ELSE CONH <= CONH + 1 ;
END I F ; e n t i t y MUESTREO i s

5
P o r t ( CLK : i n STD_LOGIC ; AND ( FILA >= " 0 0 0 0 0 0 0 0 0 0 " )
RST : i n STD_LOGIC ; AND ( FILA <= " 0 0 0 0 1 1 0 0 1 0 " ) ) THEN
REF : i n RGBAUX <= " 1 1 1 " ;
STD_LOGIC_VECTOR ( 7 downto 0 ) ; −−−−−−−−SEnAL DE ENTRADA
MUESTRA : o u t ELSIF ( ( COL >= " 0 0 0 1 1 0 0 1 0 0 " )
STD_LOGIC_VECTOR ( 7 downto 0 ) ) ; AND (COL <= " 0 0 0 1 1 1 1 1 1 1 " )
end MUESTREO; AND ( FILA >= " 0 0 0 0 1 1 0 0 1 0 " )
AND ( FILA <= " 0 0 0 1 0 0 1 1 0 1 " ) ) THEN
a r c h i t e c t u r e B e h a v i o r a l o f MUESTREO i s IF NOTREF = NOTSEN THEN
SIGNAL CONT : STD_LOGIC_VECTOR( 2 2 DOWNTO 0 ) ; RGBAUX <= " 1 0 0 " ;
SIGNAL AUXMU: STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; ELSIF NOTREF < NOTSEN THEN
begin RGBAUX <= " 0 1 0 " ;
−−−−− p r o c e s o en e l c u a l h a r e m o s una c u e n t a de ELSE RGBAUX <= " 1 0 0 " ;
−−− 0 h a s t a 6 , 2 4 9 , 9 9 9 , y a l l l e g a r a e s e v a l o r END I F ;
−−−−− t o m a r a una n u e v a m u e s t r a de l a e n t r a d a −−−−−−−−ESTRUCTURA PRINCIPAL
−−y l a m o s t r a r a en l a s a l i d a ELSIF ( ( COL >= " 0 0 0 1 1 1 1 1 1 1 " )
PROCESS (CLK, RST ) AND (COL <= " 1 0 0 0 0 0 0 0 0 0 " )
BEGIN AND ( FILA >= " 0 0 0 0 0 0 0 0 0 0 " )
I F RST= ’1 ’ THEN AND ( FILA <= " 0 1 0 0 1 1 0 1 1 0 " ) ) THEN
CONT <= " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " ; −−−−−−−−CONTENIDO DEL TANQUE
MUESTRA < = " 0 0 0 0 0 0 0 0 " ; I F ( ( COL >= " 0 0 1 0 1 1 1 0 1 1 " )
ELSIF CLK’EVENT AND CLK = ’1 ’ THEN AND (COL <= " 0 1 1 1 1 0 0 1 1 1 " )
I F CONT= " 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 " THEN AND ( FILA >= " 0 0 0 0 0 0 0 0 0 0 " )
AUXMU <= REF ; AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) THEN
MUESTRA <= AUXMU; −−−−−−− S I LA FILA ES MAYOR
CONT <= " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " ; −−−AL NIVEL DE RESOLUCION DEL SENSOR
ELSE CONT <= CONT + 1 ; −−−−−−LO PINTA COLOR CYAN, S I NO NEGRO
END I F ; I F FILA <= NOTSEN THEN
END I F ; RGBAUX <= " 0 0 0 " ;
END PROCESS ; ELSE RGBAUX <= " 0 1 1 " ;
end B e h a v i o r a l ; END I F ;
−−−−−−−− REFERENCIA
ELSIF ( ( COL >= " 0 0 1 0 0 1 0 1 1 0 " )
AND (COL <= " 0 0 1 0 1 1 1 0 1 1 " )
6.3. Colorear AND ( FILA >= " 0 0 0 0 0 0 0 0 0 0 " )
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) THEN

l i b r a r y IEEE ; −−−I F FILA = NOTREF THEN


u s e IEEE . STD_LOGIC_1164 . ALL ; RGBAUX <= " 1 0 0 " ;
u s e IEEE . STD_LOGIC_ARITH . ALL ; ELSE RGBAUX <= " 1 1 1 " ;
u s e IEEE . STD_LOGIC_UNSIGNED . ALL ; END I F ;
ELSE RGBAUX < = " 1 1 1 " ;
e n t i t y PINTAPANTALLA i s END I F ;
P o r t ( VIS : i n STD_LOGIC ; −−−−−−−−−SALIDA DE AGUA−−−−−−−−−−−−−−−−−−−−−−−−−−
RST : IN STD_LOGIC ; ELSIF ( ( COL >= " 1 0 0 0 0 0 0 0 0 0 " )
SEN : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; AND (COL <= " 1 0 0 0 0 1 0 1 1 1 " )
REF : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " )
COL : i n STD_LOGIC_VECTOR ( 9 downto 0 ) ; AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) THEN
FILA : i n STD_LOGIC_VECTOR ( 9 downto 0 ) ; RGBAUX <= " 1 1 1 " ;
DOU : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; −−−−−−−−−SEnAL DE SALIDA
RGB : o u t STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ) ; ELSIF ( ( COL >= " 1 0 0 0 0 0 0 0 0 0 " )
AND (COL <= " 1 0 0 0 0 1 0 1 1 1 " )
AND ( FILA >= " 0 0 1 0 1 1 0 0 1 0 " )
end PINTAPANTALLA ; AND ( FILA <= " 0 0 1 1 0 0 1 1 0 1 " ) ) THEN
IF NOTREF = NOTSEN THEN
a r c h i t e c t u r e B e h a v i o r a l o f PINTAPANTALLA i s RGBAUX <= " 1 0 0 " ;
ELSIF NOTREF < NOTSEN THEN
SIGNAL RGBAUX : STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ; RGBAUX <= " 1 0 0 " ;
SIGNAL NOTREF , NOTSEN : STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; ELSE RGBAUX <= " 0 1 0 " ;
END I F ;
begin −−−−−−−−−−IN−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

NOTREF <= NOT REF ; ELSIF


NOTSEN <= NOT SEN ; −−−−−−−−−−−I
ESTRUCTURA : PROCESS ( FILA , COL, VIS ) ( ( COL >= " 0 0 0 0 0 1 0 1 0 0 " )
BEGIN AND (COL <= " 0 0 0 0 0 1 1 1 1 0 " )
I F RST= ’1 ’ THEN RGBAUX <= " 0 0 0 " ; AND ( FILA >= " 0 0 0 0 0 0 0 1 0 1 " )
−−−−−−−−ENTRADA DE AGUA AND ( FILA <= " 0 0 0 0 1 0 1 1 0 1 " ) ) OR
ELSIF ( ( COL >= " 0 0 0 1 1 0 0 1 0 0 " ) −−−−−−−−−−−N
AND (COL <= " 0 0 0 1 1 1 1 1 1 1 " ) ( ( COL >= " 0 0 0 0 1 0 1 0 0 0 " )

6
AND (COL <= " 0 0 0 0 1 1 0 0 1 0 " ) AND (COL <= " 0 1 0 0 0 0 1 0 0 1 " )
AND ( FILA >= " 0 0 0 0 0 0 0 1 0 1 " ) AND ( FILA >= " 0 1 0 1 0 0 1 1 1 0 " )
AND ( FILA <= " 0 0 0 0 1 0 1 1 0 1 " ) ) OR AND ( FILA <= " 0 1 0 1 0 1 1 1 1 0 " ) ) OR
( ( COL >= " 0 0 0 0 1 1 1 1 0 0 " ) ( ( COL >= " 0 1 0 0 0 0 1 0 0 1 " )
AND (COL <= " 0 0 0 1 0 0 0 1 1 0 " ) AND (COL <= " 0 1 0 0 0 1 0 0 1 1 " )
AND ( FILA >= " 0 0 0 0 0 0 0 1 0 1 " ) AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
AND ( FILA <= " 0 0 0 0 1 0 1 1 0 1 " ) ) OR AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR
( ( COL >= " 0 0 0 0 1 1 0 0 1 0 " ) −−−−−−−−−−−I
AND (COL <= " 0 0 0 0 1 1 0 1 1 1 " ) ( ( COL >= " 0 1 0 0 0 1 1 1 0 1 " )
AND ( FILA >= " 0 0 0 0 0 0 1 0 1 0 " ) AND (COL <= " 0 1 0 0 1 0 0 1 1 1 " )
AND ( FILA <= " 0 0 0 0 0 1 1 0 1 1 " ) ) OR AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
( ( COL >= " 0 0 0 0 1 1 0 1 1 1 " ) AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR
AND (COL <= " 0 0 0 0 1 1 1 1 0 0 " ) −−−−−−−−−−−V
AND ( FILA >= " 0 0 0 0 0 1 0 1 1 1 " ) ( ( COL >= " 0 1 0 0 1 1 0 0 0 1 " )
AND ( FILA <= " 0 0 0 0 1 0 1 0 0 0 " ) ) AND (COL <= " 0 1 0 0 1 1 1 0 1 1 " )
THEN AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
RGBAUX <= " 1 1 0 " ; AND ( FILA <= " 0 1 0 1 0 1 1 1 1 0 " ) ) OR
−−−−−−−−−−OUT−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ( ( COL >= " 0 1 0 0 1 1 1 0 1 1 " )
ELSIF −−−−−−−O AND (COL <= " 0 1 0 1 0 0 0 1 0 1 " )
( ( COL >= " 1 0 0 0 0 1 1 1 0 0 " ) AND ( FILA >= " 0 1 0 1 0 1 1 1 1 0 " )
AND (COL <= " 1 0 0 0 1 0 0 1 0 0 " ) AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ) ( ( COL >= " 0 1 0 1 0 0 0 1 0 1 " )
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) OR AND (COL <= " 0 1 0 1 0 0 1 1 1 1 " )
( ( COL >= " 1 0 0 0 1 0 0 1 0 0 " ) AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
AND (COL <= " 1 0 0 0 1 0 1 1 0 1 " ) AND ( FILA <= " 0 1 0 1 0 1 1 1 1 0 " ) ) OR
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ) −−−−−−−−−−−E
AND ( FILA <= " 0 0 1 1 0 1 0 1 1 1 " ) ) OR ( ( COL >= " 0 1 0 1 0 1 1 0 0 1 " )
( ( COL >= " 1 0 0 0 1 0 0 1 0 0 " ) AND (COL <= " 0 1 0 1 1 0 0 0 1 1 " )
AND (COL <= " 1 0 0 0 1 0 1 1 0 1 " ) AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
AND ( FILA >= " 0 0 1 1 1 1 0 1 0 1 " ) AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) OR ( ( COL >= " 0 1 0 1 1 0 0 0 1 1 " )
( ( COL >= " 1 0 0 0 1 0 1 1 0 1 " ) AND (COL <= " 0 1 0 1 1 0 1 1 0 1 " )
AND (COL <= " 1 0 0 0 1 1 0 1 1 0 " ) AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ) AND ( FILA <= " 0 1 0 1 0 0 1 0 1 0 " ) ) OR
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) OR ( ( COL >= " 0 1 0 1 1 0 0 0 1 1 " )
−−−−−−−U AND (COL <= " 0 1 0 1 1 0 1 1 0 1 " )
( ( COL >= " 1 0 0 0 1 1 1 1 1 1 " ) AND ( FILA >= " 0 1 0 1 0 0 1 1 1 1 " )
AND (COL <= " 1 0 0 1 0 0 1 0 0 0 " ) AND ( FILA <= " 0 1 0 1 0 1 1 0 0 1 " ) ) OR
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ( ( COL >= " 0 1 0 1 1 0 0 0 1 1 " )
) AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) OR AND (COL <= " 0 1 0 1 1 0 1 1 0 1 " )
( ( COL >= " 1 0 0 1 0 0 1 0 0 0 " ) AND ( FILA >= " 0 1 0 1 0 1 1 1 1 0 " )
AND (COL <= " 1 0 0 1 0 1 0 0 0 1 " ) AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR
AND ( FILA >= " 0 0 1 1 1 1 0 1 0 1 " ) −−−−−−−−−−−−L
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) OR ( ( COL >= " 0 1 0 1 1 1 0 1 1 1 " )
( ( COL >= " 1 0 0 1 0 1 0 0 0 1 " ) AND (COL <= " 0 1 1 0 0 0 0 0 0 1 " )
AND (COL <= " 1 0 0 1 0 1 1 1 0 0 " ) AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ) AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) OR ( ( COL >= " 0 1 1 0 0 0 0 0 0 1 " )
−−−−−−−T AND (COL <= " 0 1 1 0 0 0 1 0 1 1 " )
( ( COL >= " 1 0 0 1 1 0 0 0 1 1 " ) AND ( FILA >= " 0 1 0 1 0 1 1 1 1 0 " )
AND (COL <= " 1 0 0 1 1 1 1 1 1 0 " ) AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) )
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ) THEN RGBAUX <= " 1 1 0 " ;
AND ( FILA <= " 0 0 1 1 0 1 0 1 1 1 " ) ) OR ELSE RGBAUX <= " 0 0 0 " ;
( ( COL >= " 1 0 0 1 1 0 1 1 0 0 " ) END I F ;
AND (COL <= " 1 0 0 1 1 1 0 1 0 1 " ) END PROCESS ;
AND ( FILA >= " 0 0 1 1 0 0 1 1 0 1 " ) DOU <= SEN ;
AND ( FILA <= " 0 0 1 1 1 1 1 1 1 1 " ) ) RGB <= RGBAUX;
THEN RGBAUX <= " 1 1 0 " ; end B e h a v i o r a l ;
−−−−−−−−−−NIVEL−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ELSIF
−−−−−−−−−−N
( ( COL >= " 0 0 1 1 1 1 0 1 0 1 " )
6.4. Divisor de frecuencia
AND (COL <= " 0 0 1 1 1 1 1 1 1 1 " )
AND ( FILA >= " 0 1 0 1 0 0 0 0 0 0 " )
AND ( FILA <= " 0 1 0 1 1 0 1 0 0 0 " ) ) OR l i b r a r y IEEE ;
( ( COL >= " 0 0 1 1 1 1 1 1 1 1 " ) u s e IEEE . STD_LOGIC_1164 . ALL ;
AND (COL <= " 0 1 0 0 0 0 0 1 0 0 " ) u s e IEEE . STD_LOGIC_ARITH . ALL ;
AND ( FILA >= " 0 1 0 1 0 0 0 1 0 1 " ) entity digital_clock_top is
AND ( FILA <= " 0 1 0 1 0 1 1 0 0 1 " ) ) OR port (
( ( COL >= " 0 1 0 0 0 0 0 1 0 0 " ) CLK : IN STD_LOGIC ;

7
RST : IN STD_LOGIC ; COMPONENT PINTAPANTALLA
CLK25MHZ : o u t STD_LOGIC P o r t ( VIS : i n STD_LOGIC ;
); RST : IN STD_LOGIC ;
end d i g i t a l _ c l o c k _ t o p ; SEN : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;
REF : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;
architecture r t l of d i g i t a l _ c l o c k _ t o p i s COL : i n STD_LOGIC_VECTOR ( 9 downto 0 ) ;
c o n s t a n t max_count : INTEGER : = 1 ; FILA : i n
s i g n a l c o u n t : INTEGER r a n g e 0 t o max_count ; STD_LOGIC_VECTOR ( 9 downto 0 ) ;
s i g n a l c l k _ s t a t e : STD_LOGIC : = ’ 0 ’ ; DOU : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;
RGB : o u t
begin STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ) ;
g e n _ c l o c k : p r o c e s s (CLK, c l k _ s t a t e , c o u n t ) end COMPONENT;
begin −−−−−−Componente que s e e n c a r g a de l a s s e n a l s de
I F RST= ’1 ’ THEN c o u n t <= 0 ; −− s i n c r o n i z a c i o n p a r a l a p a n t a l l a con una
E L S i f CLK’ e v e n t and CLK= ’1 ’ t h e n −−− r e s o l u c i o n de 640 x 480 p i x e l e s
i f c o u n t < max_count t h e n COMPONENT SINCROVGA
c o u n t <= c o u n t + 1 ; P o r t ( FILA : o u t STD_LOGIC_VECTOR ( 9 downto 0 ) ;
else COL : o u t
c l k _ s t a t e <= n o t c l k _ s t a t e ; STD_LOGIC_VECTOR ( 9 downto 0 ) ;
c o u n t <= 0 ; CLK : i n STD_LOGIC ;
end i f ; RST : i n STD_LOGIC ;
end i f ; VISIBLE : o u t STD_LOGIC ;
end p r o c e s s ; HSYNC : o u t STD_LOGIC ;
VSYNC : o u t STD_LOGIC ) ;
persecond : process ( c l k _ s t a t e ) end COMPONENT;
begin −−−−−−Componente que s e e n c a r g a de t o m a r una m u e s t r a
CLK25MHZ <= c l k _ s t a t e ; −− de l a l e c t u r a d e l s e n s o r c a d a 250 mS
end p r o c e s s ; COMPONENT MUESTREO i s
end r t l ; P o r t ( CLK : i n STD_LOGIC ;
RST : i n STD_LOGIC ;
REF : i n STD_LOGIC_VECTOR ( 7 downto 0 ) ;
MUESTRA : o u t STD_LOGIC_VECTOR ( 7 downto 0 ) ) ;
6.5. Principal end COMPONENT;

l i b r a r y IEEE ; SIGNAL RELOJ , HS , VS , SVIS , AUXOUT : STD_LOGIC ;


u s e IEEE . STD_LOGIC_1164 . ALL ; SIGNAL SFILA , SCOL : STD_LOGIC_VECTOR ( 9 DOWNTO 0 ) ;
u s e IEEE . STD_LOGIC_ARITH . ALL ; SIGNAL AUXMUES : STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;
u s e IEEE . STD_LOGIC_UNSIGNED . ALL ;
USE IEEE . n u m e r i c _ s t d . ALL ; begin

e n t i t y VGA i s −−−−−− C o n e x i o n d i g i t a l de c a d a uno de l o s


P o r t ( CLK : i n STD_LOGIC ; −−c o m p o n e n t e s d i g i t a l e s en l a FPGA .
RST : i n STD_LOGIC ; CLK2 : d i g i t a l _ c l o c k _ t o p PORT MAP(CLK , RST , RELOJ ) ;
DOUT: OUT STD_LOGIC ; TOMA_DE_MUESTRA: MUESTREO PORT MAP(CLK , RST , SENSOR , AUXM
REFR : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; SINCRONIZACION : SINCROVGA
SENSOR : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; PORT MAP( SFILA , SCOL , RELOJ , RST , SVIS , HSYNC , VSYNC )
SAL : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; PANTALLA : PINTAPANTALLA PORT MAP( SVIS , RST , AUXMUES , REFR
HSYNC : o u t STD_LOGIC ;
VSYNC : o u t STD_LOGIC ; −−−−−− p r o c e s o p a r a a c t i v a r y d e s a c t i v a r l a bomba que
RGB : o u t −−−−−v a c i a r a e l t a n q u e c u a n d o
STD_LOGIC_VECTOR ( 2 downto 0 ) ) ; −−−−−− e l n i v e l d e l s e n s o r s e a mayor que
end VGA; −−−e l n i v e l de l a r e f e r e n c i a
PROCESS ( REFR , SENSOR )
a r c h i t e c t u r e B e h a v i o r a l o f VGA i s BEGIN
−−−−−− c o m p o n e n t e " d i v i s o r de f r e c u e n c i a a 25 MHz" I F AUXMUES > REFR THEN
COMPONENT d i g i t a l _ c l o c k _ t o p AUXOUT <= ’ 1 ’ ;
port ( ELSE AUXOUT <= ’ 0 ’ ;
CLK : IN STD_LOGIC ; END I F ;
RST : IN STD_LOGIC ; END PROCESS ;
CLK25MHZ : o u t STD_LOGIC ) ; DOUT <= AUXOUT;
end COMPONENT; end B e h a v i o r a l ;
−−−−−−c o m p o n e n t e donde l e i n d i c a m o s a l a FPGA que c o l o r e s
−− vamos a p i n t a r en c a d a p i x e l .

You might also like