Buenas, pues en este hilo os contaré el proyecto que me llevo entre manos, por si alguien quiere hacerme alguna sugerencia o algo (o en todo caso, iré mostrando mis progresos por si le sirve de algo a alguien).
En principio la idea es controlar el nivel de aguas (en una autocaravana hay limpias, grises y negras) que en el caso de aguas limpias tengo que además poner un sensor de presión (ahora mismo hay 4 "interruptores", para indicar en cuartos). También mostrará el estado de las 2 baterías: tensión (proporcional a la carga, no veais como se descargan en una autocaravana), y consumo (corriente que sale o entra, en el caso de que estén cargandose).
Como el objetivo es mostrarlo todo a la vez, los LCD de texto y gráficos pequeños quedaron descartados (y tampoco es plan de poner 3 o 4 LCD uno al lado del otro). Así que decidí usar un monitor o televisión (sobretodo lo primero), con lo cual descarté cualquier tipo de microcontrolador por velocidad a la hora de entregar los datos de video. La opción escogida es una FPGA (igual a la que tengo en mi Nexys, es decir una Spartan 3 - 1000k puertas), con un monitor de 7/8 pulgadas táctil. Lo de táctil para configurar algunas cosas el nivel del agua para que dé aviso acústico.
Mi mayor quebradero de cabeza (aunque cada vez lo tengo más diseñado), es como realizar la señal de video (es casi como hacer un tarjeta grafica sencilla). La opción escogida por ahora, es una SDRAM rápida (a 200Mhz) con doble buffer, y un generador de VGA sencillo de 640x480x60Hzx16bpp. El controlador de la SDRAM todavía lo tengo que desarrollar (así como un doble puerto), para incluir todo tipo de aceleraciones (acceso en ráfagas y CAS latency máximo, etc.). El generador VGA es muy sencillo. De esta forma, el VGA pide datos a la SDRAM en ráfagas, los almacena en una pequeña memoria serie (dentro de la FPGA), y las muestra continuamente. Por otra parte, el chip tiene que escribir un nuevo marco en los ratos libres, y cuando lo tenga listo conmutar. Posiblemente incorpore tambien una memoria intermedia para la escritura (en espera mientras se lee para mostrar por pantalla)
Todavía tengo que hacer muchos cálculos de velocidad (en función de como me salga el controlador), y no sé el tiempo disponible para realizar las escrituras, pero tendría que ser suficiente para ciertas animaciones (medianamente lentas, con un 1Hz voy sobrado), así como refrescar la información en pantalla.
Por otra parte una vez resuelta la "tarjeta gráfica" tengo que diseñar el interfaz. Para ello me voy a basar en cualquier tipo de interfaz conocido (windows por ejemplo), y teniendo en cuenta que siempre redibujo completamente la pantalla (mucho más sencillo que cambiar partes aisladas, aunque más lento), y no hay cursor. Como pretendo en un futuro (lejano) ampliar las opciones de configuración, sería ideal tener un "motor" que represente todo lo necesario desde una lista de componentes (detallados en posición, tamaño, etc.).
Para hacer este motor, y dado que hacerlo "a pelo" en VHDL sería infernal para mi, el resto del chip va a estar basado en un microcontrolador (Microblaze en principio, pero no sé ni como empezar). De esta forma podré realizar este "motor" en C, que controlo infinitamente más que VHDL, y que va a ser bastante complejo (botones, sliders, labels, buff....).
Por otra parte todos los gráficos (y fuentes) debo obtenerlos de una EEPROM, de la que todavía tengo que pensar el formato (incluir una tabla inicial con offsets, longitudes y tipo de gráfico).
La idea es hacer un sistema altamente configurable, sacrificando algo la velocidad. En todo caso la parte que todavía tengo más verde es la de la interfaz, pero me parece que va a ser la mejor opción si no me quiero volver loco con VHDL...
Un saludo.
PD: por si no se notaba, comentar que es un proyecto a largo plazo, tengo como hasta enero de plazo si quiero presentarlo para una asignatura.
PD2: y ahora que me acuerdo, aprovechando que el monitor es hermoso, también estaría bien poner una cámara de marcha atrás, con algún mensaje superpuesto(distancia al coche de atrás), tipo OSD de los televisores.