CT.2: VGA Retro: Puesta en marcha. MonsterLED - Obijuan/Cuadernos-tecnicos-FPGAs-libres GitHub Wiki
Descripción
Los controladores VGA nos permiten mostrar información gráfica en los monitores. Empezaremos a entenderlos, de manera práctica, partiendo de lo más básico: una resolución de 256x240 y un único canal de color. Haremos experimentos para encender un pixel "gordo" (MonsterLED) y lo ampliaremos a dos píxeles (VGALED), para sentar la bases prácticas y poder realizar diseños más complejos en los siguientes cuadernos técnicos
Historial
- 2019-Abril-11: Version inicial del cuaderno técnico
- 2024-Abril-04: Ejemplos adaptados a la nueva toolchain: apio-0.9.3. Eliminado el error en la verificación. Probados con icestudio 0.11.3wip (Futura versión 0.12). Los ejemplos actualizados se encuentra en este repo. Los ejemplos que están en la colección Jedi (considerada ya obsoleta) no se han modificado
Colección
Colection-Jedi-v1.3.0.zip: Colección para este cuaderno técnico. Descargar e instalar
Contenido
- VGA
- La placa AP-VGA
- Puesta en marcha
- VGA retro
- Ejemplos
- MonsterLED
- Dos vídeo-elmentos: Barras
- Bloque VGA-LED-2v
- Autor
- Licencia
- Créditos y agradecimientos
- Enlaces
VGA
VGA es un estándar de vídeo, creado para los ordenadores PC, a finales de los 80. Los monitores con entrada VGA disponen de un conector DE-15F. Es un conector hembra con 15 pines, distribuidos en tres filas de 5 pines cada una
Los dispositivos que se conectan al monitor VGA (Ordenadores, placas, etc...) llevan también un conector Hembra. Para conectarlos usamos un cable VGA Macho - Macho. Es un cable que tiene conectores DE-15M (macho) en sus dos extremos
Pines del conector VGA
La disposición de los pines del conector VGA macho se muestra en esta figura. Sólo nos interesan 6 pines: R, G, B, HS, VS y GND
Pin | Nombre | Descripción | Tipo pin |
---|---|---|---|
1 | R (Red) | Señal de vídeo. Canal Rojo | Analógico |
2 | G (Green) | Señal de vídeo. Canal verde | Analógico |
3 | B (Blue) | Señal de vídeo. Canal Azul | Analógico |
5,6,7,8 | GND | Masa (0 v) | |
13 | HS (Horizontal sync) | Señal de sincronismo horizontal | Digital |
14 | VS (Vertical Sync) | Señal de sincronismo vertical | Digital |
Nivel físico
Hay dos tipos de señales: las que llevan la información del color: R, G, B, y las de sincronismo: HS, VS
Señales de sincronismo
- Son señales digitales (0, 1). Las podemos generar directamente desde los pines de la FPGA (0 - 3.3v)
- Son señales periódicas. Su frecuencia está fijada por el estándar VGA
- HS: Sincronismo horizontal. Normalmente está a 1. Emite un pulso (0) al final de una línea
- VS: Sincronismo vertical. Normalmente está a 1. Emite un pulso (0) al final de la última línea (Nos indica cuando ha terminado el frame actual)
Señales de color
- Son señales analógicas entre 0 y 0.7v. Es necesario conectar una resistencia en serie entre el pin de la FPGA y el pin del color, para no sobrepasar la tensión máxima de 0.7v
- 0v indica ausencia de color (negro) y 0.7v es la máxima intensidad del color
- Los tres colores se transmiten en paralelo: Rojo, verde y azul. Son canales independientes
Conexión de un sistema digital a la VGA
Podemos conectar cualquier sistema digital a la VGA, como por ejemplo un arduino o una FPGA, mediante el siguiente esquema
Utilizamos los pines de 3.3v. Las señales HS y VS se conectan directamente, ya que son digitales. Sin embargo, para las señales de color tenemos que usar una resistencia r que debe ser mayor o igual a 270 ohm. También hay que tirar un cable para unir la masa de nuestro sistema con la de la VGA (basta con usar cualquiera de los pines de masa disponibles en la vga: 5,6,7 u 8)
Este conexionado se puede hacer de múltiples maneras. Una forma muy rápida, para hacer las primeras pruebas, es usar cables hembra-hembra conectados directamente a los pines machos del conector VGA
Y por el otro lado conectados a las resistencias de 270ohm. Desde ellas tiramos otros cables hacia nuestro sistema digital
En este foto se puede ver la conexión de la Icezum Alhambra con la VGA, usando este método:
Otra opción es usar una placa de entrenamiento:
También podemos soldar las resistencias y un conector VGA hembra en nuestra propia placa:
En esta foto está conectada a una Icezum Alhambra usando un cable plano de bus
Cálculo de la resistencia de conexión
Cualquier resistencia mayor o igual a 270ohm nos vale. Pero ¿De donde sale ese valor?. El estándar VGA especifica que la impedancia de los pines es de 75 ohm. Al conectar nuestra resistencia r en serie tenemos un circuito divisor de tensión como el siguiente:
Cuya ecuación es:
Por la especificación de la VGA sabemos que la tensión Vi tiene que ser menor o igual a 0.7v. En nuestro sistema digital tenemos que V1 es de 3.3v. Usando una resistencia de 270ohm tenemos un valor de Vi de 0.72 (no es problema pasarse en 0.02v). Cualquier resistencia mayor hará que vi sea menor a su valor máximo
La placa AP-VGA
En este cuaderno técnico vamos a usar la placa AP-VGA: es un periférico para las placas Alhambra (I y II) que tiene un conector VGA hembra para poder conectar fácilmente el monitor a la FPGA
La placa AP-VGA tiene todos los componentes soldados excepto los pines de conexión. Esto nos permite soldarlos según mejor nos convenga. Es lo primero que haremos
Preparación
La placa viene con dos tiras de 8 pines hembra y dos tiras macho, sin soldar. En la placa sólo hay que soldar dos: una para los pines de GND, y otra para los 8 bits que usaremos con la VGA
Hay multitud de combinaciones posibles. Podemos soldar los pines hembras o los machos, por la cara de arriba o la de abajo, o incluso combinar machos con hembras. En este cuaderno técnico utilizaremos las dos siguientes
-
Configuración 1: La usaremos con la Alhambra-II. Permite acoplar directamente la AP-VGA a la Alhambra II, quedando un bloque muy compacto
-
Configuración 2: La usaremos con la Icezum Alhambra. Para su conexión emplearemos cables hembra-hembra
Otra configuración muy útil es colocar los pines de GND en la cara superior, y los pines amarillo en la inferior. De esta forma se puede pinchar en una protoboard
Conexión a la Alhambra-II
Para usar la AP-VGA con la Alhambra-II elegimos la configuración 1: dos tiras de pines hembra soldadas en la cara superior
Esta es la placa vista por su cara inferior, y colocada con la orientación necesaria para su conexión a la Alhambra II. Se conecta a los pines D7-D0
La conectamos a la Alhambra II. Esta es la vista superior
Por último conectamos el cable del monitor VGA y el USB del PC. ¡Ya estamos listos para probar la VGA!
Conexión a la Icezum Alhambra
Para usar la AP-VGA con la Icezum Alhambra elegimos la configuración 2: dos tiras de pines machos soldadas en la cara superior. La tira superior son pines de GND. La inferior son los 8 pines con de conexión a la Icezum Alhambra: 2 señales de sincronismo (HS, VS) y 6 de colores (2 bits por color)
La conexión la hacemos a través de los pines de 3.3v (los GPx). En este cuaderno técnico usaremos la conexión mostrada en esta figura
Usamos en total 9 cables hembra-hembra, 8 conectados a la tira inferior y uno para GND
Por último conectamos el cable del monitor VGA y el USB del PC. ¡Ya estamos listos para probar la VGA!
Puesta en marcha
Antes de comenzar vamos a comprobar que todas las conexiones están bien hechas y que podemos visualizar una imagen de prueba en el monitor. Esta imagen de prueba tiene una resolución de 256x240 píxeles y se muestran elementos con los 3 colores básicos: azul, verde y rojo. La imagen que debemos obtener es esta:
En el monitor en el que lo estoy probando se ve así:
En estas imágenes no se aprecia bien, pero hay un marco azul bordeando toda la imagen: es el que determina el tamaño de la imagen, y se debe ver completo
Las comprobaciones a realizar son las siguientes:
- Comprobar que la imagen aparece en el monitor, con los mismos colores
- Comprobar que el recuadro azul se está completo. Usar los controles de desplazamiento de la imagen en el monitor, hasta que se vea completamente el recuadro, si no se viese
Poner en marcha la VGA-retro para FPGA en tu monitor mola mucho... pero cuando lo conectas a un proyector es... ¡épico! 😂😂
Placa Alhambra-II
Este es el circuito que hay que cargar la placa Alhambra-II, con la AP-VGA conectada. Realizar las comprobaciones indicadas para asegurarse de que todo está funcionamiento bien, y de que nuestro monitor muestra correctamente la señal VGA
El ejemplo se encuentra en la colección Jedi 1.3.0, en el menú Archivos/Ejemplos/VGA/VGA-retro/01-Test-and-Adjust-VGA
Con esta configuración, los pines usados para la conexión de la VGA son del D0 al D7. Se resumen en esta tabla:
AP-VGA | Alhambra-II | Descripción |
---|---|---|
VS | D7 | Sincronismo vertical |
HS | D6 | Sincronismo horizontal |
B0 | D5 | Canal azul. Bit 0 |
B1 | D4 | Canal azul. Bit 1 |
G0 | D3 | Canal Verde. Bit 0 |
G1 | D2 | Canal Verde. Bit 1 |
R0 | D1 | Canal Rojo. Bit 0 |
R1 | D0 | Canal Rojo. Bit 1 |
Placa Icezum Alhambra
Este es el circuito que hay que cargar la placa Icezum Alhambra, con la AP-VGA conectada. Realizar las comprobaciones indicadas para asegurarse de que todo está funcionamiento bien, y de que nuestro monitor muestra correctamente la señal VGA
El ejemplo se encuentra en la colección Jedi 1.3.0, en el menú Archivos/Ejemplos/VGA/VGA-retro/Icezum-Alhambra/01-Test-and-Adjust-VGA
Con esta configuración, los pines usados para la conexión de la VGA son del GP0 al GP7. Se resumen en esta tabla:
AP-VGA | Alhambra-II | Descripción |
---|---|---|
VS | GP7 | Sincronismo vertical |
HS | GP6 | Sincronismo horizontal |
B0 | GP5 | Canal azul. Bit 0 |
B1 | GP4 | Canal azul. Bit 1 |
G0 | GP3 | Canal Verde. Bit 0 |
G1 | GP2 | Canal Verde. Bit 1 |
R0 | GP1 | Canal Rojo. Bit 0 |
R1 | GP0 | Canal Rojo. Bit 1 |
VGA retro
El estándar VGA especifica una resolución de 640 x 480 píxeles. Sin embargo nosotros empezaremos con una resolución menor: 256 x 240 que es muy cercana a la que tenían las consolas Atari 2600: 192 x 160 píxles. En ambas usamos coordenadas x,y de 8 bits para los píxeles
Sólo utilizaremos un canal de color: el verde. Vamos a aprender primero lo básico, y luego iremos complicándolo. El usar sólo el color verde es un tributo a los monitores retro de fósforo verde
El bloque SYNC
Para hacer funcionar la VGA necesitamos generar las señales de sincronismo, VS y HS, que le indican al monitor cuándo empieza la siguiente línea y cuándo lo hace una frame nuevo. Esta es la misión principal del bloque SYNC, accesible desde el menú Varios/VGA/VGA-retro/Sync
La salida vhs[1:0] lleva las dos señales de sincronismo, vertical y horizontal, que hay que conectarlas directamente a las entradas VS y HS de la VGA. Nuestros circuitos NO las usarán directamente
Por endframe llega un tic cada vez que ha terminado de dibujarse el frame actual. Es la señal que usaremos para actualizar el estado de lo que queremos pintar en el siguiente frame. Las señales vpos y hpos, de 8 bits, contienen la posición actual del haz VGA. El estado de ese pixel lo determina lo que haya en los canales de color en ese instante
La señal visible se pone a 1 cuando el haz está en la zona visible, es decir, cuando podemos pintar. Cuando vale 0, NO se puede pintar nada, y las señales de color deben estar a 0
Canales de color
Los canales de color VGA: R, G y B son analógicos, con una tensión entre 0 y 0.7v. El voltaje de 0v significa ausencia de color, y el valor de 0.7v representa la máxima intensidad de color. Al usar la resistencia de 270ohm, nuestros circuitos digitales pueden controlar el nivel de color: un bit 0 indica que no hay color, y un bit 1 es su máxima intesidad
La tarjeta AP-VGA nos permite utilizar dos bits para establecer cuatro niveles de intensidad en cada color. Así, tenemos los niveles 0, 1, 2 y 3, que en binario se corresponden con 00, 01, 10 y 11. Por ejemplo, para el canal verde, los valores de los pines G0 y G1 son los siguientes:
G1 | G0 | Descripción |
---|---|---|
0 | 0 | Nivel de intensidad 0: Ausencia de verde |
0 | 1 | Nivel de intensidad 1 |
1 | 0 | Nivel de intensidad 2 |
1 | 1 | Nivel de intesidad 3. Máxima intensidad de verde |
En nuestros ejemplos usaremos sólo el canal verde, por lo que los canales rojo y azul los conectaremos directamente a 0
El canal verde lo queremos controlar sólo con un bit, para simplificar los circuitos iniciales: Bit 0 para la ausencia y bit 1 para el máximo nivel de verde (valor 3). Esto lo podemos hacer de tres formas, que son equivalentes:
La señal canal verde es el valor de 1 bit que queremos para el pixel actual. Con el primer circuito usamos un multiplexor de 2 bits para establecer bien el nivel 3 ó bien el nivel 0. Con el segundo duplicamos el cable, obteniendo 00 ó 11 según su valor. El último es el mismo, pero usando un bloque multiplicador, que duplica el cable de entrada. Todos son equivalentes. Usaremos el último
Plantilla
Nuestros proyectos de VGA-retro tienen una resolución de 256x240 píxeles y un único canal verde de 1 bit. Para hacerlos partiremos de este circuito plantilla, que contiene el bloque de sincronización, en el que los canales azul y rojo están desactivados. Nuestros circuitos tendrán que activar el bit del canal verde en cada momento, según lo que queramos dibujar
(Alhambra-II: Plantilla.ice) (Icezum Alhambra: Plantilla.ice)
¡Que empiece la acción! :-)
Ejemplos
Aprenderemos el funcionamiento de la VGA mediante ejemplos. En todos ellos partimos de la Plantilla VGA-retro y añadimos nuestros componentes digitales
Ejemplo 2: Fondo verde fijo
Empezamos por un circuito que pone el fondo de la zona visible de color verde. Para ello usamos la salida visible del bloque SYNC, cuyo valor es 1 cuando el haz está en la zona visible y 0 en caso contrario
El modelo para entender la VGA se muestra en la siguiente figura. Hay que imaginárselo como un monitor "Virtual" que es más grande que el visible. Hay un haz que recorre este monitor virtual de izquierda a derecha y de arriba a abajo.
Empieza en la esquina superior izquierda. Con cada tic del reloj del sistema, apunta a la siguiente posición. Al llegar a la derecha del monitor virtual, pasa a la siguiente línea y empieza por la izquierda. Cuando el haz entra en la zona visible, la señal visible se pone a 1. Todas las líneas visibles tiene una zona en la izquierda y la derecha e las que NO son visibles, y donde la señal visible se pone a 0
El primer pixel de la zona visible es el (0,0), que se corresponde con la esquina superior izquierda del monitor real, y el último es el (255, 239), que está en la esquina inferior derecha. Consultando las señales hpos y vpos, sabemos la posición actual del haz
Para rellenar toda la zona visible con el *color verde sólo hay que conectar la señal visible con el bit del canal verde. De esta forma, todos los píxeles de la zona visible se pondrán siempre a 1, y cuando el haz esté fuera de esta zona el canal verde estará a 0
(Alhambra-II: 02-Fondo-verde.ice) (Icezum Alhambra:02-Fondo-verde.ice)
Cargamos el circuito en la placa, y aparece la zona en verde en el monitor. La esquina superior izquierda de la zona visible coincide con la del monitor real. Por la derecha se ve una zona negra porque son pixeles con posición superior a 255 (no entran en la zona visible)
Ejemplo 3: Fondo verde parpadeante
En todos nuestros circuitos es importante que el canal verde esté a cero cuando el haz está en zona no visible, para cumplir con el estándar VGA. Esto lo logramos fácilmente con una puerta AND entre la señal de visibilidad y la que lleva la información del canal verde:
En este ejemplo haremos que el fondo de la pantalla parpadee. Usamos un biestable D para almacenar el estado de la pantalla: 0 fondo negro y 1 fondo activado (verde). Durante el tiempo que el haz está dibujando el frame, hay que garantizar que este biestable NO CAMBIE. Por eso sólo se captura su valor cuando se ha terminado de pintar el frame actual. Esto lo hacemos conectando la señal de endframe con la entrada de captura del biestable
Cargamos el circuito y lo probamos. En este vídeo se muestra el resultado
La pantalla parpadea a 1Hz 😃. Esta frecuencia se puede cambiar sin más que modificar el parámetro del corazón
MonsterLED
Este circuito que pone la pantalla verde se comporta en realidad como un LED... ¡pero gigante! ¡Es el MONSTERLED! 😃 Para usarlo fácilmente en nuestros circuitos,lo encapsulamos en el bloque MonsterLED. Está disponible en el menú Varios/VGA/VGA-Retro/Monster-LED-green
Ejemplo 4: MonsterLED parpadeando a 2Hz
En este ejemplo haremos parpadear un LED externo y el MonsterLED a 2Hz. Este es el escenario:
En el circuito simplemente colocamos el corazón de 2Hz conectado al MonsterLED y al LED externo. El MonsterLED tiene sus salidas conectadas a los pines de la placa AP-VGA
En este vídeo se muestra en acción. La placa está alimentada con un power bank. Al encenderlo comienza a parpadear el LED externo, y también la pantalla
Ejemplo 5: MonsterLED con pulsador
Controlaremos el MonsterLED con dos pulsadores. Uno sin memoria que enciende la pantalla mientres esté apretado y la apaga al liberarse. El otro botón tiene memoria. Cambia el estado de la pantalla al pulsarlo y lo recuerda al liberarlo. En el escenario se ha colocado además un zumbador que emite un pitido corto al apretar cualquiera de los botones
En este vídeo se muestra el funcionamiento. Primero se aprieta el botón sin memoria, y se ve cómo se enciencie y apaga la pantalla. Luego se aprieta el que tiene memoria y la pantalla se fija al verde hasta que se vuelve a apretar de nuevo para apagarla
Este es el circuito. La salida del botón2 se lleva al MonsterLED a través de una puerta OR, y su señal de sonido al zumbador. El tic de salida del botón1 se usa para cambiar el estado el biestable T, y este es el que se lleva al MonsterLED a través de la puerta OR.
Ejemplo 6: MonsterLED con Infrarrojos
Controlaremos el MonsterLED con un sensor de Infrarrojos. Lo colocamos delante del monitor para encenderlo y apagarlo con la mano
El circuito es muy parecido al anterior. El tic emitido por el infrarrojo al detectar un objeto cambia el estado del biestable T, que a su vez actúa sobre el monsterLED
Y ahora sólo hay que usar la fuerza para controlar el monitor...
Ejemplo 7: MonsterLED y spiner
El mismo circuito del sensor de infrarrojos lo podemos usar para leer las pasadas que da un spiner y cambiar el estado de la pantalla con cada una de ellas, y construir así una especie de cutre VGA-Ruleta :-)
Este es nuestro primer "video"-juego. Tiramos la ruleta y lo que el azar decida! :-) Muy útil para tomar decisiones de tipo si-no, voy/no voy, me quiere/no me quiere... Según vayamos aprendiendo más sobre VGA, lo iremos refinando y completando
Dos vídeo-elementos: Barras
En estos primeros ejemplos, sólo hemos usado la zona visible del monitor, tratándolo como una unidad. Pintamos todos los píxeles del fondo de color verde o negro. Pero todos igual. Sin ninguna distinción. Lo hemos hecho usando directamente la señal visible
Para distinguir entre diferentes regiones de la pantalla tenemos que usar las señales hpos y vpos, de 8 bits, que nos indican la posición actual del haz VGA. Como ejemplo vamos a distinguir entre dos regiones verticales: dividiremos la pantalla verticalmente en dos partes iguales: barra 0 y barra 1
En la barra 0, la de la izquierda de la pantalla, todos los píxeles tienen una cordenada horizontal (hpos) entre 0 y 127. Si lo expresamos en binario, es un valor de 8 bits entre 00000000 y 01111111. Todos los píxeles de la barra 0 cumple que el bit de mayor peso de hpos es 0 SIEMPRE.
En la barra 1, la de la derecha, los valores son entre 128 y 255, que en binario son: 1000000 y 11111111. Todos los píxeles de la barra 1 cumplen que el bit de mayor peso de hpos es SIEMPRE 1. Sólo con comprobar el bit 7 de hpos sabemos si el haz VGA está en la barra 0 ó la 1
Ejemplo 8: Encender la barra 1
Haremos un circuito para encender la barra 1 (mitad derecha de la parte visible). La condición que debe cumplir el haz para saber si está en esa zona es la siguiente: que hpos[7] esté a 1 y que esté activada la señal visible. Es decir, una operación AND entre hpos[7] y visible
Y esto es lo que aparece en el monitor. Efectivamente, la mitad derecha de la zona visible está en verde. Ya sabemos hacer píxeles "gordos" de 128 x 240 :-D
Ejemplo 9: Objeto Barra 1
Vamos a convertir esta barra 1 en un objeto de vídeo, que tenga un estado que podamos controlar: visible (1), no visible (0). Este estado lo almacenamos en un biestable de tipo D. En este ejemplo el estado lo establecemos mediante un pulsador sin memoria
La clave es la generación de la señal de vídeo del objeto Barra 1: El chorro de 0s y 1s que se envían a la VGA para que se dibuje la Barra 1. Se obtiene a partir de la operación AND entre el estado del objeto y hpos[7]. Este último es el que determina la posición
Luego, la señal de vídeo de este objeto se pasa por otra AND con la señal de visibilidad, para que se cumpla que cuando el haz está en zona no visible, la señal de vídeo sea 0
En este vídeo se muestra en funcionamiento. Al apretar el pulsador se enciende la barra 1, y al soltarlo se apaga
Ejemplo 10: Dos barras independientes
Convertiremos la barra 0 en otro vídeo-objeto independiente, con su propio estado. Añadimos otro biestable D para almacenar su estado. Para generar su señal de vídeo hay que aplicar una puerta AND entre su estado y el valor negado de hpos[7], ya que el haz está en esa zona cuando hpos[7] es 0
Esta señal la combinamos con la señal de vídeo de la Barra 1 mediante una puerta OR, para sumarlas. Y a la señal resultante la pasamos por la AND con la visiblidad, para garantizar que cuando el haz está en zona no visible, la señal que se envía al canal verde sea 0
En este ejemplo usamos un pulsador para establecer el estado de ambas Barras: usamos una puerta NOT para que sólo se active una cada vez. Inicialmente está encendida la barra 1. Al apretar el pulsador se apagada y se enciende la 0, y al soltarlo vuelve a su situación anterior
En este vídeo lo vemos en funcionamiento. ¡Ya sabemos cómo colocar dos mega-píxeles de 128x240!
Bloque VGA-LED-2v
Las dos barras las agrupamos en un bloque nuevo, que llamamos VGALED-2v. Las trataremos como dos LEDs independientes, pero generados de manera virtual en la VGA. El de la mitad izquierda de la pantalla es el LED 1 y el de la mitad derecha el LED 0
Este componente se encuentra en el menú de la colección Jedi, en Varios/VGA/VGA-retro/VGA-LED-2v. Los probaremos haciendo algunos circuitos de ejemplo. Con este componente ya podemos pintar hasta 2 píxeles (enormes). Nuestra capacidad de representación en la VGA ha aumentado ;-)
Ejemplo 11: VGALED2-botones
En este ejemplo usaremos dos pulsadores sin memoria para establecer el estado de los dos "LEDs". El circuito es muy simple: las salidos de los pulsadores los introducimos por L1 y L0 para activar los LEDs. Emitimos un pitido corto con cada pulsación
En este vídeo se comprueba su funcionamiento. Los pulsadores son sin memoria, por lo que al dejar de apretarlos el LED correspondiente se apaga
Ejemplo 12: Contador binario en VGALED2
La salida de un contador de 2 bits la llevamos a los "VGALEDs" para ver la cuenta del tiempo en binario. Mediante un interruptor externo seleccionamos las unidades de tiempo: segundos o décimas de segundo. En cada incremento se emite un pitido corto
Lo cargamos y lo probamos. En este vídeo se muestra el funcionamiento. Inicialmente se empieza contando segundos. Luego se cambia el switch para mostrar las décimas
Ejemplo 13: Sensores IR en VGALED2
Los VGALEDs son muy útiles para comprobar el estado de los sensores de IR. En este circuito conectamos dos sensores de IR a las entradas L0 y L1 del VGALED, para visualizarlos. También se emite un pitido corto cada vez que se activan
No he podido evitar añadir un bloque pegatina con la imagen del agujero negro, como tributo a esta tremenda hazaña de la humanidad :-)
Lo cargamos en la placa para probarlo. En este vídeo se pueden ver las pruebas de funcionamiento
Ejemplo 14: Ruleta VGA: SI-NO
Ahora ya podemos hacer un versión mejorada de la ruleta. Usaremos las dos mitades de la pantalla para saber la respuesta a una pregunta SI-NO :-) El spinner activa un sensor de infrarrojos que cambia de estado un biestable T que se conecta a la VGALED mediante una puerta NOT, que hace que las dos mitades de la pantalla se activen de forma alternativa al tirar el spiner
La forma de jugar es colocar dos post-its en el monitor, uno en cada mitad, con las dos repuestas posibles a la pregunta que se formula al oráculo. Se formula la pregunta y se tira la ruleta
Ya sólo queda cargarlo y jugar. ¿Las FPGAs libres molan? Preguntemos al oráculo...
Autor
- Juan González-Gómez (Obijuan)
Licencia
Créditos y agradecimientos
- Este trabajo sólo ha sido posible gracias la información que están publicando muchas personas de la comunidad:
- Juan Manual Rico. ¡Muchas gracias!
- Sergio Cuenca. ¡Muchas gracias!
- FPGA4fun: Pong project de FPGA4fun. ¡Muchas gracias!
- Imagen de la consola Atari 2600: wikipedia. De Evan-Amos - Trabajo propio, Dominio público, https://commons.wikimedia.org/w/index.php?curid=18549122
- Imagen del monitor monocromo verde: Wikipedia. CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=51833