¿Cómo puedo controlar una pantalla CGA con un Arduino?

Voy a comprar uno de estos http://www.old-computers.com/museum/computer.asp?st=1&c=446

Estoy planeando construir un servidor dentro de él. Y estaba pensando en usar el monitor CGA incorporado como una pantalla de estado (estilo LCDInfo, o lo que sea que usan los geeks geniales hoy en día). La pantalla es monocromática de color ámbar, por lo que probablemente se parecería un poco a las pantallas Planar EL que algunos han estado usando en sus modificaciones. Y quiero usar un Arduino (o algo parecido) como solución de middleware... PC -> Arduino -> Pantalla

He estado revisando un poco, y CGA es una señal RGBI que usa comunicaciones TTL. 4 líneas (RGB + Intensidad), combinado con HSYNC (15.75KHz) y VSYNC (60Hz). Las 4 "entradas de color" son lógicamente activadas o desactivadas. La combinación de estos genera hasta 16 colores. Sin embargo, como se trata de una pantalla ámbar, probablemente sería más fácil comenzar con "todo alto" o "todo bajo"... Blanco y negro.

Entonces, el problema es el siguiente... Probablemente podría cablear y codificar el arduino para encender y apagar las líneas TTL, pero no estoy seguro de lo que hago con las entradas HSYNC y VSYNC. Y cómo cronometrar los giros TTL para que se correspondan con los píxeles de la pantalla. (La resolución CGA estándar es 320x200).

No soy muy bueno en electrónica, pero soy muy bueno siguiendo instrucciones y captando pistas.

¿Alguien ha intentado esto antes?

EDITAR : ¿Podría usar una versión modificada de esto? http://www.eosystems.ro/deogen/deogen_en.html

EDIT2 : No necesito usar un Arduino. Pero quiero mantenerlo lo más simple posible.

EDIT3 : puede parecer que el monitor en cuestión es en realidad un monitor compuesto, y no un monitor de entrada CGA "real". Entonces eso probablemente hace las cosas un poco más fáciles. Pero todavía estoy interesado en cómo generar una señal CGA pura usando un microcontrolador...

Respuestas (5)

Las señales hsync y vsync son pulsos negativos relativamente cortos que restablecen el haz de electrones del CRT a la izquierda y la parte superior de la pantalla, respectivamente.

Dado que CGA era básicamente solo NTSC (también conocido como RS-170) con sincronización y componentes separados, la sincronización de los pulsos debería ser la misma. El hsync se produciría cada 63,5 microsegundos y el vsync cada 16,7 milisegundos. El tiempo vertical debe estar dentro de las capacidades de un arduino, pero los horizontales pueden ser más desafiantes.

Durante el escaneo horizontal activo, deberá actualizar la luminancia de acuerdo con la resolución horizontal para la que está diseñando. Para obtener 640 píxeles, suponiendo que use aproximadamente 53 us del tiempo de seguimiento horizontal para permitir la duración del HS y los márgenes para asegurarse de que su salida no se salga de los bordes del CRT, debe generar un nuevo píxel aproximadamente cada 82 nanos,. Ahora, 82 ns es (probablemente) demasiado rápido para obtener directamente de un arduino, pero si emplea un registro de desplazamiento externo de 8 bits, solo tiene que cargar eso cada 660 ns, es decir, orden de medio microsegundo. Por supuesto, puede optar por 320 píxeles y facilitar aún más el tiempo.

Si cumplir con ese tipo de tiempo le parece razonable, los números exactos podrían obtenerse fácilmente a través de un poco de búsqueda en Google. Por ejemplo, este parece un buen ejemplo.

¿Estás configurado en un Arduino?

El Parallax Propeller puede generar todo tipo de señales de video de forma nativa. Hay un código disponible para generar señales de video compuesto y VGA, y todas las fuentes también están disponibles, por lo que puede modificarlas si lo desea. Internamente, tiene un conjunto de lógica de generación de temporización de video especializada. Debería ser posible configurar el sistema para controlar esa pantalla sin demasiados problemas, aunque puede requerir un poco de SRAM externa si desea poder mostrar el movimiento completo (bueno, tan lleno como sea posible considerando que es un ámbar pantalla) color.

Además, es mucho más potente que un arduino.

No, no estoy configurado en un Arduino :) Y no voy a mostrar un video de movimiento completo. Quiero usar la pantalla de la misma manera que usaría una pantalla LCD para información de sistemas.
Bueno, la hélice tiene un mapa de caracteres de trama interno en la ROM para mostrar texto en las pantallas, por lo que suena exactamente como lo deseas.

http://code.google.com/p/arduino-tvout/ es probablemente lo que necesita. Si tiene suerte, el monitor interno aceptará una señal NTSC.

Bueno, tal vez... Pero realmente quiero la resolución de 320x200, y tal vez no...
Ese código genera exactamente las frecuencias que mencionaste, que son las mismas que una señal NTSC. El CGA original tiene una salida de video compuesto y un conector para monitor. Es bastante probable que el monitor interno de estas cosas use la señal compuesta de acuerdo con la deducción y la inspección superficial de los foros de hardware antiguos. ¿Por qué se tomarían la molestia de enviar una señal a todo color a una pantalla ámbar?
Una extensión del comentario de Joe sería que probablemente sería más fácil obtener una tarjeta gráfica que ya tenga compuesto y omitir el arduino :(
Todos ustedes están perdiendo el punto... No quiero obtener un monitor aleatorio para mostrar una señal compuesta... Quiero generar una señal CGA "nativa" y usarla con un monitor CGA.
Crees que el monitor interno es CGA. Creo que es muy probable que te equivoques. Vuelve cuando tengas el equipo.
Hmm... Puede que tengas razón... Al leer el artículo de Wikipedia al respecto, dice monitor compuesto... Cualquier otra fuente dice monitor CGA... Bueno, entonces...

Nunca he usado CGA, pero es posible que pueda adaptar uno de los (muchos) proyectos Arduino VGA a su propósito.

Construí un juego de pong VGA alrededor de un ATMega168 que podría ser un buen punto de partida (enlaces 1 2 ). Utilicé la biblioteca AVGA , que hace todo el tiempo VGA bajo interrupción, por lo que su código de primer plano solo necesita preocuparse por mover los sprites.

Otra opción podría ser modificar un YBox .

En realidad no es VGA en absoluto. VGA es componente analógico RGB, mientras que CGA es TTL RGBI digital.

La PC portátil de IBM se comportó como si el monitor interno estuviera conectado a la salida compuesta de una tarjeta CGA estándar. Uno de los efectos secundarios de esto fue que cuando el modo se configuró para "colorear" 80 columnas, los colores aparecían como patrones de rayas grises en lugar de tonos de gris. Esto, a su vez, haría que muchas combinaciones de primer plano y fondo (por ejemplo, azul sobre negro) fueran casi completamente ilegibles. Esto fue bastante molesto dado que (1) el monitor interno era monocromático y, por lo tanto, la información cromática sería inútil para él; (2) incluso cuando se usaba un monitor compuesto externo, la señal de ráfaga de color estaba mal sincronizada en el modo de 80 columnas, por lo que no se podía obtener el color de todos modos.

Por cierto, el monitor interno de Compaq parece ser único; utiliza la velocidad de exploración horizontal NTSC, pero la exploración vertical puede ser de 60 Hz o 30 Hz. No estoy seguro de por qué Compaq decidió usar 30 Hz no entrelazados, en lugar de maldecir el circuito vertical del monitor para que funcione bien con la salida entrelazada no del todo correcta del 6485, pero es la única máquina que he visto con un Escaneo de pantalla de 30 Hz.