Librería Arduino para salida VGA con graficos estilo ZX

(Casi) cualquier cosa que quieras compartir será bienvenida por la comunidad

Moderador: Sir Cilve Sinclair

Responder
ajcasado
rst 0
Mensajes: 4
Registrado: Mié Jun 20, 2018 1:56 pm

Librería Arduino para salida VGA con graficos estilo ZX

Mensaje por ajcasado » Mié Jun 20, 2018 2:21 pm

Buenas,

Estoy escribiendo una librería para arduino con salida de 16 colores con el modelo de atributos del ZX Spectrum.
Si alguien tiene interés le puede echar un vistazo en https://github.com/ajcasado/ardvga
Con un atmega1284p overclockeado se pueden mostrar gráficos de spectrum, Con pocas modificaciones se pueden usar los modos extendidos de atributos 8x4, 8x2 y 8x1.

Saludos.

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Librería Arduino para salida VGA con graficos estilo ZX

Mensaje por jzx » Mar Jun 26, 2018 8:15 pm

Puedes poner modos que no sean de spectrum (además de los de spectrum), porque puede ser útil para otras cosas, con un monitor de saldo. Daria para 40 x25 columnas?.

No lo he mirado a fondo, pero supongo que la entrada de datos (por ejemplo desde otro arduino) se hará por rs232, ahí habrá que ver con el cristal que has puesto que velocidades son posibles.

ajcasado
rst 0
Mensajes: 4
Registrado: Mié Jun 20, 2018 1:56 pm

Re: Librería Arduino para salida VGA con graficos estilo ZX

Mensaje por ajcasado » Mié Jun 27, 2018 12:27 pm

En principio tras crear la instancia de clase ardvga se define el ancho y el alto en columnas y filas de caracteres de 8x8 pixeles al llamar a la función pública de clase begin, con lo cual el usuario tiene plena libertad de definir la geometría del modo. Se define también en esta llamada si el modo VGA es 720x400@70Hz o 640x480@60Hz. Con el arduino a 16MHz, y dependiendo de las funciones utilizadas y la configuración de la instancia de clase (por ejemplo, si se usa o no el sonido integrado en la librería, el modo 720x400 o el 640x480 o el efecto skipline que sólo muestra las lineas impares) se pueden sacar como máximo unos 18 caracteres por fila (ancho). Normalmente los monitores admiten cierta desviación en la temporización de las señales de sincronismo vertical y horizantal, y he comprobado que bajando la tasa de refresco hasta lo que permite el monitor se pueden conseguir entre dos y tres caracteres (columnas) más por fila, dependiendo del monitor. Esto nos deja en torno a las 20 columnas. de aquí en adelante hay que aumentar la frecuencia de reloj. Yo con el atmega1284p he conseguido llegar a 28MHZ y he llegado a 38 columnas de 8x8 píxeles. Si quieres más columnas entonces hay que cambiar las fuentes por unas con menos píxeles de anchura, pero entonces los atributos de color no quedarán alineados con los caracteres. Tengo pensado poder configurar en la función begin el ancho y el alto de cada celda de atributos para poder dar mas funcionalidad, pero el ancho de celda de atributos siempre será un múltiplo de 8 píxeles por restricciones del modelo de hardware utilizado.
En cuanto al numero de filas, por cada pixel mostrado se usan cuatro lineas en el atmega328p y dos lineas en el atmega1284p de la resolución del modo estándar vga utilizado, aunque en futuras versiones este parámetro se podrá definir en la llamada a begin. De esta forma para 480 lineas tendremos un máximo de 15 filas en el 328p y 30 en el 1284p, y para 400 lineas 12 filas en el 328p y 24 en el 1284p.
Otra futura funcionalidad que quiero implantar es el poder rotar la imagen con respecto al monitor. De esta manera y usando una linea del modo estandar VGA para cada pixel se pueden conseguir hasta 60 columnas de 8x8 píxeles en el modo estándar 640x480.
Por último una restricción importante a la hora de escoger la geometría es la RAM disponible. La librería usa (columnas x filas x ocho) bytes para los píxeles y (columnas x filas) bytes para los atributos de color. El atmega328p tiene 2kB de RAM y el atmega1284P 16kB de RAM. Tengo pensado sacar una versión para el arduino MEGA que tiene 8kB de RAM, aunque tiene un interface sencillo para ampliar la memoria con chips SRAM baratos, cosa que aún no he explorado.

También tengo alguna idea para sacar VGA del esp8266 y del esp32, pero en estos casos con una aproximación totalmente diferente, que no utiliza el modelo de atributos de color usado en el ZX Spectrum.

En cuanto a la comunicación, para sacar los píxeles del chip se usa un puerto serie configurado en un modo especial que tienen los AVR llamado MSPI, que es básicamente un SPI. Debido a esto sólo se puede comunicar por rs232 de forma nativa si el chip utilizado tiene más de un puerto serie. En el atmega328p sólo hay uno, en el 1284p hay dos. En el 328p además uso los pines del i2c para sacar el canal azul de color, así que en este chip sólo queda el SPI. De todas maneras todavía no he hecho nada para que esto reciba comandos externos, y al utilizar interrupciones de forma intensiva para mostrar el VGA correctamente cualquier implantación de comunicaciones debe evitar usar interrupciones.

Saludos.

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Librería Arduino para salida VGA con graficos estilo ZX

Mensaje por jzx » Jue Jun 28, 2018 7:47 pm

Bueno, lo de 40x25 era solo por que es un formato bastante corriente para estas cosas.

Si no te queda puerto serie libre, es más dificil. Con un puerto serie a lo mejor podrías hacer que funcione junto con la generacion de video si usaras un pin como cts, de forma que indicara al puerto serie que manda los datos cuando esta ocupado. Habría que ver si el que manda los datos puede reaccionar lo bastante rapido para que no se pierda nada.

A ver si puedo probarlo. Si funciona con un cristal de 27 MHz .... (tengo varios).

ajcasado
rst 0
Mensajes: 4
Registrado: Mié Jun 20, 2018 1:56 pm

Re: Librería Arduino para salida VGA con graficos estilo ZX

Mensaje por ajcasado » Mié Nov 21, 2018 2:53 pm

He actualizado el repositorio. De momento funciona con el atmega328p.
El ejemplo prueba funciona. Hay también esquemas funcionales y enlaces a videos de ejemplo.

Falta bastante pero sirve para hacerse una idea.

ajcasado
rst 0
Mensajes: 4
Registrado: Mié Jun 20, 2018 1:56 pm

Re: Librería Arduino para salida VGA con graficos estilo ZX

Mensaje por ajcasado » Mié Oct 28, 2020 12:04 am

He actualizado el repositorio de github https://github.com/ajcasado/ardvga
Funciona en un atmega1284p a 27MHz. Los ejemplos están hechos para la resolución de un spectrum, pero se puede configurar fácilmente para llegar hasta 328x240px siguiendo las indicaciones.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados