2020/09/13

Mi segundo PMOD: Dual PMOD VGA


icestick con pmod vga

 

 

Motivación

 

Como parte de estudiar el libro  Designing Video Game Hardware in Verilog , del cual en algún momento terminaré un artículo y lo publicaré, estoy adaptando sus ejemplos a la placa Nexys4ddr y Vivado 2018 y necesito hacer pruebas de generación de señal VGA con una placa distinta, pues no me salen los ejemplos y al cambiar de placa y entorno (ICEstick +Lattice) algo voy a aprender.

De paso me preparo para la inminente salida de la EDU-CIAA-FPGA, pero eso lo desarrollaré en otra entrada, no nos distraigamos.

Tambien estoy probando de meter una señal "escondida" en algún color para fuga de información y si meto la pata, preferiero hacerlo con el ICEstick que es más barato, tema tambien de otra entrada y H4CK3D 2020.


Podría hacer algo con un protoboard, pero esto es mucho más cool.


Qué es un PMOD y FPGA

No me voy a repetir, está en mi primer PMOD

 

Qué es VGA


Si te tengo que explicar que es VGA... bueno, quizás sos joven. VGA es una norma para transmitir video desde una computadora a una pantalla, es de lo más viejito que aún funciona, sin mirar en Internet, esto es lo que recuerdo de la evolución histórica, para nada precisa, sólo un mapa hecho a mano para mostrar lo viejo que soy:

  • monocromo: texto
  • hercules: con imagenes
  • CGA: colores, pocos, te sangran los ojos por la baja resolución
  • EGA: mejorcito
  • VGA: el tema de esta nota
  • xxxVGA: un montón de variaciones, de aquí en más se comienza a mezclar la resolución y los colores con el modo de transmisión.
  • DVI: analógico y digital
  • HDMI: es digital y suma audio
  • DisplayPort: y asi...


Si te interesa mucho el tema, wikipedia.


Lo que tengo que hacer es conectar a unos puertos del PMOD una adaptación con unas resistencias de modo tal que se respete lo que sigue, que es lo que existe en la placa Nexys4DDR:




La idea es que esas resistencias funcionan como un DAC (Digital to Analog Converter), si prendés cada pin asociado a un color, cuanto mayor sea la resistencia conectada menos influirá.

 

Además, hay dos señales de sincronización (HSync y VSync) y dos de I2C que se usan para comunicarse con el monitor.

 

 

Evolución de la elección de las señales


Necesito al menos 5 pines para RGB , VSync y HSync, me quedan sólo 3 pines libres, pues el PMOD tiene sólo 8. Si uso dos pines por color, tengo 64 colores.


  • VSync
  • HSync
  • Red 510
  • Red 1k
  • Green 510
  • Green 1k
  • Blue 510
  • Blue 1k


I2C

Habiendo I2C, es increiblemente tentador dejarlo preparado para algún futuro, pero me quedarían pocos colores. Se me ocurren varias maneras de combinar, pero terminan siendo 8 colores y/o gamas monocromáticas.

  • VSync
  • HSync
  • R
  • G
  • B
  • I2C clock
  • I2C data
  • uno libre, podría ser para el verde

 

 2 PMODs


mmh, podríamos tener todo si usáramos dos PMODs como en este ejemplo:


VGA con dos PMODs

  • PMOD 1
    • VSync
    • HSync
    • Red 510
    • Red 1k
    • Green 510
    • Green 1k
    • Blue 510
    • Blue 1k

 

  • PMOD2
    • I2C clock
    • I2C data
    • Red 2k
    • Red 4k
    • Green 2k
    • Green 4k
    • Blue 2k
    • Blue 4k

 

¿Con qué criterio los agrupé? Pues con hacer uno PMOD doble en el futuro y el de ahora hacerlo "expandible", por que la realidad es que lo que quiero ahora es para un PMOD, el ICEStick tiene uno solo.

 

La idea sería hacer algo como, todo gimpeado usando pruebas fallidas, recurro a tu generosa imaginación, faltan resistencias y el conector entre módulos:


Prototipo imaginario de doble pmod ensamblable

 

 

Pasó un pajarito...

 

Recuerdo haber catalogado un chip rescatado de un desguace, algo que decía VGA algo... a ver... si, SI!! sigue rindiendo el cajón de basura:

IP4770/71/72CZ16 VGA/video interface with ESD protection de NXP Semiconductors

está en el mother de una laptop que encontré tirada en la calle, de la cual recuperé exitosamente el touchpad, me falta hacer funcionar la pantalla y ahora esto, que va a quedar para otra ocasión pues no tengo capacidad de fabricar una placa con pistas tan juntas.



Volviendo al tema


Es muy complicado, mejor hago doble PMOD y ya me queda armado. Como es bastante difícil para mi hacer que los agujeritos del conector VGA me queden alieneados, tuve la tentación de usar este adaptador, que de paso disminuye el stress sobre los PMODs pero me resultó antideportivo.


Adaptador conn_02x08 a db15 high density




Los diagramas de kicad en https://github.com/cpantel/pmod_vga



Dual PMOD a VGA, un sólo PMOD


Como bien podrés apreciar, faltan algunas resistencias correspondientes al PMOD inferior, no importa pues no tengo ningún apuro en conectarle una placa de las caras. Quizás no puedas ver, pero las resistencias de 500 en realidad son dos de 1k en paralelo, es lo que hay...


Aprendizajes

El primer modelo lo hice con doble faz y puse vías por todos lados, luego me dí cuenta que al haber doble faz justamente se pueden evitar muchas, esto se refleja en la primera versión.

Para perforar el DB15 High Density, hice cuatro intentos hasta que me quedó alineado bien y de ahí en más usé eso como plantilla para los intentos posteriores.

Al comienzo consideré utilizar pines rectos para el conector PMOD y preguntando en embebidos me hiceron entrar en razón, muchas gracias, rescaté los pines en ángulo del conector de una diskettera que ya me había ayudado cediendo el conector de alimentación para el controlador de velocidad de los coolers de un switch que aún no he publicado por que el PWM amplificado mete ruido en el RS-232.

Al hacerlo bien, no necesito doble faz, lo que me facilita todo.

Como tengo poca experiencia en hacer circuitos con ácido y como hago pocos, esa experiencia se diluye, no me salió muy bien, lo cual fue una excelente oportunidad para estrenar la pintura reparadora que había adquirido para corregir las pistas de la EDU-CIAA-NXP a la que le arranqué (si, arranqué, en ese momento no sabía como sacar un chip) el microcontrolador para reemplazarlo por otro, uno de estos días/semanas/meses lo terminaré y compartiré.

Con respecto a que de haberlo comprado hecho me hubiese salido u$s 9 más impuestos más gastos de envío, no hay ni la menor duda que debí haberlo comprado, pero no olvidemos que mi objetivo es aprender, todas estas horas no fueron mal invertidas.

 

Promesas

En pocos días, ya sea con ICECube o con la tool chain de la EDU-CIAA-FPGA, lo haré funcionar.

 

No hay comentarios:

Publicar un comentario