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

7

Me aparece uno de estos enlace

Estoy planeando construir un servidor dentro de él. Y estaba pensando en usar el monitor CGA incorporado como una visualización de estado (estilo LCDInfo, o lo que sea que los geeks geniales usan hoy en día). La pantalla es de color ámbar monocromo, por lo que probablemente se parecería un poco a las pantallas planas EL que algunas han estado usando en sus mods. Y quiero usar un Arduino (o algo así) como una 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), combinadas con HSYNC (15.75KHz) y VSYNC (60Hz). Las 4 "entradas de color" son lógicas activadas o desactivadas. La combinación de estos genera hasta 16 colores. Sin embargo, como esta es 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 sincronizar los giros TTL para que correspondan a los píxeles en la pantalla. (La resolución estándar CGA es 320x200).

No soy muy bueno en electrónica, pero soy muy bueno siguiendo instrucciones y recibiendo sugerencias

¿Alguien ha intentado esto antes?

EDIT : ¿Podría tal vez usar una versión modificada de esto? enlace

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

EDIT3 : Podría parecer que el monitor en cuestión en realidad es un monitor compuesto, y no un monitor de entrada CGA "real". Así que 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 ...

    

5 respuestas

7

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

Como CGA era básicamente solo NTSC (AKA RS-170) con sincronización y componentes separados, el tiempo de los pulsos debería ser el mismo. El hsync ocurriría cada 63.5 microsegundos, y el vsync cada 16.7 milisegundos. La sincronización vertical debe estar bien dentro de las capacidades de un arduino, pero las horizontales pueden ser más desafiantes.

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

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 googlear. Por ejemplo, este parece un buen ejemplo.

    
respondido por el JustJeff
3

¿Estás 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 VGA y de video compuesto, 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 video especializada. Debería ser posible configurar el sistema para controlar esa pantalla sin demasiados problemas, aunque puede requerir un poco de memoria SRAM externa si desea poder mostrar el movimiento completo (bueno, tan completo como se considera que es un ámbar). pantalla) color.

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

    
respondido por el Connor Wolf
0

enlace es probablemente lo que necesita. Si tiene suerte, el monitor interno aceptará una señal NTSC.

    
respondido por el joeforker
0

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

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

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

    
respondido por el Toby Jaffey
0

La PC portátil de IBM se comportó como si el monitor interno estuviera conectado a la salida compuesta de una tarjeta CGA de valores. Uno de los efectos secundarios de esto fue que cuando el modo se configuró para "colorear" 80 columnas, los colores aparecerían como patrones de franjas grises en lugar de como tonos de gris. Esto, a su vez, haría que muchas combinaciones de fondo-fondo (por ejemplo, azul sobre negro) sean casi completamente ilegibles. Esto fue bastante molesto dado que (1) el monitor interno era monocromo, y por lo tanto la información de croma sería inútil para él; (2) incluso cuando se usa un monitor compuesto externo, la señal de explosión de color se confundió en el modo de 80 columnas, por lo que no se podía obtener 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 60 Hz o 30 Hz. No estoy seguro de por qué Compaq decidió usar 30Hz no entrelazados, en lugar de sincronizar el circuito vertical del monitor para que funcione bien con la salida entrelazada no correcta del 6485, pero es la única máquina que he visto con un Escaneo de pantalla de 30Hz.

    
respondido por el supercat

Lea otras preguntas en las etiquetas