TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: aitopes en 07 de Julio de 2008, 23:00:40

Título: Generador de imagenes de video con PIC
Publicado por: aitopes en 07 de Julio de 2008, 23:00:40
Hola amigos!
Este hilo surge a partir del proyecto de crear una sencilla plataforma para juegos basada en PIC (http://www.todopic.com.ar/foros/index.php?topic=22402.0).

Trasladamos aqui la discusion de como hacer un generador de video, para mantener el orden.

Una base de discusión podria ser este articulo (http://www.ucontrol.com.ar/wiki/index.php/PIC_PAL_Video_Library).

(http://www.ucontrol.com.ar/wiki/images/thumb/7/70/089-PIC-PAL-TV-pic_pal_video_1.JPG/300px-089-PIC-PAL-TV-pic_pal_video_1.JPG)

A mi parecer, si se toma como punt de partida, deberiamos migrarlo a CCS (está en MikroC).



Si quieres bajar inmediatamente el resultado de este gran proyecto (http://rapidshare.com/files/146616006/Emulador_de_GLCD_para_video.rar.html).
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 08 de Julio de 2008, 00:54:03
perfecto, asi vamos modularizando un poco y no desvirtuamos el tema del juego.
Yo creo q me voy a poner de pleno con este asunto, porq hace rato le tengo ganas a esto de señales PAL con pics jeje.
Segun lei, no hace falta un µcontrolador muy potente para esto, asiq podriamos usar uno pequeño para generar el video, y q se comunique con el pic madre, del cual va a recibir la imagen a procesar.

Ya me estoy entusiasmando jeje... por el momento me voy a poner a leer e informarme, cuando tenga algo entre manos les aviso ;)
saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 08 de Julio de 2008, 01:03:07
A mi también me parece buena la idea de separalo, ya que puede servir para otras aplicaciones  :mrgreen:

No conocía esta página que sugiere Ariel, pero tiene buena pinta.
Despues de leer un poco hago comentarios.

Salud.-  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 08 de Julio de 2008, 01:55:13
Esto para poneros los dientes largos:
(http://www.winpic800.com/proyectos/ds_vga_gen/vga_320_240_con.jpg)

(http://www.winpic800.com/proyectos/ds_vga_gen/vga_320_240_con2.jpg)

(http://www.winpic800.com/proyectos/ds_vga_gen/vga_320_240_ram.jpg)

Está aquí: dsPIC VGA GEN (http://www.winpic800.com//index.php?option=com_content&task=view&id=42&Itemid=94)
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 08 de Julio de 2008, 08:18:40
Hola Manolo!

Recordaba el trabajo que mostrás, es IMPRESIONANTE!

Te hago una pregunta: ¿la salida es para un monitor VGA o puede ser enviado a un TV directamente?  (no tengo la mas pálida idea del tema, y puede ser una pregunta sin sentido, ojo! :) )

Saludos. :mrgreen:
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 08 de Julio de 2008, 08:59:53
Debería contestar el maestro, que es su autor, pero estas fotos son de un proyecto de generación de imagen para VGA, aunque antes ya había hecho de las suyas con un TV normal y corriente.
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 08 de Julio de 2008, 11:01:12
efectivamente son señales VGA. si queres verlo en un TV necesitas un adaptador.
Yo creo q generar señales VGA es mas facil, ya q tiene un canal por cada color (RGB).
Voy a iniciar una investigación intensiva al respecto. cuando tenga algo les aviso.

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 08 de Julio de 2008, 11:34:31
Es más sencillo lograr una señal para la entrada de audio y video de la tele que modulada para la entrada de antena, creo que deberíamos encararnos a eso, todos los televisores de hoy poseen una entrada de video compuesto.

Salud 8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 08 de Julio de 2008, 11:38:21
Buscando información en forma desesperada para que el juego sea por VGA o por TV y no por LCD, ya que así nos ahorramos de comprar más cosas, me topé con esta información.

http://serdis.dis.ulpgc.es/~itis-dsm/_private/2003-2004/PicVGATrainer.pdf

Le he mandado un e-mail al autor para que me facilite los código fuentes. Vamos haber que me responde.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 08 de Julio de 2008, 14:36:42
La verdad es que estoy viendo en la página de Pablín y la cosa es sencillísima para generar video compuesto, se logra incluso con un 16F84
Mi idea sería una resolución tentativa de  256x192 pixeles con 8 colores ademas un byte más conteniendo el color del fondo, y el color del borde
Al ser de 8 colores, pueden ser definidos dos pixeles en un byte, podríamos ver la lógica de transmisión de datos más adelante, pero les aseguro que por lo que ví no es muy difícil lograrlo.

Salud 8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 08 de Julio de 2008, 14:43:39
A ver...
si no me equivoco, cada linea de barrido de un TV tarda 64us en completarse. Eso significa que en ese tiempo, si tenemos 256 columnas EN BLANCO Y NEGRO hay que hacer al menos 256 operaciones....(deben ser bastante más, en la practica). Y entre linea y linea CREO que hay solo 15 us (o poquito mas), lo que no deja tiempo para hacer muchos calculos...

A 8 colores, esto se triplica. A cuatro colores se duplica.

Con un 18Fxxxx a 20MHz estamos lejos de esos tiempos, creo.

Saaaaalvo que uno genere la imagen, la mande a una memoria rapida (¿seria nuestra "video RAM"? :) ) y que el PIC solo se encargue de leer de esa memoria y volcarlo sobre la pantalla.

El PIC del dispositivo principal (el procesador de la maquina de juegos, por ejemplo) se encargaria de generar y enviar a esa memoria intermedia las imagenes.

Asi podria funcionar, se me ocurre.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 08 de Julio de 2008, 16:28:58
Claro Ariel, siempre estaba pensando en usar una memoria intermedia y un pic que se encarge de leerla y presentarla en la TV, Si así no fuera nos consumiría todo el tiempo el refresco de imágen.

Aún así estamos hablando de unos 24 Kbytes para cada imágen (lo que es mucho a mi entender), pero estoy viendo  algunas alternativas para reducirlo, siempre me remito a la famosa Spectrum que lograba esto mismo con solo 8K de Ram para video :)

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 08 de Julio de 2008, 17:31:18
¿Porqué no empezamos con algo en blanco y negro y después pasamos a algo en colores?
no quiero tirar abajo las ideas que son muy buenas, me parece mejor ir subiendo un escalón por vez,
ya que la idea original de Ariel era hacerlo con una GLCD monocromo, ¿les parece?
es más diría de hacer algo con la misma resolución de una glcd así el juego es compàtible con ambas pantallas
y no hay que hacer mayores modificaciones más que la interfaz de vidéo.
bueno no me tiren con nada!!! es solo una idea!!  :D :D :D :D :D
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 08 de Julio de 2008, 17:48:07
Sabes Flaco, estaba entrando al foro para hacer la misma sugerencia, una señal en blanco y negro para la tele es muchísimo mas sencilla para realizar y además sería compatible con el LCD, además de que como decis vos podemos luego ir haciendo mejoras a nuestro Play Station  :D :D :D :D :D
Título: Re: Generador de imagenes de video con PIC
Publicado por: RALF2 en 08 de Julio de 2008, 20:20:13
Que tal amigos!
Muy interesante el tema del manejo de un monitor con pic, me apunto al proyecto  :mrgreen:
Tambien si quieren en vez de un monitor, quieren utilizar una glcd para ello  :D
Para ver si logramos hacer algo como esto.

Saludos
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 08 de Julio de 2008, 23:40:19
Como Puede verse en el siguiente link (http://electronics.howstuffworks.com/tv9.htm), la señal de video compuesto es bastante sencilla de lograr y más aún con puntos encendidos o apagados.
Un voltaje de 2 volts significa para la tele un punto blanco, un voltaje de 0,5 implica un color negro y 0 volts durante 5 us le indican que estamos en precencia de un sincronismo horizontal y vamos a iniciar una nueva línea, el sincronismo vertical es también de 0 volts, pero dura entre 400 y 500 us

Mas sencillo imposible, vean también algunos ejemplos en la página de pablín: Ejemplo 1 (http://www.pablin.com.ar/electron/circuito/mc/vidclock/index.htm) Como pueden ver en este ejemplo usan un divisor de tension con 3 resistencias para logarar los voltajes necesarios
Ejemplo 2 (http://www.pablin.com.ar/electron/circuito/mc/picdream/index.htm) aquí usan más resistencia para lograr tonos de gris.
Y en este Ejemplo 3 (http://www.pablin.com.ar/electron/circuito/mc/picpong/index.htm) con video blanco y negro puro y hasta con audio (con solo 12 Mhz)

Espero se entusiasmen y vena que es sencillo.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 09 de Julio de 2008, 09:31:48
Yo estube mirando los mismo ejemplos y no cabe duda que, debemos poner a un PIC encargado de la generación del Audio y Video, así, el micro principal, se dedica alojar el juego, de los comandos (joystick) y de mandar al pic de video y audio, los datos necesarios a procesar.

El procesador del C64, corria a menos de 1Mhz, el video tenía un chip encargado de la generacion del mismo, pero no se a cuanto corría. Podemos fiarnos del circuito para lograr lo mismo. El C64 si no me equivoco, tenía una resolución de 640x480 y a 8 bit de colores.
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 09 de Julio de 2008, 09:38:00
El procesador del C64, corria a menos de 1Mhz, el video tenía un chip encargado de la generacion del mismo, pero no se a cuanto corría. Podemos fiarnos del circuito para lograr lo mismo. El C64 si no me equivoco, tenía una resolución de 640x480 y a 8 bit de colores.

Eran 256x192. :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 09 de Julio de 2008, 09:41:15
Si que le erre feo.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 09 de Julio de 2008, 14:49:22
Para Hecer compatible la parte de TV con el LCD que ya tiene Ariel, podríamos hacer lo siguiente, podríamos tener una resolución de 128x64 y hacer que tres pixeles de la tele sean equivalentes a 1 del LCD, los puntos se verán un tanto grandecitos pero tendremos compatibilidad.

Entonces en la tele ocuparíamos 384x192
Me inclino más por utilizar el sistema NTSC ya que tiene menos lineas y las teles de la mayoría de los paises tienen como alternativa este sistema, el mismo tiene 525 líneas, en cuanto a los pixeles (en realidad no hay pixeles, el haz de electrones va recorriendo la pantalla y lo hace en 42 microsegundos, dependiendo de cuantos cambios de voltaje hagamos en ese tiempo tendremos más o menos pixeles) yo sugiero dejar un borde (como hacía la mayoría de los antiguos home computer) y centrar los pixeles útiles en el medio de la pantalla, eso nos dará tiempo también de leer los pixeles que se tendrán que pintar en la pantalla y luego "bombardearlos" al tubo de rayos catódicos, para hacer un dibujo lo menos deformado posible sugiero utilizar la misma proporción de pantalla no usada en forma vertical como distribución de tiempo en forma vertical.
Me explico, como la pantalla tiene 525 líneas y solo usaremos 384 tenemos 141 líneas no utilizadas, esto representa alrededor de un 27% de la pantalla no usado, es decir que nos quedaría 13,5% de la parte superior e inferior de la pantalla con una banda negra no usada, aplicando la misma proporción al tiempo en que el haz de electrónes está surcando la pantalla, tenemos aproximadamente 5,7us en que no se enviara señal alguna, luego 30,6us enviando la señal correspondientes a los 192 pixeles de la imagen del juego y finalmente 5,7us más correspondientes a la zona donde no dibujaremos nada.

Ya como que va siendo hora de hacer alguna cosita, como les cuento tengo poquísimo tiempo, esto lo posteo de a ratitos desde el trabajo (cosa que no debería hacer  :D :D )

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 09 de Julio de 2008, 17:05:00
A veces, conviene ir un poco atras en el tiempo para comprender como funcionan las cosas.

El siguiente (http://www.pong-story.com/pics/mags/elektor0376/big/Page319.gif) es un circuito de un juego de tenis (un "PONG") publicado por Elektor hace mas de 30 años! Usa un puñado de integrados TTL para generar el juego y....la imagen en la TV.

El resto de las paginas del articulo estan aca: http://www.pong-story.com/elektor0376.htm

Vere de darles un buen vistazo esta noche. Comprendiendo ese hard, podremos hacer mucho por soft :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 09 de Julio de 2008, 23:09:36

Me inclino más por utilizar el sistema NTSC ya que tiene menos lineas

Una pregunta porque estoy un poco olvidado de la secundaria, ¿en un sistema blanco y negro hay diferencias entre el sistema pal y ntsc?
lo digo porque según recuerdo, ojo no confíen mucho en mi memoria, el sistema es el mismo y lo único que cambia entre ambos es la parte a color,
en NTSC cada línea es independiente en cuanto a color y como el sistema (del color) se controla según el ángulo de fase de la señal de BURST
cualquier desfasje producido por el medio de transmisión se traduce en una distorción proporcional en todos los colores,
por eso los teles ntsc traen un ajuste manual de tonalidad y por eso en broma se le dice en inglés Never The Same Color"

En cambio el sistema PAL hace un promedio de color entre dos líneas adyacentes, con lo que se corrije el desfasaje indeseado, por lo tanto
ambos sistemas tienen la misma resolución en tonalidades de grises, en color el ntsc es inestable pero tiene el doble de resolución y el pal al revés
mitad de resolución con respecto al ntsc pero colores reales.

Corrijanmé si me equivoco por favor, MARIOQUILLOTEEEEE!!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: jfh900 en 09 de Julio de 2008, 23:11:39
El número de líneas y la frecuencia de cuadro son distintas.

Un saludo
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 09 de Julio de 2008, 23:15:29
OK!!  :-/ :-/

¿¿cuales son las diferencias??
Título: Re: Generador de imagenes de video con PIC
Publicado por: jfh900 en 09 de Julio de 2008, 23:37:40
Aquí las puedes encontrar:

http://es.wikipedia.org/wiki/NTSC
http://es.wikipedia.org/wiki/PAL

Referente a lo comentado anteriormente tenemos:
* NTSC 525 líneas PAL 625 líneas
* NTSC 60 cuadros PAL 5o cuadros

Como bien dijiste antes el sistema NTSC tiene problemas con el color que no tiene ni el PAL ni el SECAM

Un saludo
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 10 de Julio de 2008, 00:37:12
Hola amigos !  :)

Que bueno está éste hilo ! Ojalá se pueda lograr algo interesante con buen movimiento de gráficos.
Yo no voy a poder participar de la construcción de nada de ésto, pero no voy a dejar de estar metiendo las narices por aquí.  :wink:

Voy a tratar de ser breve (no creo que me salga), para no desviar el tema que vienen intentando desarrollar pero les digo:
En el comienzo de la televisión, cuando era monocromática, existían NORMAS de TV conocidas por letras y que eran adoptadas por los distintos países de acuerdo (usualmente) a la frecuencia de línea existente en los mismos.
Dicha NORMA regulaba (entre otros) los siguientes parámetros:
Frecuencia de Barrido Horizontal, Frecuencia de Barrido Vertical, Ancho de Canal y asignación de los canales dentro del espectro de frecuencias.

Por el lado de América, se adoptó la NORMA "M" que definía, Frecuencia Horizontal de 15750 Hz. (30 cuadros de 525 líneas por segundo), Frecuencia Vertical de 60 Hz (= frecuencia de línea eléctrica domiciliaria) y 6 Mhz. de ancho de canal para enviar imágen y sonido.

Ésta NORMA (M) fué adoptada por México, Colombia, Ecuador, Venezuela, Perú, Chile, Brasil, casi toda América Central, Japón y la mayoría de los países Asiáticos.  

Por su parte, Europa desarrollaba un sistema de mayor definición al dotar a sus canales de 8 Mhz de ancho de banda. Ésto se lograba sacrificando la cantidad de canales en el espectro (abundante y despoblado en aquellos tiempos), a costa de una imagen claramente superior.
Se adoptó una Frecuencia Horizontal de 15625 Hz (25 cuadros de 625 líneas por segundo) y una Frecuencia Vertical de 50 Hz. (También la frecuencia de la red domiciliaria de energía) A ésta NORMA Europea se la conoce mayormente como "B".
Cada país se adaptaba al fenómeno de la Televisión como mejor podía y proliferaron múltiples NORMAS en Europa además del B. (D, G, I , etc.)

Argentina, quien ya tenía en funcionamiento (vía SIEMENS) toda su línea domiciliaria en 50 Hz no podía adoptar la NORMA de TV "M" al igual que el resto de América (15750 Hz / 60 Hz), entonces decidió "crear" una nueva NORMA a su medida y fué la norma "N" la que compartía el ancho de canal de 6 Mhz y la distribución del espectro del resto de América, pero bajo los parámetros de cuadros de Europa (15625 Hz / 50 Hz)(toda una ensalada !)

Cómo en aquéllos años los sistemas osciladores (Horizontal y Vertical) eran no enclavados en fase y fácilmente variables en frecuencia; cualquier TV adquirido en USA, servía perfectamente en Argentina con sólo unos pequeños ajustes a los controles frontales del TV.

Con los TV de Europa no ocurría eso ya que por un lado coincidían las frecuencias de los barridos, pero por otro no coincidían las sintonías de los canales, por lo que los hacía imposibles de adaptar y adoptar.
Lo mismo ocurría en Europa con los TV americanos.

Después ... mucho después, vino el color.

El primero en aparecer fué el NTSC (América), que cómo muy bien describió Claudio, tenía el problema de cambiar el matiz del color mostrado según los periplos que siguiera y soportara la señal recepcionada por sistemas de antenas no siempre óptimos. (En aquella época no existía la TV por cable, ni DIRECTV ... )
Entonces quienes tenían la NORMA "M" adoptaron el SISTEMA NTSC
Los Europeos diseñaron un SISTEMA que denominaron PAL (Phase Alteration Line) donde la alteración en la transmisión de una de las señales diferencia de color; y su posterior recuperación en el receptor, hacían que no existiera el problema que presentaba el NTSC.
Cualquier alteración de la información de color, se cancelaba automáticamente gracias a la inversión de fase línea a línea.
Por lo tanto, la mayoría de los países europeos con NORMA "B" adoptaron el SISTEMA PAL

Francia por su lado, diseñó otro SISTEMA de color al cual llamó SECAM el cuál adoptaron algunos países arábigos y soviéticos, por lo que no fué muy conocido por ésta zona del globo.

Argentina no pudo adoptar el SISTEMA de color NTSC porque ya estaba plantada con su sistema de 50 hz y fué así que adoptó el SISTEMA europeo PAL.

Entonces ....

NORMA de TV podemos denominar a los parámetros necesarios para crear una imagen en blanco y negro.
SISTEMA de color son los parámetros que le darán cromaticidad a la imagen en blanco y negro.

Argentina entonces quedó con PAL-N, al igual que Uruguay, Bolivia y Paraguay (aislados del restos del mundo hasta que aparecieron los transcodificadores y conversores de normas).
Peor aún Brasil, que adoptó también PAL y que traía una NORMA "M", por lo que quedó único en el mundo con PAL - M
Europa se generalizó en el PAL - B, el resto de América en el NTSC - M , repartiéndose entre éstas dos combinaciones de NORMAS y SISTEMAS la casi totalidad de transmisiones analógicas actuales del mundo, las que poco a poco, darán paso a las transmisiones de HDTV y de vuelta nos veremos (los países pequeños) en adoptar la mejor, ó más conveniente opción : el modelo americano ATSC ó el europeo DVB

Entonces podemos decir que a ésta historia de la TV, le faltan aún algunos capítulos que espero vivir para ver la saga completa ....  :D

Si bien me extendí bastante en detalles históricos, hay información importante en el post (cantidad de cuadros, de líneas, frecuencias, barridos, etc) que espero les sean útiles.

Comparto con el Pollo que lo más conveniente es largar en NTSC por ser una norma casi universal actualmente (todos los TV la traen) y también con Claudio de que se debiera empezar en B/N y después de acuerdo a los resultados que se vayan obteniendo, evaluar pasar al color.

Si puedo aportar más datos, lo haré con mucho gusto.
(Y trataré de ser más breve ...  :D )

Un gran saludo a todos ! :)

Mario
Título: [*] Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 10 de Julio de 2008, 01:49:48
Voy a tratar de ser breve (no creo que me salga), ...

Esto demuestra que te conoces bien  :D
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 10 de Julio de 2008, 03:13:50
ya se kung fu. Estuve leyendo toda la informacion q subieron mas una q otra cosa q encontre por ahi. Y ya entiendo como funcionan las señales de television.
La cosa ahora es como implementar esto... yo supongo q habria q hacer una especie de rutina q dibuje en el tele lo que haya en cierto espacio de memoria. Entonces para controlar la imagen, lo unico q habria q hacer es modificar dicho espacio de memoria.
Alguna otra idea?
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 10 de Julio de 2008, 07:27:15
Que bueno está éste hilo ! Ojalá se pueda lograr algo interesante con buen movimiento de gráficos.
Yo no voy a poder participar de la construcción de nada de ésto, pero no voy a dejar de estar metiendo las narices por aquí.  :wink:
[...]
Mario

Mario! Que alegria tenerte de vuelta, y que bueno el post.

Creo que tenes razon en empezar BN hasta dominar la cosa.

Vos que sabes de esto.. ¿Hay algun integrado que nos genere los pulsos de sincronismo o algun otro que ayude a quitarle tareas al micro? ¿O no vale la pena meter cosas externas al PIC?

Un abrazo!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 10 de Julio de 2008, 09:56:51
¡Por fin entendí las NORMAS y SISTEMAS de la TV!  :-/ :-/ Siempre se me hiso una ensalada, por de dónde leía al respecto, hablaba como si ya supiece y ovbiamente, no entendía nada.

O mejor aún ¿habrá algún chip encargado de generar el auido y video para la TV?, si lo hay, sería un golazo. (también hay que ver adqisición y precio)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 11 de Julio de 2008, 01:33:11
Hola a todos !  :)

Esto demuestra que te conoces bien  :D

  :D Claro! Sabía que me iba a suceder!!!   :D

Yo creo muchachos que hay tres formas de hacer las cosas:
Una de las maneras es haciendo que la cosa funcione cómo sea, utilizando circuitos elementales y sencillos con tal de lograr que funcione rápido,  otra es hacerlo desde el comienzo bien y proyectando hacia posibles ampliaciones y/o mejoras, reformas, etc. aunque nos cueste sangre sudor y lágrimas; y la última es utilizando lo que ya está hecho y aprovechando sus cualidades para lograr un resultado magnífico, moldeado a nuestra manera.

.. ¿Hay algun integrado que nos genere los pulsos de sincronismo o algun otro que ayude a quitarle tareas al micro? ¿O no vale la pena meter cosas externas al PIC?

La base sería generar el sincronismo, lo que nos daría el cuadro, y al que luego se le agregaría la imagen. Dos cosas por separado que convergen en el resultado final.

Según mi punto de vista, una de las formas de encarar el proyecto podría ser, con un PIC sencillo (16F84A) a 20 Mhz. generar el cuadro ó raster en la NORMA que se desee trabajar y utilizar sí un microcontrolador potente para trabajar los gráficos en forma exclusiva, de manera tal que éste último no deba encargarse de todo el trabajo.
Luego se suman las señales de imagen en tiempo y forma correctos y se obtiene una salida de video compuesta sin mayores inconvenientes.

De ésta forma se haría de manera modular el trabajo y se podría ir avanzando con bloques definidos, logrando porciones de éxitos para luego sumarlos todos en el resultado final.

El encargado de generar el raster debe trabajar,  según mi experiencia,  a 20 Mhz. y debiera programarse en ASM ya que el manejo de los tiempos es fundamental para lograr las formas de onda correctas.
A 20 Mhz. tendremos instrucciones a cada 0,2 microsegundos, valor exacto para generar correctamente los anchos de los impulsos de sincronismo + los pedestales ( ó pórticos ) .
Con menor frecuencia de clock, también se puede lograr un raster,  pero no se podría lograr un impulso de sincronismo horizontal exacto de 4,8 microsegundos como determinan las normas.
Tampoco se lograrían los tiempos correctos de los impulsos de pre-ecualización vertical, de sincronismo vertical y de post-ecualización vertical …. y la lista sigue.

Por otro lado, les cuento que todo esto viene ya hecho.
Busquen el datasheet  del SAA1101 que es un  generador universal de sincronismos ( Universal Sync Generator) (USG) y él podría ser el encargado de generar el raster que se necesita sin más que conectarle un cristal apropiado para la base de tiempos y un selector de NORMA y SISTEMA, para ya empezar a trabajar directamente con SISTEMA de color a pesar de comenzar generando elementales imágenes en B y N.
El SAA1101 es capáz de generar la señal completa de los sistemas más populares (NTSC, PAL y SECAM ), por lo que sólo deberán seleccionar el que quieran y saldrá a su salida de video compuesto, el raster correspondiente a ésa NORMA y SISTEMA.

Supieron haber otros IC’s que servían para ésta función que ahora no recuerdo. Entre ellos estaba el LM1882 que creo ya está discontinuado, pero tal vez aún se consiga.
 
Habría que buscar en Google un poco y ver que hay en la actualidad respecto a éstos IC.

Una vez que se tiene el raster generado, se le agrega la señal de video utilizando los impulsos de sincronismo horizontal como disparo para colocar en tiempo y forma la imagen sobre cada línea horizontal y así obtener el cuadro con imagen.

De cualquiera de las tres formas se puede lograr.
Una es sacrificada y posible; otra ya viene hecha, sólo hay que comprarla y experimentarla; y la última es hacer algo sencillo y fácil sacado de páginas populares, con resultados inciertos ó que a la hora de usarlo para nuestro fin, descubramos con tristeza que no nos servirá para lo que estamos armando.

Mi voto es por un IC generador de sincronismos + PIC que maneje gráficos.

Es una opinión, claro.

Saludos !

Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Julio de 2008, 01:48:59
Magistral!!!
es más si no tengo uno de esos en el desguase de integrados..pega en el palo!!
creo que no debe ser dificil de conseguir ese IC Mario.
La etapa sumadora pueden ser unas R, o un operacional o un tr ¿que será lo más conveniente?
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 11 de Julio de 2008, 08:17:42
Hola Mario!

Muy clarificadores tus mails!

Me sumo entonces a la opinion del SAA1101 (http://www.datasheetcatalog.org/datasheet/philips/SAA1101.pdf) + el PIC para la generacion de la imagen. Sacarse de encima el "compromiso" de tener que generar esos pulsos tan exactos será un placer!

Se me ocurre que todos los TV nuevos deben tener un super-mega-integrado que hace todo...y que el SAA1101 (http://www.datasheetcatalog.org/datasheet/philips/SAA1101.pdf) debe ser de los TV "viejitos". ¿Se lo conseguirá todavia en los comercios?

Un abrazo!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 11 de Julio de 2008, 09:16:25
Hola oligarcas desestabilizadores amigos !  :-)

Ése IC no tengo idea si será sencillo encontrarlo ya que no viene en los TV, Ariel.

En la señal de TV que recepcionamos viene todo el conjunto de sincronismos e imágenes sumados y se utilizan en los aparatos, otros IC que tienen por función "separar" los impulsos correspondientes a los sincronismos horizontal y vertical del resto de la señal compuesta de video (de allí su nombre "compuesta"; viene todo junto y hay que separar cada señal para cada uso en particular dentro del receptor)

Ése IC (u otro USG cualquiera) no vienen en los TV ya que tienen por función "crear" las bases de tiempo de la señal, mientras que los de los receptores de TV traen ICs que son para "separar" y "aprovechar" ésas señales originadas en los canales generadores de la transmisión.

En Argentina habría que buscar por el lado de GM Electrónica, ELKO, ó alguna de ésas casas grandes de BA.

Respecto a la etapa sumadora Claudio, yo creo que con un simple sumador resistivo ó con un operacional ó un par de transistores, daría lo mismo. No es un circuito complejo ése. Llegado el momento buscaría algunos que tengo por aquí y los subiría si es necesario.

Saludos, abrazos, besos, cariños .... (hoy me levanté querendón ...)
Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 11 de Julio de 2008, 09:20:55
Hola oligarcas desestabilizadores amigos !  :-)
Sonamos...sobredosis de discursos K. Mirate dos capitulos de "Mr.Bean" y quedas como nuevo!

Ése IC no tengo idea si será sencillo encontrarlo ya que no viene en los TV, Ariel.

Claro! Que gil! Es la funcion "opuesta", no lo voy a encontrar en un tele! (ya habia revuelto un par de cajas de placas de TVs viejos, y nada....ja ja ja ja)

Voy a ir buscando en las casas que mencionas.

Un abrazo!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 11 de Julio de 2008, 09:25:53
Ariel, ¿no habrá ningún integrado para generar imagen de TV en tu viejo Commodore 64 despiezado?
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 11 de Julio de 2008, 09:36:00
Hola Manolo!
El SID5767 o algo asi es el encargado de eso en la C64, si señor!
Anoche lei sobre ello "de pasadita", elogiaban la desicion de Tramiel de separar del micro las funciones de generar video y sonido, y lo nombraban.

Pero (me encantan los "peros" :) ) está visto que cada vez es más dificil conseguir esas maquinas, y si se puediese hacer mas o menos lo mismo con un integrado "comun", seria mejor. De todos modos, no es en absoluto mala idea.  :mrgreen:

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 11 de Julio de 2008, 10:55:02
Ariel, ¿no habrá ningún integrado para generar imagen de TV en tu viejo Commodore 64 despiezado?

Hola Manolo !

Otra salida fácil, rápida y ya para comenzar a experimentar con los gráficos (que puede ser lo más complejo y extenso en el tiempo), es la utilización de cualquier videojuego de estilo Family Game, Sega Génesis, etc.

En los Family Game habría que buscar con el osciloscopio hasta encontrar en uno de los pines de los IC principales, la salida de sincronismo compuesto (sin imagen), mientras que en los Sega Genesis hay que trabajar sobre el MC1377 al que le llegan los componentes de los tres colores (R, G y B) y por otro lado le llega el sincronismo compuesto. Ésa última señal habría que identificar (no tengo el pinout del MC1377 a mano) para "rescatar" y utilizar.

Mencioné éstos juegos por traer algunos ejemplos, pero se puede usar hasta un DVD player en desuso para ésta función. Todos tienen un generador de señal implícito al que luego le suman imágen. Lo único "difícil", es manejar el osciloscopio hasta encontrar la señal deseada.

Ésa sería otra de las formas fáciles de empezar. Con mitad del trabajo ya funcionando.
Si los logros en materia de gráficos son auspiciosos, se continúa con el resto y se encamina el diseño final de ésta etapa.
Es lo que hablaba antes de la construcción modular, aprovechando en nuestro beneficio lo que ya está hecho.

Salutes !
Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: Geo en 11 de Julio de 2008, 11:14:28
Vaya, a ver si es posible seguirles el paso, muy buenos los comentarios :). Antes solo he trabajado con una señal VGA con FPGA, veamos como va esto ;).
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Julio de 2008, 14:15:55
Bueno si no se encuentra el ic adecuado o estos llegaran a ser muy caros se puede utilizar un pic bien programado y listo, como dijo mario puede ser un 16f84 a 20 MHz y listo.
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 11 de Julio de 2008, 14:41:44
Bueno si no se encuentra el ic adecuado o estos llegaran a ser muy caros se puede utilizar un pic bien programado y listo, como dijo mario puede ser un 16f84 a 20 MHz y listo.

Si, por supuesto.
Aunque en ASM, para mi, es imposible. Ahi va a hacer falta las neuronas de los especialistas en ASM...;)

Mario debe tener algun apunte con los tiempos EXACTOS que se requieren....
Y quizas convenga un micro mas "modernoso y barato" que el 16F84....Un 12F675 puede funcionar a 20MHz, y cuesta la mitad. Y ocupa la mitad de espacio en la placa. ¿que te parece?
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Julio de 2008, 14:57:18
Me parece genial, por lo del asembler no te preocupes que el programa en sí no debe ser ningún cuco, hace algún tiempo estuve viendo la página del 18f84 que genera el reloj para la pantalla y el programa no es gran cosa.
 Aparte no sé programar en otra cosa  :mrgreen:
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 11 de Julio de 2008, 18:26:54
Lamento no haber podido meter la cuchara estos días, he estado muy ocupado.

Bueno,lo primero agradecer la participación de Marioguillote, sus aportes en el tema video son excelentes y nos ilustran y orientan mucho.
En cuanto a la idea de usar un integrado para la generación de video la encuentro muy buena, pero hay dos cosas que me gustaría decir al respecto.
La primera es que al menos en donde estoy viviendo, la única forma de encontrar un chip que genere el video, sería justamente como ya han comentado encontrarlo en algún cacharro viejo, porque en las tiendas de electrónica no hay nada.
Lo segundo, es que me gusta mucho la idea de hacer un generador de señales de sincronismo con un PIC, podría ser alguno de los citados o un 16f628 que también alcanza los 20 Mhz sin problemas, es más barato que el 16F84 y además es compatible pin a pin con este último,(por si alguien solo consigue el 84 y quiere utilizarlo). Bastaría con crear un hex y se convertiría en nuestro propio SID5767  :D :D :D
Me encantaría que Mario nos consiguiera los tiempos y forma de onda exactos de una señal de sincronismo y yo me animo ha hacer el programa en assembler, obviamente dejaría el código abierto para futuras modificaciones.-
Creo que serviría para muchos proyectos.

Salud  8)

Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 11 de Julio de 2008, 18:31:56
Me encantaría que Mario nos consiguiera los tiempos y forma de onda exactos de una señal de sincronismo y yo me animo ha hacer el programa en assembler, obviamente dejaría el código abierto para futuras modificaciones.-

Clap Clap Clap! :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: valdorre en 11 de Julio de 2008, 19:00:20
hola amigos, bueno no he tenido tiempo de leer todo el hilo, y pido disculpas si ya fue sugerido, pero yo arme en un momento un restaurador de señal de video (decodificador) que la funcion que tiene es recomponer la señal (pulsos de horizontal, insertar el bursh y los pulsos de ecualizacion) a partir del sincronismo vertical, a lo mejor les sirve para sacar rutinas para el generador. si les interesa me avisan y subo el .asm

saludos
Osvaldo
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 11 de Julio de 2008, 19:11:01
Hola Valdorre.

Todo aporte es bienvenido, asique a subirlo nomás..... :)

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: valdorre en 11 de Julio de 2008, 19:12:45
hola otra vez, aca les dejo un generador de video que baje de la red hace un tiempo, esta bien explicado, espero que sirva
http://rapidshare.com/files/128993338/video_generador_pic.zip

Saludos

Osvaldo
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 11 de Julio de 2008, 19:17:02
Tiene Mucha ingformación, buenísimo el aporte.....

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Julio de 2008, 19:36:27
Bué recién vuelvo del centro y me compré dos 12f675 por las dudas y como para ir cacharreando, son baratos salen 5,90 pesos argentinos. :mrgreen: :mrgreen:
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 11 de Julio de 2008, 19:41:29
Hola flaco!
Yo tambien los he "adoptado". Siempre tengo alguno a mano. ;)

Valdorre: Bienvenido al "club"! Esta noche voy a mirar el archivo que adjuntaste. Seguro que va a venir bien! :)

Entre todos vamos a crear algo util e interesante.

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: valdorre en 11 de Julio de 2008, 20:45:50
hola gente acá les dejo la dirección http://www.pablin.com.ar/electron/proyecto/decoder/digiman.zip  de donde pueden bajar el archivo del restaurador de video, tiene una cuantas cosas bien explicadas que a lo mejor les sirve...

saludos a todos
Osvaldo
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 11 de Julio de 2008, 22:07:54
Totalmente de acuerdo con respecto a usar un pic pequeño para generar la imagen. Obligados a programarlo en asm. No lo manejo a la perfeccion, pero algo atino y puedo cooperar.
Eso si... tengo una duda existencial... cuando ya tengamos algo mas o menos armado, q haga uno q otro "dibujo" en la tele... se supone q este pequeño pic solamente va a dibujar la imagen... la pregunta es: en q "formato" la recibe? osea, cómo se yo lo q tengo q dibujar?
Ya se q va a venir de otro controlador mas grande... pero habria q quedar de acuerdo en un protocolo o algo por el estilo. Alguna idea con esto?

hola otra vez, aca les dejo un generador de video que baje de la red hace un tiempo, esta bien explicado, espero que sirva
http://rapidshare.com/files/128993338/video_generador_pic.zip

Saludos

Osvaldo

Excelente aporte valdorre!!! ya me voy a poner con una taza de cafe gigante a digerir todo esto jeje. Saludos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 11 de Julio de 2008, 23:56:34
tengo una duda existencial... cuando ya tengamos algo mas o menos armado, q haga uno q otro "dibujo" en la tele... se supone q este pequeño pic solamente va a dibujar la imagen... la pregunta es: en q "formato" la recibe? osea, cómo se yo lo q tengo q dibujar?

Vamos por parte dijo Jack el destripador....

   Yo veo que esto hay dos formas de atacarlo, la primera es como sugiere Marioguillote, hacer un generador de sincronismos, ya sea con un pic o con un integrado especializado, y a los sincronismos generados por este integrado sumarle la imagen (basta con sumar con un A.O. las dos señales, es más hasta podría lograrse con algunas resistencia), para ello deberían coordinarse el generador de sincronismos con la CPU del juego de manera que esta última agrege los pixeles en el momento que el primero le indique que es el momento, a esta forma yo le veo un inconveniente bastante grande y es que la CPU debe interrumpir su trabajo para añadir la imagen a los pulsos de sincronismos de video.

   La segunda me parece más práctica, aunque implica mayor trabajo para el PIC generador de sincronismos, sería que la CPU carge los pixeles en una memoria auxiliar, en el momento que más le convenga, y el generador de sicronismos además de hacer el trabajo que le da nombre, leerá esta memoria y añadira a la señal de video los pixeles en donde corresponde.

   De esta manera el PIC que maneja video, leerá lo que haya escrito la CPU y lo mostrará en pantalla sin tener que forzar a esta última a refrescar la imagen en cada cuadro, si la memoria no ha sufrido cambios se volverá a mostrar la misma imagen, y si la CPU cambió algo en la memoria, el chip de video mostrará el cambio, por otro lado también permitirá que la CPU cambie tan solo un bit de la imágen o la imagen completa, sin forzarla en cada cuadro a tener que refrescar.

Espero sus opiniones.
Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 12 de Julio de 2008, 00:09:30
Hola Osvaldo, Gera !
Saludos a todos los que no saludé aún !

Más para leer (No me odien  :D )

 National Television Systems Comittee (http://www.sxlist.com/TECHREF/io/video/ntsc.htm)

 TV Synchronisation (http://graffiti.virgin.net/ljmayes.mal/var/tvsync.htm)

 Basic Characteristics (http://www.kolumbus.fi/pami1/video/pal_ntsc.html)

En ésas tres páginas está todo lo que hay que saber de tiempos para crear una señal de sincronismo compuesto de TV.
Dado que hay mucho número nuevo en ésas páginas, les cuento que "lo importante" al momento de definir la temporización a crear sería:

- La duración de la línea completa
- del pórtico anterior
- del impulso de sincronismo horizontal propiamente dicho
- del pórtico posterior

Teniendo bien claros éstos tiempos, el resto sale sólo. Otro punto importante es la 1/2 línea, la que se usará para crear los impulsos de vertical, la cual sale de los enumerados arriba.

Eso si... tengo una duda existencial... cuando ya tengamos algo mas o menos armado, q haga uno q otro "dibujo" en la tele... se supone q este pequeño pic solamente va a dibujar la imagen... la pregunta es: en q "formato" la recibe? osea, cómo se yo lo q tengo q dibujar?
Ya se q va a venir de otro controlador mas grande... pero habria q quedar de acuerdo en un protocolo o algo por el estilo. Alguna idea con esto?

Imaginate que tenés un jamón entero y lo cortás en 500 "fetas" ...
Cuando se arme la señal de sincronismo compuesto, se colocará dentro de cada línea, una feta de ése jamón en forma apropiada e intercalada cómo podrás leer en las referencias que propongo; y de ésa forma se juntan todas las "fetas" en la imagen recuperada del jamón.
Es decir, el gran reto aquí es ése.
Manipular el mapa de bits que es una imagen, fraccionarla, colocarla en cada línea y obtener la imagen original bien armadita nuevamente.

Respecto a ésta primera etapa, la de armar la señal de sincronismo compuesto, sólo te dará una imagen negra "enclavada" en frecuencia horizontal y vertical de un TV comercial.
Luego se sumará la imagen línea a línea.

Saludos a todos !
Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 12 de Julio de 2008, 00:27:37
Hola Pollo !

De esta manera el PIC que maneja video, leerá lo que haya escrito la CPU y lo mostrará en pantalla sin tener que forzar a esta última a refrescar la imagen en cada cuadro, si la memoria no ha sufrido cambios se volverá a mostrar la misma imagen, y si la CPU cambió algo en la memoria, el chip de video mostrará el cambio, por otro lado también permitirá que la CPU cambie tan solo un bit de la imágen o la imagen completa, sin forzarla en cada cuadro a tener que refrescar.

Ése concepto parece muy bueno, pero determina que se deba guardar y comparar dos imágenes entre sí (las dos últimas), desaprovechando mucha memoria y el PIC debiera leerla igualmente a toda la memoria para saber cuál pixel ha cambiado y cuál no.

Hay que tener en cuenta que cada imagen completa posee 525 líneas en NTSC, de las cuales sólo 503 son las "visibles", sumado ésto a los tiempos "muertos" que brindan los impulsos de sincronismo, se pueden lograr tiempos muy útiles de refresco de memoria.
Por ejemplo, un sólo pulso de sincronismo horizontal, dura 4,7 a 4,8 microsegundos y si tenemos en cuenta que los tiempos de acceso a una RAM son de pocos nanosegundos, imagínense la cantidad de información que puede refrescarse en la sumatoria de tiempos "no mostrados" de la señal !

Por eso el PIC principal nunca estaría detenido sino que estaría aprovechando el tiempo que no usa, en refrescar la RAM para luego durante la línea leerla y mostrarla en tiempo real.

Espero que se haya entendido lo que quise expresar.

Saludos !
Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 12 de Julio de 2008, 00:57:31
De esta manera el PIC que maneja video, leerá lo que haya escrito la CPU y lo mostrará en pantalla sin tener que forzar a esta última a refrescar la imagen en cada cuadro, si la memoria no ha sufrido cambios se volverá a mostrar la misma imagen, y si la CPU cambió algo en la memoria, el chip de video mostrará el cambio, por otro lado también permitirá que la CPU cambie tan solo un bit de la imágen o la imagen completa, sin forzarla en cada cuadro a tener que refrescar.

Espero sus opiniones.
Salud  8)

Bien, a eso me referia. Pero todavia predomina una duda: La memoria q sera leida por el pic de video, tiene escrita la informacion tal cual el pic la tiene q escribir? Porq de ser asi, el pic principal (el q contiene el juego) tendria q generar dicha imagen, y consumir ciclos q quizas sean necesarios para procesar el juego.
Yo tenia en mente algo como: el pic principal llama a las funciones (pixel y linea, suponiendo un pong) que generan una matriz, le envia la matriz al pic de video, y el pic de video procede a transformar dicha matriz a formato video, y mostrarlo en el tele.
Estan de acuerdo? o estoy "razonando fuera del recipiente"? (dirian les luthiers)
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 12 de Julio de 2008, 00:59:57

Hola Mario.

Me queda claro el tema de los tiempos, lo que no entiendo es esta frase, que subrayo,

Ése concepto parece muy bueno, pero determina que se deba guardar y comparar dos imágenes entre sí (las dos últimas), desaprovechando mucha memoria y el PIC debiera leerla igualmente a toda la memoria para saber cuál pixel ha cambiado y cuál no.

El tema es que no creo necesario comparar imágenes, de hecho la idea es que justamente durante los tiempos muertos del sincronismo horizontal, el pic lea los pixeles correspondientes a la próxima línea, y por el momento como trabajaremos solo en blanco y negro y con pixeles encendidos y apagados, y más aún con solo 128 pixeles por línea, bastará con que el pic lea de la memoria 16 bytes, en los que estará la información de los 128 bits a mostrar. Lo que exista en ese momento se mostrará en pantalla, sin importar si hubo cambios, a lo más lo que se puede hacer para evitar que existan cambios entre dos campos, es limitar la escritura a la memoria solo a una vez entre cuadro y cuadro.

Por eso no entiendo el tema de la comparación de imágenes.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 12 de Julio de 2008, 09:09:30
Porque la frase que te cito Mario, decis que el pic encargado del video, solo actualizará los pixeles a mostrar que son nuevo.

A mi me parece que lo que quisiste decir es que, el pic maestro, solo le enviará a las nuevas pociciones de memoria, los pixeles que se modificaron entre un cuadro y otro.

O aquí puede ser que a lo que se refiere Mario, es que el pic maestro deberá hacer comparaciones de los pixeles que cambiaron, consumiendo tiempo que se necesitará para otra cosa.

También hay que considerar un tema muy importante en el pic encargado del video, y es que necesita un tiempo para que el pic maestro, le pase la información necesaria.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 12 de Julio de 2008, 09:10:16
Bien, a eso me referia. Pero todavia predomina una duda: La memoria q sera leida por el pic de video, tiene escrita la informacion tal cual el pic la tiene q escribir? Porq de ser asi, el pic principal (el q contiene el juego) tendria q generar dicha imagen, y consumir ciclos q quizas sean necesarios para procesar el juego.
Yo tenia en mente algo como: el pic principal llama a las funciones (pixel y linea, suponiendo un pong) que generan una matriz, le envia la matriz al pic de video, y el pic de video procede a transformar dicha matriz a formato video, y mostrarlo en el tele.
Estan de acuerdo? o estoy "razonando fuera del recipiente"? (dirian les luthiers)

Hola Gera, ¿cómo estas amigo?

   Aclaremos un par de conceptos, lo primero es que si implementamos una especie de lenguaje para nuestra maquinita de juegos, al programador le bastará con escribir algo así como "line (15,20) to (80,42)" y la CPU del juego se encargará de hacer todo lo demás, pero indiscutiblemente alguien tiene que interpretar ese comando y convertirlo en los pixeles de la imagen. El Pic más pequeñito, el que genera la imagen, ya está trabajando casi al límite de se capacidad, imaginate que tiene que procesar alrededor de 525 líneas con cerca de 648 pixeles cada una y repetir este proceso 30 veces por segundo, usando la calculadora verás que esto lo deja en el límite de su capacidad.

   Por otro lado, en cualquier máquina de juegos, el mayor consumo de recursos está en la parte de video, a eso se dedica justamente, pensemos como ejemplo el caso del pong, procesar el juego como tu dices implica leer el joystick y si el jugador presionó el boton abajo, mover la imagen de la paleta del jugador, y mover permanentemente el dibujo de la pelotita, por ende, ese es justamente el trabajo de la CPU en una máquina de juegos.

   Finalmente, imaginemos que computadores que trabajaban a 1,2,3 y 4 Mhz lo lograban con aceptable calidad (y lo hacían casi todo), y con apenas 16, 48 o 64 KB de ram, asique creo que nuestros microcontroladores (y nuestro ingenio) podremos lograrlo nosotros también.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 12 de Julio de 2008, 09:18:22
Hola Leon.

Justamente, la idea es que el PIC maestro escriba solo la información que tenga que cambiar.
Por otro lado, ya dijimos que aqui no habría paso de información entre pic y pic, porque eso obligaría al pic maestro a a tener que detener su marcha para darle al pic de video la información que necesita en cada línea.
La idea, como ya mencioné, y como lo sugirió Ariel, es que el PIC maestro escriba en una RAM los pixeles, solo una vez entre cuadro y cuadro, para el sistema N, que es el que queremos implementar, equivaldría a hacerlo 30 veces por segundo (lo que liberaría al PIC maestro de tener que trabajar de más).

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 12 de Julio de 2008, 09:23:56
Hola gente: Por si sirve de algo anoche empecé a escribir el código del sincronismo del 12F675, creo si no me surje algo del laburo esta tarde lo termino.
digo por si sirve de algo ya que en una de esas se pueden hacer los sincronismos con algún integradito especializado en ello, aunque ya con el precio del 12f675
creo que no se conseguirá nada más barato, salvo ya cuando se quiera generar color y demases.
por ahora lo único que realiza este micro es el sincro pero se puede estudiar lo demás
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 12 de Julio de 2008, 09:38:10
Fantástico Flaco.... :-)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 12 de Julio de 2008, 09:53:18
Tenés razón SavageChicken, me había olvidado de ese tema. De todas maneras, habrá que diseñar o utilizar un protocolo que cuando un pic está leyendo o escribiendo en la RAM, el otro no esté tratando de acceder a la RAM.

Me parece que el protocolo debería ser así:

. Prioridad al PIC VIDEO
. El PIC VIDEO (2) debería tomar un puñado de info de la RAM y guardarlo en la interna (buffer), yo diría que una línea o dos.
. El PIC MAESTRO (1) guardará información o actualizará la RAM ni bien el PIC VIDEO liberó la RAM, de esta forma nos aseguramos que el PIC MAESTRO tiene menos de dos líneas para actualizar la RAM, digamos que unos 124uS (60uS si e buffer es de una linea)
      . Acá pueden pasar dos cosas, el PIC 1 se encuentra que la RAM está liberada, pero no sabe en que tiempo, deberá esperar al que el PIC 2 lea y deje libre la RAM
      . Acaba de ser liberada la RAM, actualizar datos por un tiempo máximo de 124uS (60uS si el buffer es de una línea)

No recuerdo los tiempo de acceso a la RAM, pero debemos asegurarnos que el PIC 1, sea capaz de actualizar como mínimo, 2 líneas en el tiempo que que el PIC 2 muestre los datos a la TV.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 12 de Julio de 2008, 10:15:27
En un principio pense que podíamos hacer cambio entre línea y linea, pero en realidad debe ser entre cuadro y cuadro, para que la imagen se dibuje completa en ese tiempo sin que el PIC maestro haga cambios en el contenido.
Por lo tanto tenemos mucho más tiempo, ya que el permiso sería dado en el tiempo del sincronismo vertical, que dura el equivalente a 6 líneas completas de video (si mal no recuerdo), en ese momento el pic esclavo debería avisarle al maestro que puede escribir la memoria de video.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 12 de Julio de 2008, 10:32:11
Hola amigos!
que bien va esto!!!!!!!!!!!

El flaco ya escribiendo codigo, Mario aportando los casi 80 años de experiencia reunida en su trabajo, Valdorre, Leon, Savagechiken, Gera, y hasta Manolo metidos en este proyecto!

Respecto al tema de la memoria "de video" (vamos a tener que empezar a buscar un nombre para cada parte, para que sea mas facil nombrarlas!! :) ), definiendo algunos pines de cada PIC como "Enable" creo que lo tenemos resuelto....no es tan dificil el sincronizar los accesos entre ellos.

Si tenemos las señales del PIC enano correctamente implementadas, deberiamos hacer que uno de los pines que le quedan libres se ponga en "1" cuando comienza el despliegue de la linea, del cuadro o lo que mas convenga, para que el otro PIc sepa que puede enviar datos a la memoria.....

Todavia es un rompezabezas infernal de partes, pero se me ocurre que estamos cerca de encontrar una solucion, y luego...a implementarla!

Un par de imagenes de la C64, a 16 colores en 320 puntos por 200...pueden servir para imaginar a donde podemos llegar:

(http://www.zee-3.com/pickfordbros/archive/images/street_64.gif)

(http://www.zee-3.com/pickfordbros/archive/images/ste_loading_screens_512.jpg)
(ampliar a 1280 de ancho (http://www.zee-3.com/pickfordbros/archive/images/ste_loading_screens_1280.zip))

Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 12 de Julio de 2008, 11:27:41
SavageChicken, me parece perfecto. Así tendríamos 384uS para grabar todo un cuadro en la memoria RAM. Si surge un problema, el PIC VIDEO, solo deberá repetir el cuadro anterior y listo. No se notaría la diferencia. Un cuadro completo dura 33600uS en NTCS . El ojo humano, no es capaz de detectarlo.

Se me ocurre que el PIC VIDEO debería tener un pin para que, como dijo Ariel, el PIC VIDEO sepa si se logró con éxito la actualización de la RAM. En caso de que no se alla completado la actualización, el PIC VIDEO deberá repetir el cuadro anterior en su buffer.

¡Qué lindas imágenes! Me encantaría poder llegar a esto.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 12 de Julio de 2008, 14:10:38
Hola gente: esto se va poniendo lindo, porque se van definiendo cosas, por empezar el código ya está casi listo, esto es porque es bastante simple hecho con un par de subrutinas, el resto es afinar los tiempos de sincronismo y queda listo.
estos tiempos están hechos con rutinas de delay de 1uS y luego ajustados con algunos NOP para las fracciones, el tema es que me faltó contar los tiempos que consumen los saltos y las instrucciones que inicializan los contadores.

Otra cosa: como ya me lo venía venir  :D hay dos pines que van al MASTER y que indican con un pulso en alto cuando empieza cada cuadro y cuando comienza cada línea horizontal, calculo que no hará falta más ya que no tengo más pines  :D, sinó hacer alguna combinación binaria con estos dos pines para indicar que es el cuadro par o el impar, aunque creo que no hará falta.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 12 de Julio de 2008, 14:26:35
Que bien flacoclau. Esperamos ansiosos el programa.  :-/ :-/ :-/ :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 12 de Julio de 2008, 14:27:54
Hola gente: esto se va poniendo lindo, porque se van definiendo cosas, por empezar el código ya está casi listo, esto es porque es bastante simple hecho con un par de subrutinas, el resto es afinar los tiempos de sincronismo y queda listo.

Excelente!!!!
Cuando postees el código voy a intentar comprenderlo, va a ser mi debut con el ASM :)

Otra cosa: como ya me lo venía venir  :D hay dos pines que van al MASTER y que indican con un pulso en alto cuando empieza cada cuadro y cuando comienza cada línea horizontal, calculo que no hará falta más ya que no tengo más pines  :D, sinó hacer alguna convinación binaria con estos dos pines para indicar que es el cuadro par o el impar, aunque creo que no hará falta.

Creo que con esos dos pines estamos bien. En el remoto caso que no sean suficientes, los combinamos. Pero dudo que haga falta más!!!!

Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 12 de Julio de 2008, 16:08:14
Hola a todos! Esto ya va tomando forma. Y creo q todas mis dudas han sido resueltas. Por lo tanto, resumiendo y proponiendo un poco:
Lo que se va a hacer aqui, es un modulo completo de video (placa de video digamos). El cual consta de:

Por lo tanto el pic maestro ("la consola"), solamente se limitaria a enviarle instrucciones simples al "generador de imagen", y asi ahorrando recursos. El "generador de imagen" seria el encargado de mantener el buffer lleno, ya sea con una imagen nueva q llega desde la consola, o manteniendo la ultima imagen cargada. Y el generador de sincronismos, tan solo tiene q leer el buffer y escribirlo en la pantalla.
El "generador de imagen" podria estar comunicado con el "generador de sincronismos" para avisarle cuando el buffer esta listo y puede proceder a leerlo... salvo q esten perfectamente sincronizados...

Les parece esta idea? Quizas no esten de acuerdo con el controlador intermedio... pero es lo unico q se me ocurre para solucionar el problema de quien se encarga de generar la señal de video, ya tanto la consola como el generador de sincronismos, estan muy ocupados.

Saludos!!!

EDIT: aca una imagen de lo q tengo en mente

(http://img172.imageshack.us/img172/4702/poneleca2.png)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 12 de Julio de 2008, 17:32:02
Hola acá les dejo el ASM, falta ajustar bien los tiempos, digamos que tengo que ponerme con la calculadora a sumar o quitar  NOP en varias partes.
creo que está mas o menos explicado pero se puede hacer un resumen.

lo que pasa es que hay que estudiar las señales de sincronismo para entenderlo, pero digamos que empieza con el ciclo de preecualización del sincronismo vertical, que son 6 pulsos, luego las señales de sincronismo vertical propiamente, también 6 y luego las señales de postecualización también 6.

el registro contador_ver se encarga de contar los 6 pulsos de cada una de estas señales.

contador_lineas cuenta cada línea horizontal que son 262, pero el contador solo cuenta 252 ya que se utilizaron entre 9 y 10 en el sincronismo vertical.

contador_delay se utiliza en el bucle de retardo.

impar es un flag bit que está en el registro flags.

luego del sincronismo vertical se consulta si el campo es par o impar, ya que si es par se le debe sumar media línea de horizontal, en tiempo al principio del campo, si es impar salta directamente a la rutina de sincronismo horizontal y luego al tiempo de muestra de la imagen que son aproximadamente 52 uSeg,

ah me olvidaba de los pines gpio0 y gpio1 son los pines con los pulsos de referencia que van hacia el microcontrolador principal o de video.

luego de este tiempo se repite el bucle otras 251 veces más , ya de allí se consulta si es el final del campo impar, si es así se le suma la otra media línea que falta y se completa el ciclo.

y como dice Ariel: provisoria, ampliable y cuestionable  :D :D :D :D
recibo sugerencias...


Edito: lo vuelvo a subir, ya que le corregí un par de errores de sintaxis
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 12 de Julio de 2008, 20:22:57
Que bien flaco, en cuanto me hago un ratito, lo simulo en el mplab y ahí saco con una exactitud de 100% los retardos. Lo complicado va hacer cuando se monte porque los componentes, tienen una tolerancia. Hay veremos si la tolerancia, nos afecta.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 12 de Julio de 2008, 21:04:18
ok dale!!   :-/ :-/ :-/ :-/ :-/ :-/
Con lo de los componentes no te hagas drama ya que los TV´s tienen su tolerancia tambien.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 13 de Julio de 2008, 18:47:03
Hola Flaco, estube simulando el soft pero las temporizaciones no concuerdan, de echo ni se le hacerca a mas de una. Antes de decir que está mal, me gustaría que por favor, me confirmes dónde empieza cada rutina de temporización, porque en el programa, hay una o dos (no me acuerdo ahora) que una temporización, utiliza otra para completar el tiempo deseado, una es el tiempo de 29,4uS, que llega a 25 y monedas (no recuerdo bien, porque en la PC que estaba trabajando me quedé sin baterías y ahora no la puedo usar hasta conseguir un enchufe  :mrgreen:)

La rutina delay_x1uS, dura mas de 18uS. Son tiempo que están lejos y me da a pensar que yo estoy calculando los tiempos mal. Ya chequee que tubiera bien la frecuencia en 20Mhz.

Cuando mido los tiempos los hago desde el call corrspondiente hasta el return o desde que empieza a cargar el valor a una pocición de memoria hasta la siguiente línea del último decfsz.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 13 de Julio de 2008, 19:36:26
si está un poco complicado el asunto, el tema está en que esa rutina de delay la hice medio al tuntún, por otro lado hay que ver que el delay de algunas partes hay que sumarle las demás rutinas, la otra ya que el programita es bien corto es hacerlo más lineal ya que nos sobra memoria, dejame que lo estudie un rato y te digo las cosas con más exactitud.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 13 de Julio de 2008, 23:40:04
No flaco, me mal interpretaste, no digo que esté mal el programa, solo quiero que me indiques bien en dónde empieza cada delay y termina. Si hay que modificar algo, lo hago yo con el mplab.

Tengo miedo de modificar ahora y hacer macana por mal interpretar el programa. Además, está bastante entendible. He visto otros programas de otros usuarios y me pierdo ni bien emiezo  :mrgreen:
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 14 de Julio de 2008, 13:32:02
mmmmm  a ver, fijate este documento que te paso, vamos avanzando,
el programa comienza a dibujar el sincronismo en lo que el gráfico es OE1, osea es I, M, N.
los tiempos de esos pulsos están ampliados en el mismo dibujo, abajo.
que serían P, (H/2)-P , Q y R.
donde H es lo que dura cada línea horizontal. osea unos 64 uS ó 63,5555 uS según el documento.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 14 de Julio de 2008, 13:42:24
luego de estos pulso de ecualización, sincro vertical y post ecualización, si es campo impar le toca el primer pulso de sincro horizontal y si es campo par pasa media línea hasta que llegue el primer pulso de horizontal, estamos hablando de lo que sería al final de n y comienzo de la línea 10.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 14 de Julio de 2008, 18:11:00
Perfecto. Mañana le meto mano al software. SI es necesario actualizar algo del programa, lo hago y lo subo para ser estudiado de nuevo, para así garantizar que esta parte ande bien.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 14 de Julio de 2008, 20:39:39
genial!!
Hoy fuera de casa tuve un buen rato libre y me puse a dibujar las formas de onda, la verdad es que la compliqué un poquito en la parte del sincronismo horizontal, mas tarde si puedo las dibujo con algún programita y las subo para que quede más claro el asunto.
otra cosa, ayer implementé el circuitito con el 12f675 y me dá una pantalla negra pero con unas rayas tenues (gris oscuro) oblicuas, calculo que eso debe ser que sincroniza mal.  :(
seguimos en marcha.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 15 de Julio de 2008, 01:15:53
A no desesperar, que ya tengo casi listo el assembler para el sincronismo y me está quedando impecable.... Ya lo van a ver
Mañana lo subo... un abrazo.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 15 de Julio de 2008, 01:22:36
Ah!! bue!!!  :-/ :-/ :-/ :-/
yo estoy haciendo el dibujo de los pulso para león pero se vé que te adelantaste!!  :-/ :-/ :-/ :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 15 de Julio de 2008, 02:24:19
Aquí les dejo el dibujito..
Título: Re: Generador de imagenes de video con PIC
Publicado por: Picolson en 15 de Julio de 2008, 04:34:11
He visto que con un PIC se puede generar una imagen al televisor. No se mucho de pic pero, ¿pueden hacer un tutorial de cómo hacerlo para que los demás aprendan? Si es muy trabajoso olvida la pregunta. Siento mucha curiosidad.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 15 de Julio de 2008, 08:30:02
Flaco, justamente así me está quedando el sincronismo.

Picolson, Bienvenido al mundo de los PIC, te adelanto que el archivo assembler, esta bien explicado, asique va a quedar casi tutorial dentro del archivo  :D :D

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 15 de Julio de 2008, 13:17:47
Bueno, he toqueteado el programa del flaco. Solo modifiqué las temporizaciones porque aún no entiendo bien los pasos que hay que seguir para generar video.

Hay unos pasos que hace el pic que no se para que están. Me tengo que estudiar bien la compocición de video. (No entiendo para que está la temporización de 1uS, porque en los archivos que subió el flaco, no están. Tiene algo que ver con el sincronizmo horizontal, por lo que entendí)

Subo el proyecto del Mplab 7.6 y en el otro archivo, el asm solo.

Flaco, el programa está muy bien, prácticamente no hay pasos de más. En todo un ciclo completo, el pc tarda poco mas de 35ms
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 15 de Julio de 2008, 13:44:14
Justamente esos pasos de 1uS son los que iban antes del pulso de sincro horizontal, que en los gráficos que pasé en el word estan dibujados pero en este caso con el pic no son necesarios, por eso subí el dibujo que está en PDF, allí está mas claro.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 15 de Julio de 2008, 15:36:17
Con razón no lo encontraba en el PDF. Bueno, después lo elimino. Ahora estoy en la creación del PCB del video juego.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 15 de Julio de 2008, 20:30:56
Finalmente lo terminé, y funcionó a la primera  :mrgreen:

Funciona con un PIC 16F648A o un 16F628A
La salida de luminancia es por el RB1 y la de Sincronismo por la RB0.
Para que funcione hay que colocar un juego de resistencias como el que aparece en el juego PONG que aparece en la página de Pablín.

Está bien comentado como acostumbro hacerlo, espero les guste.



Salud 8)

Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 16 de Julio de 2008, 00:18:05
Genial!!!
y muy bien explicado!!! :-/ :-/ :-/ :-/ :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 16 de Julio de 2008, 00:34:30
Busnisimo SavageChicken!!! Te felicito! el codigo quedo de 10 explicado! (a prueba de tontos como yo jaja).

Les voy a pedir disculpas por estar como parasito en este proyecto, lo q pasa es q me interesa mucho y quiero comprender al 100% para poder colaborar. Si no les molesta, les voy a pedir q me expliquen una cosita:
Especificamente ¿Qué hace y para qué sirve el generador de sincronismos? Hasta donde yo entiendo, le da direccion al haz de electrones que chocan contra el fosforo de la pantalla. Pero no contiene informacion sobre qué es lo que vamos a dibujar en la pantalla... me equivoco?
Quiero terminar de entender como vamos a hacer para dibujar una imagen en la TV.

Gracias, y saludos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 16 de Julio de 2008, 01:05:45
Hola Flaco, Gracias por los cumplidos.

Hola Gera.
Ta como estas suponiendo, el generador de sincronismos por si solo, lo único que hace es crear una imagen negra y estable, pero no enciende ningún punto de la pantalla, pero por decirlo de alguna manera, crea la base para dibujar en la pantalla.
Hay dos formas de agregarle la imagen, una sería usar otro circuito al que le avisemos que estamos en el momento de dibujar la pantalla y que este último se encarge de añadir la imagen, y mezclar las dos señales.
La otra es añadirle a este generador de sincronismos una rutina que se encarge de dibujar la imagen, eso es lo que pretendo hacer ahora   ;-)

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 16 de Julio de 2008, 12:36:56
Perfecto, muchas gracias por la explicacion! ;)
Por lo tanto, lo que queda seria añadir la imagen a este sincronismo. Como piensan hacerlo? Yo creo que lo ideal es ir leyendo un buffer.

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 16 de Julio de 2008, 13:16:34
Hola Flaco, Gracias por los cumplidos.

Hola Gera.
Ta como estas suponiendo, el generador de sincronismos por si solo, lo único que hace es crear una imagen negra y estable, pero no enciende ningún punto de la pantalla, pero por decirlo de alguna manera, crea la base para dibujar en la pantalla.
Hay dos formas de agregarle la imagen, una sería usar otro circuito al que le avisemos que estamos en el momento de dibujar la pantalla y que este último se encarge de añadir la imagen, y mezclar las dos señales.
La otra es añadirle a este generador de sincronismos una rutina que se encarge de dibujar la imagen, eso es lo que pretendo hacer ahora   ;-)

Salud  8)

Exacto!
Intenta generar algunas barras verticales (que es lo mas facil), de diferentes anchos, a ver que tal se ve, y cual es el ancho minimo que podemos lograr!!!
Que bueno!

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 16 de Julio de 2008, 15:48:40
Hola Ariel.

   Para ir trabajando sobre algo concreto, creo que sería bueno definir alguna memoria RAM intermedia, en donde el PIC principal deje la imagen que se debe mostrar y desde donde el PIC de video lea la información para luego presentarla.
Como yo no me manejo nada de nada con memorias (siempre usé la memoria interna del PIC), me gustaría que se propongan las mejores opciones y nos decidamos por una de ellas.

   Para tener una idea de los requerimientos tenemos que hacer cálculos.

   Si solo vamos a mostrar imágenes en blanco y negro y nos vamos a limitar a la resolución del LCD, estamos hablando de 128x64 = 8192 bits = 1 KByte
   Si pretendemos subir la resolución a la de una spectrum 48K pero quedarnos en blanco y negro: 256x192 = 49152 bits = 6 KBytes
   Si lo llevamos a una resolución de Commodore 64 estamos hablando de 320x200 y continuando en BW: 320x200 = 64000 bits (poco menos de 8 KBytes)

   Si ahora queremos color, hablamos de multiplicar estos valores por 2 para 4 colores, por 3 para 8 y por 4 para 16 colores (que este último era típicamente la cantidad de colores de una máquina de las mencionadas).
   Esto significaría por ejemplo 24 KBytes para 256x192 a 16 colores, o incluso 32 Kbytes para 320x200 también a 16 colores.

   Hablemos ahora de los tiempos requeridos para el acceso a las memorias.
   Por las limitaciones que tenemos creo que lo mejor sería que el chip principal efectúe una descarga de la pantalla completa en la memoria (creo que sería más económico solo modificar los bits que estamos cambiando), 30 veces por segundo (es decir entre cuadro y cuadro) eso le da el tiempo del sincronismo vertical que dura como 12 lineas en total, que equivalen a 762 us, seguramente podrían ser más, ya que si solo tenemos 192 líneas (o 200) y la tele tiene 525, habrán líneas vacías que también pueden usarse como tiempo para volcar datos a la memoria. Pero en el peor caso, tendríamos que volcar 32 KBytes en 762 us. ¿es eso posible con los dispositivos que manejamos?

   El pic de video, deberá leer línea a línea para luego mostrar esto en la línea correspondiente, pero solo tiene el tiempo del sincronismo horizontal para hacerlo, esto es menos de 11 us y a 320x200 en color ¡¡¡estamos hablando de leer 160 Bytes de información en 11 us!!! Sinceramente lo veo imposible. Y eso que no estamos incluyendo el proceso de generar color con el PIC, que eso es otro cantar.
   Claro, si nos limitamos a 128x64 en BW cada línea tendría 16 Bytes de información, ( y leer 16 Bytes en 11 us, ya lo veo complejo), pero podríamos quizá leerlo y procesarlo inmediatamente, entonces durante los casi 43 us que dura la parte útil de la señal de video iríamos leyendo la RAM y presentando los pixeles (esto lo veo más factible).

   Bueno, les dejo las inquietudes y espero sugerencias para que nos orientemos a la mejor solución.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 16 de Julio de 2008, 15:59:45
Hola amigo!
EXCELENTE analisis!

Tengo que mirar bien el tema de la memoria. Juanfe nos ha mandado una que tiene la capacidad (en realidad es de 1MB) pero no he visto el tema de los tiempos. Son las DS1245AB (en paquete DIP).

Respecto a la velocidad requerida para enviar los bits a la pantalla, el PIC18F que pensamos usar en la maquina de videojuegos funciona a 40MHz, o sea que en un uS procesa 10 instrucciones...160 bytes en 11us significarian 160 bytes en 110 instrucciones. No conozco NADA de ASM, pero me sigue pareciendo dificil alcanzar esas "cotas".

¿no se poria poner algun circuito intermedio, en el que descargariamos los bits en los tiempos entre lineas, y que se encargue de reenviarlos cuando haga falta? Una especie de ....registro de desplazamiento TTL o algo asi. Por supuesto, dudo que lo haya.

Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 16 de Julio de 2008, 16:14:49
Permitanme insistir con la prouesta q plantee en la pagina anterior: Utilizar un ucontrolador intermedio que interprete instrucciones simples del pic18 y que traduzca estas a señales de video, para luego almacenarlas en un buffer, y despues el generador de sincronismos solo tiene q leer dicho buffer. De este modo no consumimos ciclos vitales del pic18, ni del generador de sincronismos.

Adjunto la imagen de como quedaria, saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: BrunoF en 16 de Julio de 2008, 16:51:41
Ariel, yo andaba(y sigo) enloquecido con las pantallas de Playstation Portable(PSP) Sharp. Son muy sencillas de controlar. Lo más complicado es la velocidad de la transmición de los datos, que es de 10Mhz(si mal no recuerdo minimo 8Mhz), pero tiene una resolución digna y 16 millones de colores.

Si lográs la velocidad de 10mhz, en un rato la sacás andando..

Saludos;)
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 16 de Julio de 2008, 20:38:30
Hola Gera.

Me gustaría que amplies más a que te refieres con el tema de controlador intermedio.

Por ejemplo que serían las instrucciones simples del pic para ese controlador, y como serían las señales de video que este último generaría, porque no alcanzo a entender en que ayudaría.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: jfh900 en 16 de Julio de 2008, 20:55:17
Las placas convencionales de videojuegos (pacman, galaxy, por citar algunos ejemplos) utilizan el microprocesador para controlar el juego y transferir patrones de imágenes (las imágenes están generadas y guardadas en memorias ROM denominada memoria de objetos) a la memoria de vídeo.

Esta memoria de vídeo es leída por un circuito hardware que las saca como señal de vídeo.

Los microproceadores pierden mucho tiempo procesando las instrucciones y trasvasando datos para procesar la información y al final hacer algo fijo, que un circuito harware soluciona en mucho menos tiempo.

Un saludo
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 17 de Julio de 2008, 01:20:41
 Hola gente: otro dato a tener en cuenta, si vamos a hacer 128x64 cuadraditos en B&N recuerden que hay varias líneas de barrido horizontal que van a repetir el patrón, según la altura de cada cuadrado o pixel en la pantalla.
 Podría ser que cada cuadrado mida de altura 7 u 8 líneas horizontales de barrido, o quizás menos ya que si es de 128x64 la relación es 2:1, mientras que una pantalla de tv normal tiene una relación de forma 4:3, por lo que nos estaría sobrando una altura de 1/3 de la pantalla.
si aparte tenemos un margen sin usar a la derecha y a la izquierda, la relación es mayor.

Vamos a hacer el planteo:

altura: 525 líneas de las cuales se pueden llegar a utilizar unas 500 líneas.
si ocupamos todo el ancho de la pantalla nos quedan de altura 500x(2/3)=333 aproximadamente
estas 333 líneas repartidas en 64 cuadrados de alto nos dá 333/64=5,2
por lo que nos estaría quedando que cada cuadrito tiene de alto unas 5 líneas o menos.
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 17 de Julio de 2008, 01:59:23
Hola Gera.

Me gustaría que amplies más a que te refieres con el tema de controlador intermedio.

Por ejemplo que serían las instrucciones simples del pic para ese controlador, y como serían las señales de video que este último generaría, porque no alcanzo a entender en que ayudaría.

Salud  8)


Doy un ejemplo a ver si me explico: Supongamos que queremos dibujar una linea, entonces la cpu podría generar una matriz de pixeles y enviarsela al controlador intermedio diciendole q dibuje eso.
El controlador intermedio tomaria esa informacion, y la procesaria, convirtiendo dicha matriz en los pulsos que tiene q enviarle el generador de sincronismos al TV.
Asi mismo, la cpu podria decirle al controlador intermedio que superponga otra linea, o que borre ciertos pixeles, o lo que sea...
En qué ayuda? Bueno, liberariamos tanto a la cpu como al generador de sincronismos, que bastante ocupados estan ya. Entonces la cpu se limitaria a enviar estas instrucciones simples al pic intermedio, y el generador de sincronismos se limitaria a leer un buffer y plasmarlo en el TV.

Esto es lo q tenia en mente. De todos modos, es solo una sugerencia, creo q es una buena forma de modularizar, pero esto no implica que sea una solucion eficaz...
Tambien me parecio muy interesante lo q planteo jfh900 mas arriba... habra q analizar todas las posibilidades.

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Viko en 18 de Julio de 2008, 22:35:21
Hola amigos el tema que están tratando es muy interesante :-/,  voy a seguir muy de cerca este proyecto.

Mi intención es manejar VGA, estoy trabajando en el circuito del proyecto MyCPU (http://www.mycpu.eu/) para reducir el tamaño de la tarjeta de video (http://www.mycpu.thtec.org/downloads/GraphicUnit_Selfbuild-Guide_070712.zip),  pero estoy perdido  :shock: :shock: en el diagrama es muy extenso. Ya les contare …

Un pequeño aporte, como dece jfh900, si están pre-generados todo lo patrones para visualizar se podría utilizar una memoria serial EEPROM fácil de manejar con un PIC, pero si se quiere que el uC maestro envié pixel a pixel a visualizar se debe utilizar una memoria RAM pero por factores de seguridad y velocidad se debería utilizar una transmisión de datos en paralelo.

Buscado por la red encontré esta Ram serial  DS1200 pero tiene solo  1k, con el fin de ampliar la memoria se podría unir varias de estas memorias o hacer:

uC –>paralelo-> RAM –>convertidor a serial ->control Visualización(PIC)

No sé que tan factible sea aplicar esto por el tiempo de conversión.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 19 de Julio de 2008, 10:54:42
Hola gente.

He estado leyendo bastante sobre la generación de color, y la frase clave en todo esto es: RGB encoder.
Si nos decidimos a incorporarle color a nuestra maquinita necesitamos un chip especializado que se encarge de esa parte, ya que se debe modular una subportadora de color en cuadratura de fase, lograr esto (al menos para mi), excede con creces mis posibilidades y es un trabajo sumamente complejo.
Para darles una pincelada, la idea es la siguiente:

La señal de luminancia es la suma de las señales RGB (Rojo, Verde y Azul) esta señal siempre se incluye, aun cuando se trate de señal en blanco y negro, por otro lado se necesita enviar la diferencia entre la señal de luminancia y el color rojo y entre la señal de luminancia y el color azul, escrito en fórmulas sería algo así:

Luminancia (Y) = R+G+B
Azul menos Luminancia = B-Y
Rojo menos Luminancia = R-Y

Con estas tres señales luego podemos obtener las tres componentes RGB, todo esto sucede porque como ya existía la TV blanco y negro, y en ella se envía la señal de luminancia, para mantener la compatibilidad es necesario agregar la información faltante sin alterar lo existente hasta el momento.
Estas dos ultimas señales (B-Y, y R-Y) son incorporadas como expliqué en una subportadora modulada en dos ángulos distintos, una señal modula a la portadora en un ángulo de 0º y otra señal la modula a 90º, y luego se mezcla con la de luminancia (toda una ensalada) para obtener la señal de video compuesto.

El circuito para lograr esto es muy complejo y require de frecuencias muy precisas, fuera 100% de mis posibilidades.... Pero para que reinventar la rueda.
Existen los llamados RGB encoder, que hacen este trabajo.
Basta que uno les entrege la señal de sincronismo (cosa que ya hemos logrado con el PIC, y les de los niveles de RGB y decida si quiere trabajar en PAL o NTSC y se obtiene a la salida el video compuesto).

Una posibilidad de consegir estos circuitos es en alguna vieja placa de video (VGA) con salida a TV.
Los más conocidos y o comunes son los siguientes:

MB3514 de Fujitsu
MC1377 de Motorola
CXA1645 y CXA1645M de Sony
AD724 y AD725 de Analog Devices
KA2198BD de Samsung

Quizá se consigan estos o similares en las tiendas electrónicas de vuestras ciudades.

Todos los mencionados sirven para NTSC y PAL, algunos tambien manejan audio, creo que cualquiera serviría para nuestros propósitos, pero el único inconveniente es que el patillaje es distinto.
En mi caso de una antigua tarjeta VGA podría rescatar el CXA1645M

Espero sus comentarios... Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 19 de Julio de 2008, 14:40:10
Muy interesante SavageChicken! Indudablemente será muy util para cuando nos dispongamos a hacerlo en colores ;)

Por cierto, estan usando algun programa para simular el circuito con el pic y el televisor? porq quiero probar unas ideas, y no tengo ganas de ponerme a armar el circuito y conectarlo a la tele jejeje.

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 19 de Julio de 2008, 14:46:47
El único simulador que conozco que emula además un televisor es miSim DE (http://www.feertech.com/misim/homepage.html), creado en java y gratuito, aunque muy limitado, además tienes que adaptar las salidas usadas en tu programa a las que exige el simulador.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 19 de Julio de 2008, 15:11:09
Muchas gracias! Ya me voy a poner a experimentar un poco, a ver si salen una q otra idea q tengo dando vueltas por la cabeza.
Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 19 de Julio de 2008, 15:14:00
Una posibilidad de consegir estos circuitos es en alguna vieja placa de video (VGA) con salida a TV.
Los más conocidos y o comunes son los siguientes:

MB3514 de Fujitsu
MC1377 de Motorola
CXA1645 y CXA1645M de Sony
AD724 y AD725 de Analog Devices
KA2198BD de Samsung

Excelente trabajo. Realmente excelente. Que capacidad tienes para trabajar :)
Por lo pronto , del "desarmadero de placas" de casa he recogido una Trident TD9685 del año 1997 que tiene un AD724-JR, SMD pero con paso de 0.05 pulgadas (la mitad de un DIP), 16 pines).

Estoy por sacar algunas fotos para ir documentando todo el proceso, y luego....a desoldarlo. Y a buscar la datasheet!

Ya les contaré.
Saludos.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 19 de Julio de 2008, 18:48:24
Hola gente !

Sigo lo más cerca que puedo el hilo y está súper !

Pollo realmente coincido con Ariel que sos un monstruo trabajando. Admiro mucho a las personas que se apasionan por una causa y luchan por sacarla a la luz cómo lo estás haciendo vós, Gera, Claudio y Ariel obviamente. (la mente perversa que ha embarcado a todos en ésto  :D )

Respecto a los codificadores RGB, en mi caso, he trabajado con el MC1377 y es una muy buena elección.
También he visto el CXA1645, pero no mucho.

Lo que veo a medida que avanza el hilo, es que van a largar directamente con color.
Eso significa que el PIC que entregue la señal al codificador, deberá generar los tres colores por separado.
El Rojo, el Verde y el Azul.
Para no complicar el trabajo inicial con el filtrado de los colores al generar el programa, se podría generar una imagen B/N única y atacar proporcionalmente la entrada RGB del codificador, para tener una señal monocromática en un TV color y después que éso esté logrado, encarar la generación de los tres colores por separado.

Es una idea.

Las proporciones a mantener en la entrada del encoder debieran ser

Y (luminancia) = 0,3 Rojo + 0,59 Verde + 0,11 Azul


Esto debe respetarse para lograr obtener un raster ó cuadro de color blanco perfecto en pantalla.
Es decir, debemos hacer divisores resistivos a la entrada de cada color del encoder, para que de los 5 Volts que entregan los PIC, vayan un 30% al Rojo, un 59% al Verde y un 11% al Azul para así lograr un Blanco.

Saludos !

Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 19 de Julio de 2008, 18:56:25
Hola Mario!

Gracias por tratarme de perverso. Igual, un par de ex-esposas se te adelantaron con el calificativo  :mrgreen:

Respecto de lo que comentas sobre las proporciones de R, G y B, es un buen dato.
Si no me equivoco, cuando tengamos todo bien definido, podemos armar la placa con el chip que menciona SavageChiken, y enviar R=G=B=punto, es decir, cuando debe dibujarse un punto, ponemos en alto las tres salidas correspondientes a R, G y B y listo.

(corregime si estoy diciendo disparates)

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 19 de Julio de 2008, 18:57:46
Otra cosa:

Los MC1377 que has manejado.....¿son "rapiñados" de algun aparato comercial, o se consiguen en las casas del ramo?
Por que si son conseguibles, podriamos usar todos el mismo, para no tener 10 hardwares distintos.

Saludos.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Marioguillote en 19 de Julio de 2008, 19:05:01
Gracias por tratarme de perverso. Igual, un par de ex-esposas se te adelantaron con el calificativo  :mrgreen:

 :D  :D  :D

Si no me equivoco, cuando tengamos todo bien definido, podemos armar la placa con el chip que menciona SavageChiken, y enviar R=G=B=punto, es decir, cuando debe dibujarse un punto, ponemos en alto las tres salidas correspondientes a R, G y B y listo.

R + G + B (en las proporciones mencionadas)= PUNTO BLANCO

.... es decir, cuando debe dibujarse un punto, ponemos en alto las tres salidas correspondientes a R, G y B y listo.

Exacto.

Los MC1377 que has manejado.....¿son "rapiñados" de algun aparato comercial, o se consiguen en las casas del ramo?
Por que si son conseguibles, podriamos usar todos el mismo, para no tener 10 hardwares distintos.

Fueron comprados aquí, además son fácilmente conseguibles en cualquier lado y no son caros. ( Hasta aquí en mi ciudad hay ...imagináte ! )

Saludos !
Mario
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 19 de Julio de 2008, 19:10:08
Fueron comprados aquí, además son fácilmente conseguibles en cualquier lado y no son caros. ( Hasta aquí en mi ciudad hay ...imagináte ! )

La placa de video acaba de salvar su vida a ultimo momento. La iba a "carnear" hace un rato y me entretuve con otra cosa (el generador de caracteres en CCS para GLCD).

Mejor así, puede servir entera para otro proyecto.

Creo, entonces, que ese seria el chip que deberiamos buscar. Voy a por la datasheet.

Gracias!

Edito: Datasheet del MC1377 de Motorola (http://www.datasheetcatalog.org/datasheet/motorola/MC1377DW.pdf)
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 19 de Julio de 2008, 20:46:18
Hola Gente. Gracias por las palabras de aliento, la verdad es que estoy con mil cosas a la ves y no le puedo dedicar el tiempo que quisiera, ya que estoy con el trabajo, el término del tercer semestre de la universidad (pruebas y exámenes), y una mudanza "at portas", embalando todos los cachureos que tengo.

Cada ves que tomo este tema no puedo dejar de pensar que estos mismos retos y desafíos debieron haber enfrentado tipos como Sir Clive Sinclair, creador del mítico Spectrum o Steve Jobs de Apple, y que si ellos lograron lo que lograron,también nosotros podemos sacar adelante este proyecto.

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Viko en 20 de Julio de 2008, 13:05:17
Hola amigos,
Revisando el código para el generador encontré este comando
   goto    $-2
Que hace el comando?
Título: Re: Generador de imagenes de video con PIC
Publicado por: LABmouse en 20 de Julio de 2008, 14:49:06
Da un salto a dos posiciones atras.. o a 2 instrucciones atras.


SALUDOS!
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 21 de Julio de 2008, 17:47:00
Esto está sacado de Wikipedia. No es demasiado tecnico, pero puede servir para tomar alguna idea. Lo "encontre" buscando otra cosa, y me parcio buena idea ponerlo aqui.

Operación técnica del video en el ZX81
Los medios técnicos usados para implementar la generación del video para la pantalla de TV, aunque brillantes, no fueron del todo estándar. El sistema funcionaba como sigue:

El ZX81 contiene, dependiendo del tipo de RAM, cuatro chips: una RAM, una ROM, un CPU y un ASIC, llamado en ese entonces ULA – (Uncommitted Logic Array). Unas resistencias fueron colocadas en serie con las líneas de datos. El CPU y la memoria ROM estaban a un lado de las resistencias de datos, y la memoria RAM en el otro. Las direcciones 0-8191 estaban asignadas a la ROM, en los últimos 512 bytes estaban contenidas las imágenes de mapa de bits del juego de caracteres, y las direcciones 16384-32767 estaban asignadas para la memoria RAM.

El video de la pantalla era manejado por interrupciones, de tal manera que el proceso normal del computador pudiera continuar durante o cerca del intervalo de blanqueo vertical. Las interrupciones pasaban el control a las rutinas que generaban el video durante el resto del tiempo disponible, entonces, la propia CPU era utilizada como un contador para controlar la salida de los datos de video, desde la memoria hacia la pantalla de TV.

El procesador procuraría saltar, en la memoria RAM, a la dirección 32768 + el principio de los datos de video. Entonces se activaban simultáneamente, la línea A15 del bus de direcciones, y una raramente usada línea de control del procesador Z80, que indicaba "ciclo de instrucción de memoria 1". El ULA detectaría esto como un intento de ejecutar una instrucción desde la memoria RAM que representa el video y capturaría los datos recuperados del bus de datos. Entonces comprobaría el bit 6 del dato, si fuera cero, el ULA colocaría en el bus de datos, para consumo del Z80, una instrucción NOP (No OPeración) que para este procesador se representa con un byte con todos los bits en cero. El CPU continuaría "ejecutando" el RAM del video de esta manera, como si fuera código de máquina del Z80, hasta que se encontrara un byte con bit 6 = 1. Este byte no sería convertido a cero por el ULA y se ejecutaría normalmente por el CPU.

El ZX81 utilizó su propio juego de caracteres no estándar. Los códigos 0-63 eran caracteres imprimibles y los códigos 128-191 era los mismos caracteres en video inverso. El único byte válido con bit 6 = 1 que se podía escribir en la memoria de video era el 118, que representaba la instrucción HALT en el Z80 y hacía que el procesador se detuviera. Este byte fue utilizado como el carácter NEWLINE.

Exceptuando la instrucción HALT, si se hubiera colocado cualquier otro byte con bit 6 = 1 en la RAM de video del ZX81, la máquina se hubiera estrellado casi inmediatamente, ya que se estarían ejecutando instrucciones al azar, sin sentido y sin control.

Una interrupción no enmascarable sería usada entonces para sacar al procesador del estado de HALT, una vez que fuera el momento de mostrar la siguiente línea de la trama.

La conversión de los caracteres en los pixels para la pantalla estaba basada también en el empleo de capacidades específicas del procesador Z80. El Z80 tiene un registro R, que originalmente fue pensado como un contador para hacer el refrescamiento de la memoria RAM dinámica. Durante un ciclo en el cual los datos no eran recuperados, la señal de control RFSH estaría activa y el contenido del contador R salía a la porción más baja del bus de direcciones. El registro de vector de interrupción I, se usaba de una manera diferente de la esperada. Una característica no documentada del Z80 ponía el contenido del registro I, en la porción superior del bus de direcciones durante este ciclo de refrescamiento.

El ZX81 tenía el mapa de bits del juego de caracteres al final de los 8K de la ROM del BASIC. La ROM estaba conectada al lado opuesto de las resistencias en serie del bus de dirección de tal manera que ciertos bits de dirección podían sobrescribirse bajo control de la ULA. El registro I podía ser cargado para apuntar a la base de la tabla del mapa de bits del juego de caracteres en la ROM y el registro contador (de refrescamiento) R también se podía usar para contar cual línea en el mapa de bits de 8x8 de un carácter debía ser exhibida.

El intérprete del BASIC en sí mismo era un completamente propietario, a diferencia de la mayoría de los microcomputadores del momento, excepto el Apple, que usaron una serie de variantes similares pero incompatibles del BASIC de Microsoft. Esto significaba que no había necesidad de cumplir con el código ASCII o cualquier otro estándar existente.

Incluso la instrucción más simple del Z80 toma cuatro ciclos para ejecutarse. Durante el primer ciclo, el procesador procuraría "ejecutar" el texto del video como dato. El ULA capturaría y guardaría el dato y forzaría, en el bus de datos, la instrucción NOP, (No OPeración) que era representada con un byte con todos los bits a cero. Durante el tercer ciclo, el procesador intentaría un ciclo de refrescamiento para la memoria RAM dinámica. El ULA utilizaría el ciclo de refrescamiento para sustituir el contenido de las líneas de dirección A3-8 del bus de dirección con los bits 0-5 del carácter almacenado. Los bits altos estarían viniendo del registro del vector de interrupciones (que estaba apuntando al juego de caracteres en la ROM), los tres bits más bajos indicarían cual fila del carácter individual era actualmente explorada. El bit 7 del byte original del carácter, sería usado internamente por el ULA para controlar el video inverso del carácter. De esta manera, un byte de pixels para la pantalla sería forzado en el bus donde entonces podía ser alimentado a un registro de desplazamiento manejado por el mismo cristal usado para generar el reloj del CPU y de allí ser enviado al aparato de Televisión.

La sincronización del video sería generada usando el mismo bit individual de I/O (E/S) que se usaba para generar la salida para la interface de la grabadora de cassettes de 250 bit/s.

Desafortunadamente, si la pantalla estaba activada, el uso de la CPU para generar el video retardaba el procesamiento para las demás cosas en un 75%.

El I/O en sí mismo también utilizó algunas características indocumentadas del Z80. Nominalmente, una dirección de puerto de I/O en el Z80 es de ocho bits. Si un registro de 8 bits es usado como la dirección (por ejemplo la instrucción IN A, [L]) lo que salía realmente por el bus de dirección de 16 bits del Z80 no era el registro L sino el par de registros HL de 16 bits, con L como los ocho bits más bajos. El ZX81 explotó esto usando los ocho bits superiores del bus de dirección para manejar las líneas de exploración para la matriz 8x5 del teclado. Los bits devueltos se podían entonces leer por un solo puerto de la entrada.

Los ocho bits más bajos de la dirección de I/O eran usados como selectores de chips para dispositivos individuales de I/O dentro de la ULA. En la configuración estándar, a menos que la impresora térmica externa opcional estuviera enchufada en el conectador de borde del bus de 40 pines, las únicas entradas/salidas presentes eran: un bit para la entrada del cassette, un bit para la salida del cassette y también usado para la sincronización de video, una palabra de cinco bits para la entrada del teclado y los registros de control requeridos para permitir activar la ULA en sí misma para la generación video. Esto significó que no todos los ocho bits fueron usados, permitiendo algún espacio limitado para extensión externa.

La RAM originalmente estaba limitada a 2K internos, las versiones de Timex instalaron la RAM en su totalidad, 2 Kx8 en un chip, mientras que el Sinclair ZX81s tenía una RAM estática 1 Kx8 o dos de 1 Kx4, o una RAM 16K externa. En la RAM externa, una línea RAMCS en el pin 40 del conectador era conectada a un nivel constante en el RAMpack para inhabilitar la RAM interna, esto debido al uso de M1 + A15 para indicar la recuperación de los bytes de los caracteres de video.

El RAMpack externo usaba ocho chips 4116, una primitiva RAM dinámica de 16 K x 1 bit en un DIP de 16 pines, con un pin de dato, 7 pines de direcciones multiplexadas, !RAS, !CAS, !WE y energía. Estos viejos chips requerían +12 V, +5 V y -5 V mientras que la fuente de alimentación interna de ZX81's era simplemente un chip 7805, un regulador lineal 5V unido a un pequeño disipador de calor de metal que llegaba a estar algo caliente debido a que el ZX81 fue alimentado por un adaptador de 9 V con un enchufe de 1/8 de pulgada. El RAMpack contenía un oscilador y algunos inductores para convertir los +5 V en los otros voltajes requeridos así como también circuitos para multiplexar las líneas de dirección. Todo esto añadía significativa complejidad interna al RAMpack.

Desafortunadamente el borde del conector del bus de 40 pines en sí mismo no tenía un recubrimiento de oro-plata, los contactos fueron cubiertos simplemente con soldadura. El sistema ZX81 actualizado era muy propenso a malas conexiones y a oxidación que lo hicieron mecánicamente muy frágil y propenso a estrellarse. Esto llegó a ser molesto pues tomaba ocho minutos recargar completamente los 16Kbyte RAM desde una cinta de cassette que a menudo no era fiable. Soluciones improvisadas hechas en casa para este problema iban desde físicamente fijar la computadora y el RAMpack a un substrato sólido, hasta poner todo el conjunto en una carcasa más grande con un apropiado teclado sobrante en lugar del original.

Otra mejora menos común hecha por algunos usuarios finales era conectar la RAM estática como "pseudo-ROM" en lugar de la ROM espejo en las direcciones 8192-16383. Al igual que la ROM, esta RAM necesitaría ser conectada en el mismo lado de las resistencias del bus de datos, de modo que pudiera ser utilizada para almacenar un juego de hasta 64 caracteres definido por el usuario. Una variante en este tema añadía un latch de un bit para guardar el más alto bit del carácter original, cuando M1 y A15 estuvieran activas simultáneamente, y usarlo para manejar uno de los bits de dirección, permitiendo que los mapas de bits de todos los 128 caracteres pudieran ser redefinidos.

Mientras que la RAM principal estaba en el lado incorrecto de los resistores del bus de los datos y de dirección para que esto trabajase, el RAM estático adicional era requerido para este enfoque. Cargar el registro I para apuntar al RAM principal no produciría el resultado deseado, en lugar de eso, mostraba basura como pixels.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Viko en 21 de Julio de 2008, 18:46:03
gracias PICmouse
Título: Re: Generador de imagenes de video con PIC
Publicado por: Viko en 23 de Julio de 2008, 19:26:29
En un libro tengo los esquemas para construir un computador con el 6502, no lo tenia a mano ya lo encontré y subo el esquema de la interface para vídeo esta sencillo, pero solo es para caracteres. también tengo otro pero utiliza un chip el CRT6845 o  MC6845, lo busque si lo vende jameco o digikey pero nada, tiene mejor resolución si alguien quiere el esquema ma avisa para subirlo.
Esquema por bloques
(http://LinkImagen.com/Miniaturas/Imagen30052.jpg) (http://LinkImagen.Com/Imagen.aspx?Id=48059)

Circuito
(http://LinkImagen.com/Miniaturas/Imagen30054.jpg) (http://LinkImagen.Com/Imagen.aspx?Id=48061)
Título: Re: Generador de imagenes de video con PIC
Publicado por: NarXEh en 27 de Julio de 2008, 16:11:29
Buenas! :D

recien buscando en internet, encontre este link muy interesante... talves pueda ayudar en algo ( a pesar de que estube viendo el como se la rebuscaron para sacar todo adelante y los felicito  :) )

Aca les dejo el link

http://www.linusakesson.net/scene/craft/

espero que sirva de algo

saludos!

NärXEh  :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 27 de Julio de 2008, 17:13:39
Excelente aporte NarXEh! Muchas gracias!
Muy buen trabajo el q hizo este compadre... me encanta la musica, me recuerda a mis primeras consolas jaja.
Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: gasparin en 07 de Agosto de 2008, 03:29:13
Amigos un saludo para todos  :)
Les quiero felicitar por el excelente proyecto que están desarrollando
Solo quiero agregar que estoy acondicionando el archivo fuente para usarlo con un 16F84A ya que solo este integrado es el que tienen de venta en mi ciudad, si no me equivoco parece compatible solo tendría que eliminar algunas palabras en la configuración, aquí las incluyo por si me he equivocado   :D

   list      p=16F84A           ; list directive to define processor
   #include <p16F84A.inc>       ; processor specific variable definitions

   errorlevel  -302              ; suppress message 302 from list file

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

;Variables Tenemos disponibles desde 0x20 hasta 0x7F en el Banco 0
;Mirar Datasheet para los otros bancos de memoria.

SYNCSTAT   equ      0x20   ;Controla el Status del Sincronismo
LINEA      equ      0x21   ;Contador de línea interlazada como son 253 líneas nos alcanza con 1 byte
d1         equ      0x22   ;Variable para delay



;*** Constantes
SINC      equ      H'0000'   ;Señal de Sincronismo
LUMI      equ      H'0001'   ;Señal de Luminancia
;Por ahora solo será pixel encendido o apagado
;**********************************************************************
reset   org     0
        goto    Inicio
;**********************************************************************

 Inicio
      clrf   PORTA               ;Ponemos las salidas del Puerto A en 0
      bsf      STATUS,RP0            ;Me cambio al Banco de memoria 1
      clrf    TRISA               ;Todo el puert A como salidas
      clrf   TRISB               ;Todo el puert B como salidas
      bcf      STATUS,RP0            ;Vuelvo al Banco 0
;---------------------------------------------------------------------------------
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 08 de Agosto de 2008, 17:37:58
Ufff!
por motivos de trabajo no he pasado por aqui en dias, y creo que no podré hacer por lo menos en una semana mas. Pero me alegra ver que no se ha quedado en el olvido.

Volveré....y me van a tener que soportar!!!!!!!!!!! :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Agosto de 2008, 19:43:23
Hola gente: les cuento que hace más o menos un mes que vengo dibujando diagramas de flujo y escribiendo asembler para un 18f452, recién lo pruebo y acabo de poner los cuadraditos en la pantalla, es una imagen estable y se vé nítido, el único problema es que si bien hace el cuadriculado que le cargué en la ram del pic, el primer y el último pixel me los hace al primero negro y al segundo blanco, ya voy a ver que es lo que hice mal en mi código.
otro problema es que no me alcanza a dibujar los 16 bytes de ancho, sino que llega a los 15 exactos, otra cosa a corregir.
en un ratito subo un par de fotos!!
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Agosto de 2008, 20:18:53
Fotos....

(http://img390.imageshack.us/img390/3635/1000814lx4.th.jpg) (http://img390.imageshack.us/my.php?image=1000814lx4.jpg) (http://img390.imageshack.us/img390/5463/1000815ql2.th.jpg) (http://img390.imageshack.us/my.php?image=1000815ql2.jpg) (http://img48.imageshack.us/img48/5259/1000816dt0.th.jpg) (http://img48.imageshack.us/my.php?image=1000816dt0.jpg)

Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 11 de Agosto de 2008, 21:00:04
¡Qué lindo que te quedó!

No entiendo a que te refieres con que el primero lo hace en negro y al segundo blanco. ¿te referís a las barras verticales?
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Agosto de 2008, 22:18:37
¡Qué lindo que te quedó!

Gracias León, es la plaquita de pruebas.

 
No entiendo a que te refieres con que el primero lo hace en negro y al segundo blanco. ¿te referís a las barras verticales?

Exactamente me refiero a las barras verticales, la idea es que muestre todo un cuadriculado, pero si contás los cuadritos entre barra y barra son 6, lo que me indica que esas barras son dos bits renegados, estoy viendo el asm, para saber si los cargué mal en la ram o me los saca mal la rutina de video.

de paso les dejo el asm, es para un 18f452, con un cristal de 10 MHz y trabajando a 40 MHz, en RE0 le puse una R de 680 Ohms y en RE1 una de 1K.

RE0 salida de video, RE1 sincronismo y de ahí a la entrada de video del tele.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=22424.0;attach=7506)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 11 de Agosto de 2008, 23:31:26
Bueno solucionado lo de las barras, comf no es lo mismo que negf  :mrgreen:

Comf reg =   /reg

Negf reg =  /reg +1

estaba cargando mal la ram...

ahora solo me falta que la imagen entre dentro de la pantalla a lo ancho.... :shock:
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 12 de Agosto de 2008, 13:26:47
Buenisimo flaco!!!!!!!!!
Que lindo se ve! ¿No te dio un poquito de emoción verlo funcionando?

Me estoy yendo de viaje hasta el jueves. A la vuelta lo voy a armar para empezar a jugar.

Realemente impresionante lo suyo :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 12 de Agosto de 2008, 17:46:52
Gracias loco!!
la verdad es que despues de tanto pensar  :D :D
no creía que funcionara la parte de sincronismo, y lo conecté y quedó la imagen quietita de una!!
no lo podía creer!!  :-/ :-/ :-/ :-/
todas las señales de sincro están manejadas con el TMR0 y los valores para cargarle están contados, pero tenía una duda y era la de sumarle un tiempito de offset
que puede demorar el micro en atender la interrupción y el cambio de estado del pin de sincro, y le tiré unos 4 pulsos al tuntún y quedó  :D :D

ya solucioné lo del ancho de la imagen, aunque a costa de un pin, ahora la r de 1k la conecté al pin de RA5 (señal de sincronismo) y el Puerto E lo dejo exclusivamente para la señal de video, todo esto por un problema de tiempos.

Ahora falta lo más dificil, interpretar los comandos que el pic central le daría a una glcd y cargar estos datos en la memoria del micro.

Dejo un par de fotos más y el asembler corregido.

(http://img210.imageshack.us/img210/8740/1000821rk6.th.jpg) (http://img210.imageshack.us/my.php?image=1000821rk6.jpg) (http://img514.imageshack.us/img514/5066/1000824gx4.th.jpg) (http://img514.imageshack.us/my.php?image=1000824gx4.jpg)
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 14 de Agosto de 2008, 14:32:58
Que buena Flaco, te felicito, estas haciendo un gran trabajo.

Yo estoy viendo de generar en colores.
Estoy pensando en usar una paleta de 4 colores.
Las opciones serían las adjuntas.

En la paleta A manejaríamos 3 bits de color, correspondientes al rojo, al verde y al azul, y lo encenderíamos a un 50% de su correspondiente valor, eso nos daría los primeros 8 colores, por decirlo de alguna manera, serían tonos más apagados u obscuros.
El cuarto bit, sumaría 50% a los 3 colores simultaneamente, lo que haría que los colores encendidos llegaran a su 100% lo que daría como resultado los últimos 8 colores, obteniendo un total de 16 colores. Tiene una contra y es que se repite el color gris

La paleta B, es a mi entender más sencilla de realizar, nos permitiría lograr degradé de colores (aun con lo limitado de los 16 colores) pero nos limita un poco en la variedad de colores, porque como verán es escasa.
Se basa en que como hemos venido hablando el color verde aporta casi un 60% del total del color, entonces se me ocurre usar 2 bits para el verde y un bit para el rojo y uno para el azul, entonces tendríamos cuando los dos bits del verde estan apagados 0% de verde, con el primero encendido 33,3% con el segundo encendido 66,6% y con los 2 encendidos 99,9% de verde, mientras que el azul y el rojo serían 0% y 100% en cada caso.

La paleta C es la más complicada de realizar, se parece a la primera, de hecho los primeros ochos colores que se obtienen son los mismos, pero con la diferencia de que el bit que añade el 50% extra, ahora no lo hace con todos los colores simultaneamente, sino, solo a los colores que estan en 1, esto permite colores más definidos, no tan blancuzcos. En esta paleta se nos repetiría el color negro

Espero sus ideas y comentarios, que prontito tendremos color  :mrgreen:

Salud.-  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 15 de Agosto de 2008, 01:14:39
Hola savage, ojalá que sea pronto lo del color!! :-/ :-/ :-/

no la cazo mucho pero en lo que pueda te voy a ayudar, hay que preguntarle a mario bien el tema esas proporciones, si es que se manejan con el CI especial para eso o si las tenemos que regular con el micro, la verdad es que no recuerdo mucho de la secundaria, fué hace tantos años!!

Yo sigo liado con la emulación del glcd, hoy pude modificar la salida de los datos al video para que se parezca a la memoria del controlador ks0108, ya que este guarda los bytes en forma transversal y yo lo estaba haciendo en forma lineal, No lo podian hacer mas facil??  :D :D :D pero ya está solucionado, para que se entienda mejor dejo un dibujo:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=22424.0;attach=7535)

Cada sector de la GLCD se selecciona con los pines CS1 y CS2, por lo que a cada uno le asigné una parte de la RAM del micro, sector 1 desde 0x100 hasta 0x2FF y el sector 2 desde 0x300 hasta 0x4FF, el sector desde 0x000 hasta 0x0FF queda libre para los GPR y poder manejarnos con el accsess bank, también queda libre el sector de 0x500 hasta 0x5FF para cualquier otra cosa.

El puntero del S1 será el FSR1 y el del S2 será el FSR2.

Hay que estudiar las funciones que realiza este controlador e ir implementandolas, por lo pronto y con un poco más de tiempo se puede agregar la escritura directa de los datos.

Adjunto el asm modificado, pero les debo los comentarios de las líneas modificadas, calculo que en un par de días se los agrego.
Saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 15 de Agosto de 2008, 11:26:30
 :shock:
Que laburo impresionante.
Nunca pense que llegases a esa resolucion, y menos que terminase siendo compatible con el GLCD!!!!!!!!
Realmente un trabajo asombroso.
No veo la hora de terminar una cosilla que tengo que entregar con unos acelerometros que me han hecho parir, y ponerme con esto!  :-)
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 15 de Agosto de 2008, 11:57:21
Hola gente: les cuento que hace más o menos un mes que vengo dibujando diagramas de flujo y escribiendo asembler para un 18f452

flaco, te molesta si te pido q subas esos diagramas de flujo?? porq me esta costando entender el codigo en asm.
Te felicito por todo el laburo, sos un capo!

PD: te basaste en esto para generar la señal? http://electronics.howstuffworks.com/tv9.htm
porq no entiendo como obtenes los 0.5V y 2V para hacer un blanco o un negro :S
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 15 de Agosto de 2008, 13:05:07

flaco, te molesta si te pido q subas esos diagramas de flujo?? porq me esta costando entender el codigo en asm.
Te felicito por todo el laburo, sos un capo!


Yo tampoco lo entiendo  :D :D :D
fuera de broma, los diagramas que tengo son un lío porque los fuí modificando y están en hojas de cuaderno, ya que estos dos meses estuve atendiendo el negocio a la tarde y como las ventas... bueno ya sabés como están las cosas, y allí no tengo pc, solo papel y bolígrafo.
porfa decime que parte no entiendes y la voy explicando, sería de mucha ayuda que entre todos lo podamos mejorar!!
ya le voy a preguntar a mi brüder si anda el escaner y los subo.


PD: te basaste en esto para generar la señal? http://electronics.howstuffworks.com/tv9.htm
porq no entiendo como obtenes los 0.5V y 2V para hacer un blanco o un negro :S

la verdad es que me leí varios artículos, creo que las R son parecidas al pong, pensaba que los niveles eran: blanco 1V, negro 0,3V y pulso de sincronismo 0V. mas o menos lo calculé así y el blanco se vé como tal.
si tenemos que la entrada de video del tele es 75 ohms.

Los niveles de salida son: Blanco: sincro H, video H        V=0,78V  Un nivel de blanco o gris aceptable.
                                      negro:  sincro H, video L        V=0,31V
                 pulso de sincronismo:  sincro L, video L        V=0V

Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 15 de Agosto de 2008, 16:00:07
Claro, no tuve en cuenta la impedancia del tele, con razon no me cerraban los calculos jeje.
Con respecto a los diagramas, no te hagas problema, con una explicacion del funcionamiento del programa en general me basta. Las subrutinas y todo eso pensandolas un poco las saco.
Justamente quiero usar lo q hiciste de base para ver q puedo hacer yo ;)

saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 15 de Agosto de 2008, 19:22:57
Sos un capo flaco, lo que hace un papel, lápiz y ganas de armar un rompecabezas  :-/ :-/ :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 18 de Agosto de 2008, 14:31:19
   Que lata  :(

   Despues de mirar y mirar y sacar cálculos lo máximo que se puede sacar con un pic corriendo a 20 mhz es una imagen de 128 pixeles de ancho ocupando toda la pantalla.
Mirando el assembler de FlacoClau veo que a él le sucede lo mismo.

   Esto implica que los pixeles son muy grandotes, piensen ustedes que un ícono de los que tenemos en el escritorio de la computadora, que hoy por hoy tienen unos 32 x 32 pixeles, ocuparía un cuarto de la pantalla (inaceptable).
Cada ves me maravilla más lo que hacían con los famosos home computer de los '80, corrían a 3 o 4 mHz y le sacaban hasta 300 pixeles ¡¡¡ increible !!!
El tema no va por depurar el código, las frías cifras muestran que tenemos 52.6 us para poner pixeles en la pantalla, y a 20 Mhz el pic logra ejecutar 263 instrucciones en ese tiempo, haciendo "magia" y logrando usar dos instrucciones por pixel solo podríamos sacar 130 pixeles.

   En todo caso para emular el GLCD en 128x64 y blanco y negro podríamos sacarlo adelante, (Siempre pensando que tendremos pixeles bien rellenitos), pero para algo más fino, necestiamos más velocidad, o bien un chip dedicado a la generación de imagen (que es la solución ocupada por los home computers que mencionaba).

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 18 de Agosto de 2008, 15:35:37
Cada ves me maravilla más lo que hacían con los famosos home computer de los '80, corrían a 3 o 4 mHz y le sacaban hasta 300 pixeles ¡¡¡ increible !!!

Ya somos dos los maravillados. Estoy a punto de comprarme una Talent MSX 200 que hay en una subasta, solo por el placer de darle una mirada cada tanto :)

En todo caso para emular el GLCD en 128x64 y blanco y negro podríamos sacarlo adelante, (Siempre pensando que tendremos pixeles bien rellenitos), pero para algo más fino, necestiamos más velocidad, o bien un chip dedicado a la generación de imagen (que es la solución ocupada por los home computers que mencionaba).

Tenes toda la razon.
De todos modos, 128x64 para algun juego sencillo puede andar....no vamos a hacer el Doom, pero un tetris o alguna cosilla asi deberia ir bien. :)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 19 de Agosto de 2008, 18:22:28
Hola gente: Sigo con el tema de la emulación y también ando algo escaso de tiempo, pero no deja de molestarme la mosca en la cara  :D :D :D
El tema es como dice Savage, el 18f452 en el momento de mostrar los pixels no puede hacer otra cosa, si bien la ram sale al video como en una glcd, tenemos que ver como cargarle los datos en dicha ram. Hay unas 62 líneas antes y otras 62 líneas después en las que el micro no tiene más que invertir el pulso de sincronismo, cargar el tmr0 y cambiar algunas banderitas.

Ahora ¿como hacemos para que el micro central no envíe datos cuando el micro está ocupado?

se me ocurre que algún pin libre se puede utilizar como indicador de busy, por lo que se pueden tocar un poquito las librerías de GLCD para que espere a que este pin indique que puede continuar la comunicación.

La otra es hacer el emulador con dos micros, el primero que reciba los datos y organice la memoria interna de acuerdo a estos datos o directivas que reciba, el segundo micro se encarga exclusivamente de sacar el video y los pulsos de sincronismo, y de recibir los datos ya masticados por el primero.
Esta segunda opción es la más prolija hacia el exterior, pero la menos económica. Y creo que ya nos estaría saliendo mas caro el collar que el perro.

Otra idea es como dijo el amigo Savage utilizar alguna ram externa y un par de micros mas simples, igual que en la anterior, uno que gestione los datos como un buffer de la ram, y otro que haga el video y lea esta ram ya organizada.

La cuarta ya se me escapa de las manos, por ahora y es pasarse a una gama mas alta, pero no sé los precios y creo que a muchos no les va a entusiasmar tener que trabajar con algún DSpic. Aunque como son diseñados para este tipo de señales creo que lo lógico es utilizar uno de estos.

Por ahora sigo con el programa original y ya le mejoré otra cosita, un retardo que estaba hecho con bucle ahora está con el TMR1 y el sincronismo sigue el TMR0.
Todo esto para optimizar tiempos.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 19 de Agosto de 2008, 19:54:14
Ariel, esta es una parte de tus librerías, las podrías modificar según explico en la misma? lo que pasa es que no sé como se hace  :mrgreen:
creo que modificando estas dos partes tendríamos algo compatible entre el glcd y el tv.
Necesitaría un pin para el tema de BUSY y otro para indicarle al micro principal que lo que está conectado es una glcd o este emulador (le llamamos CHECK a dicho pin)
Este pin puede ser un jumper, swich o mejor una resistencia de 1k a VCC en la misma placa del adaptador, en la placa principal le ponemos una resistencia de 10k a masa, cuando la placa emuladora se conecta tira a positivo la tensión de este pin y le indica que la librería cambia o que trabaje con el pin de busy.

Código: C
  1. //-----------------------------------------------------------------------
  2. // Lee un byte de una de las dos mitades de la pantalla
  3. //-----------------------------------------------------------------------
  4. BYTE GLCD_leeBYTE(int1 lado)
  5. {
  6.    BYTE dato;
  7.    set_tris_d(0xFF);          // Puerto D como entrada
  8.    output_high(GLCD_RW);      // GLCD en Modo lectura
  9.  
  10.    // Selecciono la mitad del display a leer.
  11.    if(lado) output_high(GLCD_CS2);
  12.        else output_high(GLCD_CS1);
  13.  
  14.  
  15. //Si Check está a uno en lugar del delay_us(1) hacemos que espere a que el pin BUSY se ponga a cero.
  16. //En caso de que el pin check esté a cero ignora la señal de BUSY y hace el retardo de 1us.
  17.  delay_us(1);           // Espero...
  18.  
  19.  
  20.    output_high(GLCD_E);       // Pongo en alto el pin enable y...
  21.  
  22.  
  23. //Si check=1 espera a que Busy se ponga a 1.
  24. //Si check=0 hace un delay de 2us.
  25.    delay_us(2);           // ...espero.
  26.  
  27. //de nuevo si check=1 espera a que busy se ponga a cero.
  28.  
  29.  
  30.  
  31.    dato = input_d();          // Guardo en "dato" el valor devuelto y...
  32.    output_low(GLCD_E);        // ...pongo en bajo el pin enable.
  33.  
  34.    // Vuelvo a poner en bajo las lineas CS1 y CS2.
  35.    output_low(GLCD_CS1);
  36.    output_low(GLCD_CS2);
  37.  
  38.    return dato;


Código: C
  1. //-----------------------------------------------------------------------
  2. //Escribe un byte en una de las mitades de la pantalla (lado=0:izq Lado=1:der)
  3. //-----------------------------------------------------------------------
  4. void GLCD_enviaBYTE(int1 lado, BYTE dato)
  5. {
  6.    if(lado) output_high(GLCD_CS2);  // Selecciono la mitad correspondiente
  7.       else  output_high(GLCD_CS1);
  8.  
  9.    output_low(GLCD_RW);       // Modo escritura
  10.    output_d(dato);            // Coloco el dato en el puerto y...
  11.  
  12.  
  13. //Si Check está a uno en lugar del delay_us(1) hacemos que espere a que el pin BUSY se ponga a cero.
  14. //En caso de que el pin check esté a cero ignora la señal de BUSY y hace el retardo de 1us.
  15.  
  16.  
  17.    delay_us(1);           // ...espero.
  18.    output_high(GLCD_E);       // Pongo el bit Enable en alto y...
  19.  
  20.  
  21. //Si check=1 espera a que Busy se ponga a 1.
  22. //Si check=0 hace un delay de 2us.
  23.    delay_us(2);           // ...espero.
  24.  
  25. //de nuevo si check=1 espera a que busy se ponga a cero.
  26.  
  27.  
  28.    output_low(GLCD_E);        // Pongo el bit Enable en bajo.
  29.  
  30.    output_low(GLCD_CS1);      // Libero la linea CS1 y...
  31.    output_low(GLCD_CS2);      // CS2.
  32. }
Título: Re: Generador de imagenes de video con PIC
Publicado por: Sispic en 20 de Agosto de 2008, 02:47:37
Yo use una vez el modulo spi para generar video , si es solo para blanco y negro .

mientras  envia 8 bits te puedes permitir mas ciclos para ir cogiendo el siguiente valor y poder tener mas pixels por linea .

Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 20 de Agosto de 2008, 02:52:48
Interesante idea!! :-/
como es eso? le tiras el bit y directamente sale al pin?
sin bit de inicio y esas cosas como la usart?

Cuentanos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Sispic en 20 de Agosto de 2008, 15:06:52
Hay que hacer los sincronismos igualmente , la salida spi solo se usaria en el tiempo "video" usease impresion de pixels  .

Bien sincronizado se ahorra mucho ya que no hay que rotar el byte  . se carga el valor al bufer y sale solito por el pin out , pixel a pixel .

si ahorras por ejemplo un ciclo ya tienes el doble de resolucion .


Aqui usé 2 modulos spi : uno para cada color  , y aunque es 33FJ ...con pic 16 ó 18 sera lo mismo con menos resolucion

(http://www.winpic800.com/proyectos/ds_vga_gen/vga_640_480_con2.jpg)

Solo es una idea , quizas pueda ayudar .






Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 20 de Agosto de 2008, 16:02:15
Si si culpa tuya me puse a leer!! :D
Te ahorras muchos ciclos, ya que básicamente es un shift register,  muy buena idea, ni se me hubiera ocurrido.
El problema en este caso es ajustar correctamente la frecuencia del clock del mssp, el otro es que hay que reorganizar la ram nuevamente, todo es cuestión de pensar, gracias sispic.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 20 de Agosto de 2008, 21:52:34
Muy buena idea, desconocía que el SPI podía alcanzar los 5 Mbps a 20Mhz, eso permitiría lograr unos 256 pixeles de ancho, por desgracia el 16f648A no lo incluye, pero el 16F877A y el 18F2550 sí lo tienen, de esa manera ya podríamos lograr algo mejorcito.
Muy buen aporte Sisipic.

Me queda una duda, según el datasheet del 16F877A a 40 MHz se pueden alcanzar 10 Mbps, lo cual es consistente, pero el datasheet del 18F2550 bajado directamente de Microchip, dice que a 48 Mhz se lograna 2 Mbps, y según mis cálculos deberían ser 12 Mbps.
Sispic, ya que tu conoces mejor los 18F2550 ¿nos podrías aclarar si esto es un error del datasheet o es correcto?

Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Javicho en 20 de Agosto de 2008, 22:32:13
16F877A a 40MHz? a lo mucho trabaja a 20Mhz. Mas bien el PIC18F2550 a 40MHz alcanza 10Mbps y a 48MHz alcanza 12Mbps.

Javicho.
Título: Re: Generador de imagenes de video con PIC
Publicado por: SavageChicken en 20 de Agosto de 2008, 22:58:26
Hola  Javicho.

Estoy citando datos del datasheet de ambos microcontroladores, aunque se que el 16F877A llega solo a los 20 Mhz.
Salud  8)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 21 de Agosto de 2008, 02:16:12
Javicho tiene razón, con el 16F877 llegarás a 5MIPS y con el 18F2550 llegarás a 12MIPS.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Sispic en 21 de Agosto de 2008, 03:40:11
Pero hay que contar la limitacion de por ""ejemplo 2 "" ciclos que es lo que se tarda en cargar un nuevo byte al modulo una vez enviado .
Ya que si el spi va  rapido  y tardamos mucho en cargarlo , veremos en la pantalla franjas negras entre bytes .
El spi habria que configurarlo a la velocidad que se toma en cargar un byte en el .



Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 22 de Agosto de 2008, 13:13:03
Pero hay que contar la limitacion de por ""ejemplo 2 "" ciclos que es lo que se tarda en cargar un nuevo byte al modulo una vez enviado .
Ya que si el spi va  rapido  y tardamos mucho en cargarlo , veremos en la pantalla franjas negras entre bytes .
El spi habria que configurarlo a la velocidad que se toma en cargar un byte en el .

O si nó configurar un TMR para que lo cargue en el momento justo.

Bueno ya modifiqué las librerías de Ucontrol para este bichito.
los pines se pueden cambiar en el principio de la misma.

Código: C
  1. //Pines a usar
  2. #define GLCD_CS1     PIN_E2
  3. #define GLCD_CS2     PIN_E1
  4. #define GLCD_DI      PIN_C3
  5. #define GLCD_RW      PIN_C2
  6. #define GLCD_E       PIN_C1
  7. #define GLCD_RESET   PIN_E0
  8. #define GLCD_BUSY    PIN_C4
  9. #define GLCD_CHECK   PIN_C5
  10.  
  11.  
  12.  
  13. //Lados del GLCD
  14. #define GLCD_lado_CS1   0
  15. #define GLCD_lado_CS2   1
  16.  
  17. BYTE GLCD_leeBYTE(int1 lado);
  18.  
  19. //-----------------------------------------------------------------------
  20. //Escribe un byte en una de las mitades de la pantalla (lado=0:izq Lado=1:der)
  21. //-----------------------------------------------------------------------
  22. void GLCD_enviaBYTE(int1 lado, BYTE dato)
  23. {
  24.    if(lado) output_high(GLCD_CS2);  // Selecciono la mitad correspondiente
  25.       else  output_high(GLCD_CS1);
  26.      
  27.      
  28.    output_low(GLCD_RW);       // Modo escritura
  29.    output_d(dato);            // Coloco el dato en el puerto y...
  30.    
  31.    if(input(GLCD_CHECK)) while ( input(GLCD_BUSY) );
  32.       else delay_us(1);           // ...espero.
  33.      
  34.    output_high(GLCD_E);       // Pongo el bit Enable en alto y...
  35.    
  36.    if(input(GLCD_CHECK)) while ( !input(GLCD_BUSY) );
  37.       else delay_us(2);           // ...espero.
  38.    
  39.    if(input(GLCD_CHECK)) while ( input(GLCD_BUSY) );
  40.  
  41.    output_low(GLCD_E);        // Pongo el bit Enable en bajo.
  42.  
  43.    output_low(GLCD_CS1);      // Libero la linea CS1 y...
  44.    output_low(GLCD_CS2);      // CS2.
  45. }
  46.  
  47.  
  48. //-----------------------------------------------------------------------
  49. // Lee un byte de una de las dos mitades de la pantalla
  50. //-----------------------------------------------------------------------
  51. BYTE GLCD_leeBYTE(int1 lado)
  52. {
  53.    BYTE dato;
  54.    set_tris_d(0xFF);          // Puerto D como entrada
  55.    output_high(GLCD_RW);      // GLCD en Modo lectura
  56.  
  57.    // Selecciono la mitad del display a leer.
  58.    if(lado) output_high(GLCD_CS2);
  59.        else output_high(GLCD_CS1);
  60.        
  61.    if(input(GLCD_CHECK)) while ( input(GLCD_BUSY) );
  62.       else delay_us(1);           // ...espero.
  63.  
  64.    output_high(GLCD_E);       // Pongo en alto el pin enable y...
  65.    
  66.    if(input(GLCD_CHECK)) while ( !input(GLCD_BUSY) );
  67.       else delay_us(2);           // ...espero.
  68.      
  69.    if(input(GLCD_CHECK)) while ( input(GLCD_BUSY) );
  70.  
  71.    dato = input_d();          // Guardo en "dato" el valor devuelto y...
  72.    output_low(GLCD_E);        // ...pongo en bajo el pin enable.
  73.  
  74.    // Vuelvo a poner en bajo las lineas CS1 y CS2.
  75.    output_low(GLCD_CS1);
  76.    output_low(GLCD_CS2);
  77.  
  78.    return dato;
  79. }

también ya está listo el asm para el generador de video (adjuntado), con carga y lectura de datos, carga de ejes x e y en cada sector. encendido y apagado del mismo.
le falta el tema del eje Z, el pin de reset y leer el byte de status.
También se pueden cambiar los pines en los #define del principio.

mas tarde posteo el circuito recomendado, con sus resistencias y todo.

Tengo un par de dudas, la primera es que sucede en una glcd convencional cuando se pone en bajo el pin de reset, se borra toda la ram?
ya que en el datasheet no está aclarado y me gustaría saber sus experiencias para implementarlo.

Otra duda que tengo es cuando el eje y pasa del valor 63 y se vuelve a cero, ¿cambia de línea? o ¿vuelve al principio de la misma?
creo que es la segunda opción pero no estoy seguro.

saludos!





Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 22 de Agosto de 2008, 13:32:36
Ariel, esta es una parte de tus librerías, las podrías modificar según explico en la misma? lo que pasa es que no sé como se hace  :mrgreen:

Esta noche me pongo. Como veras, entro poquisimo aca, pero eso ya está por cambiar! :)

De paso...miren esto:

http://belogic.com/uzebox/

(http://belogic.com/uzebox/images/megatris_small.jpg)

(http://belogic.com/uzebox/images/test1.jpg)

(http://belogic.com/uzebox/images/board_reverse_small.jpg)

¿No es impresionante?
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 22 de Agosto de 2008, 14:54:38
 :shock: :shock: :shock: :shock:

Usa un chip dedicado a la generación del video.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Javicho en 22 de Agosto de 2008, 15:08:32
Tengo un par de dudas, la primera es que sucede en una glcd convencional cuando se pone en bajo el pin de reset, se borra toda la ram?
ya que en el datasheet no está aclarado y me gustaría saber sus experiencias para implementarlo.
Otra duda que tengo es cuando el eje y pasa del valor 63 y se vuelve a cero, ¿cambia de línea? o ¿vuelve al principio de la misma?
creo que es la segunda opción pero no estoy seguro.

El GLCD que usas tiene RAM y le guardas datos ahi? si es asi, mejor vuelveselos a cargar despues de resetear por una 2da o 3ra vez el glcd (aunque creo que son raros los casos en el que el glcd ya inicializado se necesite volver a resetearlo depsues).

Cuando Y=63 el siguiente dato enviado va a Y=0 en la misma linea.

Javicho.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 22 de Agosto de 2008, 18:03:10
Gracias muchachos. por los datos.
Ariel!! las librerías ya las modifiqué, ya que estamos mirá si están bien, porfa.

impresionante el juego ese!! lástima que sea con un avr.
que se yo habrá que verlo.
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 01 de Septiembre de 2008, 13:36:31
Bueno me hice una plaquita para conectarla a la entrenadora y ver como funciona el control.
Básicamente 4 fichas para la entrenadora, icsp, reset y salida de video con una rca...

(http://img353.imageshack.us/img353/3831/plaquitadevideoip3.th.jpg) (http://img353.imageshack.us/my.php?image=plaquitadevideoip3.jpg)

 Les dejo el archivito en EAGLE
Aun que no he podido hacer pruebas, ya que vengo corto de tiempo y no doy pie con bola en el CCS.
si alguien quiere compilar algo con las librerías que modifiqué algunos post mas arriba, las unicas condiciones es que sea en un 18f452 18f4550 el puerto d sean los datos y el puerto c el de control, el pin check sería el RC0 o el RC4.
saludos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: jfh900 en 01 de Septiembre de 2008, 16:09:15
En la revista de elektor Nº279 de agosto del 2003 (revista española) trae un juego de tenis realizado con un AVR.

Un saludo
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 07 de Septiembre de 2008, 01:40:09
Bueno gente después de renegar un montón, no porque sea un gran trabajo sino por mi torpeza, pude hacer andar el emulador de GLCD para video!!!!!! :-/ :-/
las primeras imágenes son de un ejemplito que trae el CCS y se llama ex_GLCD y le hice unos toques para que se adapte al emulador, las dós últimas son de las librerías de uControl en los ejemplitos que puso Ariel haciendo unas rayas.
En la plaquita le puse un jumper para invertir el video osea fondo claro y píxels ocuros y viceversa.
Perdón por la calidad de las fotos, la cámara no es muy buena, no es mía y no soy buen fotógrafo, por eso saqué muchas para que se imaginen como se verían en una buena foto.
saludos!!!

(http://img125.imageshack.us/img125/5488/ennegativowr6.th.jpg) (http://img125.imageshack.us/my.php?image=ennegativowr6.jpg)(http://img125.imageshack.us/img125/4405/enpositivoju0.th.jpg) (http://img125.imageshack.us/my.php?image=enpositivoju0.jpg)(http://img58.imageshack.us/img58/2411/1000849sx3.th.jpg) (http://img58.imageshack.us/my.php?image=1000849sx3.jpg)(http://img58.imageshack.us/img58/6562/1000856qc6.th.jpg) (http://img58.imageshack.us/my.php?image=1000856qc6.jpg)(http://img393.imageshack.us/img393/5324/1000860uz2.th.jpg) (http://img393.imageshack.us/my.php?image=1000860uz2.jpg)(http://img356.imageshack.us/img356/7231/1000862wl0.th.jpg) (http://img356.imageshack.us/my.php?image=1000862wl0.jpg)(http://img214.imageshack.us/img214/792/1000867pv1.th.jpg) (http://img214.imageshack.us/my.php?image=1000867pv1.jpg)(http://img87.imageshack.us/img87/2338/1000870kl6.th.jpg) (http://img87.imageshack.us/my.php?image=1000870kl6.jpg)(http://img166.imageshack.us/img166/9131/1000893hr2.th.jpg) (http://img166.imageshack.us/my.php?image=1000893hr2.jpg)
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 07 de Septiembre de 2008, 05:33:46
Magnífico trabajo, Flaco. No quiero ni pensar lo que harás con tu nueva iACD.

Felicidades
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 07 de Septiembre de 2008, 12:00:54
ah nooooo!!! te quedo genial!!!!!!! sos un capo flaco, te felicito!!!!! :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: Leon Pic en 07 de Septiembre de 2008, 13:39:03
Impresionante flaco. felicitaciones.
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 07 de Septiembre de 2008, 16:05:08
Flaco, le he hecho un hueco a tu proyecto en el índice, se lo ha ganado a pulso:
Índice de proyectos (http://www.todopic.com.ar/foros/index.php?topic=14633.msg89354#msg89354)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 07 de Septiembre de 2008, 18:27:47
Hola muchas gracias por semejante honor!!!  :-/ :-/ :-/ :-/ :-/
gracias a todos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: LABmouse en 07 de Septiembre de 2008, 21:54:02
Impresionante!!! Felicitaciones por este gran logro.

Eres un grande y muchas gracias por compartirlo con todos.
Título: Re: Generador de imagenes de video con PIC
Publicado por: NarXEh en 09 de Septiembre de 2008, 13:17:48
Buenas Tardes!

Exelente trabajo!

una pregunta...

Si se dedicara ese microcontrolador exclusivamente para video (digamos que recibe datos ya sean datos o imagenes de otro micro para despues mostrarlos en pantalla) como reconoce el micro lo que es datos e imagen?

perdonenme pero es una duda que me taladra la cabeza  :shock: 

que sigan los progresos!

muchos exitos! :D

saludos!

NärXEh
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 10 de Septiembre de 2008, 02:56:18
Hola Narxeh: no entiendo bien tu pregunta, pero creo que es esto lo que preguntas, este circuitillo emula una GLCD, cuando es un dato a mostrar en pantalla el micro principal le pone en uno un pin llamado DI (dato/instrucción), cuando es un comando lo pone en cero, entonces el GLCD entiende que los bit puesto en su puerto son una orden. ¿era eso? ¿se entiende?

De paso dejo un par de videos que hice jugando con el bichito este, el primero es de un proyecto de un colega que lo dejó en este hilo (http://www.todopic.com.ar/foros/index.php?topic=18198.0), y el otro es de las fotos mostradas más arriba, saludos!!

Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 10 de Septiembre de 2008, 11:40:49
Quedo genial!!!!! ya tenemos placa de video!!! :-/ ahora podemos empezar a programar nuestros juegos jaja.
Flaco, una preguntita, el codigo y el circuito difiere en algo de los de las paginas anteriores? Estaria bueno hacer un resumen de como armar todo, asi ya cada uno se va armando su plaquita :D
saludos y felicitaciones de nuevo!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Cryn en 10 de Septiembre de 2008, 12:15:40
guau flaco, que buen trabajo, felicidades por lograrlo, y muchas gracias por compartirlo :-/

eres un ídolo!, gracias :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 10 de Septiembre de 2008, 14:13:17
Hola gracias gente, ya me pongo y junto todo el material para comprimir y si aparece Ariel le voy a pedir que lo suba al primer post.
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 18 de Septiembre de 2008, 22:09:10
Bueno gente, ya recopilé todo el material indispensable y un poco más, quien quiera disponer de él tiene el link más abajo.
Si algún moderador lo quiere poner en el primer post para que esté a mano y no haya que leer 8 páginas de post, mejor.
Saludos!!!

http://rapidshare.com/files/146616006/Emulador_de_GLCD_para_video.rar.html

Edito: vuelvo a subir el archivo ya que modifiqué un par de cositas al firm, disculpen.
saludos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: LABmouse en 19 de Septiembre de 2008, 19:40:59
Amigo flacoclau, ya esta en el primer POST tal cual como lo pediste.

Gracias por compartirlo con todos!

SALUDOS!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 19 de Septiembre de 2008, 20:23:29
Gracias Ernesto!!!!  :-/ :-/ :-/ :-/
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 22 de Septiembre de 2008, 13:28:26
Muchas gracias muchachos, a todos los q participaron en esto, la verdad q se pasaron. Sobretodo vos flaco, muchas gracias por ponerle tantas ganas y compartir tus logros con nosotros.
Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 24 de Octubre de 2008, 18:11:08
Hola gracias gente, ya me pongo y junto todo el material para comprimir y si aparece Ariel le voy a pedir que lo suba al primer post.
saludos!!
Apareci....tarde :(
Me sigue costando bastante trabajo entrar en el foro. Menos mal que PICMouse estaba atento ;)
Ya me lo bajo y me pongo a leer la documentacion!

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: MGLSOFT en 12 de Noviembre de 2008, 14:26:43
Le agregue una chincheta, porque es muy interesante el tema.
Felicitaciones Claudio!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 12 de Noviembre de 2008, 14:31:38
Gracias Marcos!! te agradezco mucho, en realidad yo solo le dí el puntapié final, porque todos han colaborado con trabajo y documentación, que sin ello esto no se hubiera logrado.
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: JOJOJORGE5 en 14 de Junio de 2009, 21:45:08
Hola

flacoclau intente implementar el circuito que esta muy interesante pero no consegui el pic 18f452. que tendria que modificar para que funcione en un pic 18f4550.
de este tengo algunos.

felicidades aunque tarde.

salu2:)
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 14 de Junio de 2009, 22:15:26
 Hola JOJOJORGE, en principio creo que no hay que modificar nada de la placa, me parece que los micros son compatibles pin a pin, solo en el programa el encabezado, no sé el tema del oscilador y la parte de las interrupciones si difieren.
 Ahora no tengo mucho tiempo como para ver el tema y darte una respuesta precisa, saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: JOJOJORGE5 en 14 de Junio de 2009, 23:24:36
Hola

flacoclau gracias por responder
 si es nesesario modificar el hardware en concreto el pin 18  en el pi18f4550 es de uso exclusivo para el regulador de tension del USB.
en el software se debe de modificar tambien aparte de reasignar el pin otras cosas mas.

de todas formas de momento tratare de conseguir el pic y si no lo encuentro tratare de modificar el codigo

salu2:)
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 28 de Junio de 2009, 22:02:33
Hola!!! Les cuento q ya arme la plaquita y quedo joya!! (mas tarde subo unas fotos :D)
El tema ahora es q quiero probarla con un pic16f877, pero no se bien como tiene q ser el circuito y el programa.
Probe con el programa de ejemplo q habia en el archivo EX_GLCD.C y le descomente estas lineas
Código: [Seleccionar]
#if defined(__PCM__)
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
Y puse en la misma carpeta la libreria "HDM64GS12_modificada.c". Pero me tira muchos errores.
Me pueden orientar un poco porfa?
Gracias!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 29 de Junio de 2009, 23:38:56
 Hola Gera: !que bueno que hayas armado tu plaquita!!  :-/ :-/
Lo que no entiendo es si aún no la puedes hacer funcionar.
lo que tenés que ver, por ejemplo, no le habilites el fast glcd ya que el 877 no tiene suficiente ram interna como para esta función.
vamos a empezar por allí.
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 30 de Junio de 2009, 12:40:53
Hola flaco!! gracias por responder! :D
Todavia no lo he hecho funcionar. Acabo de hacer una prueba y como q quiere, se ven unas imagenes flasheras cada tanto, pero no funca. El fast glcd esta deshabilitado. Supongo q el problema esta en el firmware 16f877a, o en el hardware.
En lugar de poner conectores IDC macho, puse unos hembra para poder salir a una proto ya que no tengo ninguna entrenadora. Estoy pensando seriamente en hacerme una jeje.
Subo unas fotos.
(http://img142.imageshack.us/img142/1586/3006091225.th.jpg) (http://img142.imageshack.us/i/3006091225.jpg/) (http://img7.imageshack.us/img7/5092/3006091226.th.jpg) (http://img7.imageshack.us/i/3006091226.jpg/)
Gracias!!!

PD: el 877 esta corriendo el ejemplo q viene en CCS como esta, sin librerias modificadas ni nada.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 30 de Junio de 2009, 19:35:15
se ven unas imagenes flasheras cada tanto, pero no funca.
 :D :D
PD: el 877 esta corriendo el ejemplo q viene en CCS como esta, sin librerias modificadas ni nada.

pero tienes que utilizar las librerías modificadas...
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 30 de Junio de 2009, 19:59:41
Hola Gera acá te dejo un adjunto para el 877, probalo a ver si funciona.
Esperemos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 30 de Junio de 2009, 20:41:36
Hola flaco!!
Ahi lo probe y mejoro. Se ve un rectangulo blanco, pero nada se mueve. Ahora q veo q decis q hay q usar las librerias modificadas veo por donde viene el problema. Resulta q no estaba usando los pines check, busy y reset.
Te cuento como lo tengo conectado a ver si ves el problema:
D/I - B2
R/W - B4
Enable - B5
D0 - D7 - al puerto D
CS1 - B0
CS2 - B1
Reset - C0
CHECK - C0   --> aca hay un problema jeje
BUSY - C1

Muchas gracias por tu ayuda!!! un saludo!!

EDIT: estuve leyendo unos posts para atras y veo q los pines de control van al puerto C. Pero no se exactamente como.
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 02 de Julio de 2009, 00:51:57
 Ok Gera! si ya se vé un cuadrado blanco en la pantalla significa que el 18f452 está vivo y generando la señal de video, y que además tiene su ram en blanco por lo que no está recibiendo los datos.

 Te cuento más o menos como funciona el sistema para que le busquemos la vuelta.
 El programa del 18f452 es bastante simple, está compuesto por tres partes bien definidas:

-El programa principal o "Main" que se encarga de recibir los datos y comandos desde el otro micro (en tu caso el 16f877) como lo haría una GLCD y almacenar dichos datos dentro de la misma RAM del 18F452. Luego en otra parte del programa irá leyendo esta porción de la Ram y la sacará a través del puerto de video.

-Una interrupción por TMR0 donde se maneja la señal de sincronismo y algunos contadores para saber que se está haciendo y que se deber hacer en la próxima interrupción.

-Una interrupción por TMR1 donde se presentan los datos leídos en la ram (en forma serial a través del pin VIDEO).

Ahora para mantener la imagen estable en la pantalla se deben respetar los tiempos de sincronismo y video, por lo que este micro debe dar prioridad a estas señales por sobre la otra tarea que es recibir los datos desde el exterior, por lo tanto en el momento de estar ocupado le avisa al otro micro que espere con las transacciones mediante el pin BUSY, que se pondrá en alto.

Ahora con el tema del pin Check no es necesario, ya que si te fijas es simplemente una resistencia a +5V, esto se implementó para el proyecto de la consola de juegos para saber si tenía una GLCD verdadera o este aparatejo que te acabas de armar.  :D :D por lo tanto solo utiliza el pin BUSY.

Los demás pines son los mismos que utiliza una GLCD común D1 al D7, D/I, R/W, Enable, CS1, CS2 y Reset, aunque esta última función (reset) tampoco está implementada en el programa.

El HEX que te envié un par de post antes está configurado así:

D0 - D7 Puerto D

RESET RC0

BUSY RC1

CS1 RC2

CS2 RC3

D/I RC4

R/W RC5

Enable RC6

Conectalo así a ver que pasa.

Saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 02 de Julio de 2009, 02:29:31
Flaco, mil gracias por la explicacion y por la paciencia!! :-/
Ahi lo conecte como corresponde y lo probe.. quiere, quiere, pero todavia le falta. Se empieza a ver algo parecido a lo q se tiene q ver, pero como q carga la imagen muuuuuuy lentamente. Practicamente se ve el refresco q haria una glcd.

(http://img291.imageshack.us/img291/7303/0207090143.th.jpg) (http://img291.imageshack.us/i/0207090143.jpg/)

El pic16f877a lo tengo funcionando a 20MHz, no creo q se este quedando corto. Tengo mis sospechas sobre el montaje en la proto, asiq voy a ver de armarme una entrenadora para usar los cables ide (nunca fallan) y me aseguro q esta todo conectado como debe.
Un saludo y gracias nuevamente!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 02 de Julio de 2009, 14:33:17
Gera no creo que sea drama de la proto, me parece que es el soft de la plaquita, ya que siempre lo utilicé con micros de la gama media como principal, osea en lugar de un 877 utilicé alguno con más de 1k de memoria ram, por ejemplo otro 18f452 o un 18f4550. y aquí creo que viene el problema que tienes ahora, de esta manera utilicé siempre la función fast Glcd.
si tenés algún otro por ahí de estas características probalo y me contás como cambia la velocidad de refresco.
también el tema de que no esté dibujando bien, creo es un error del firm, que me parece ocurre cuando el principal lee desde el emulador.
nos vemos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 02 de Julio de 2009, 15:29:08
Tengo un 18f4550 dando vueltas por ahi. Voy a probar con ese y te cuento q onda.
Saludos!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 13 de Julio de 2009, 00:18:48
Buenas!!! De vuelta por aca. Entre pitos y flautas me deje estar con esto, y ahora lo retomo. Ahi encontre el 18f4550, y cuando me dispuse a compilar el ejemplo, me saltaron estos errores:

Código: [Seleccionar]
*** Error 12 "C:\Archivos de programa\PICC\drivers\HDM64GS12_modificada.c" Line 316(17,18): Undefined identifier  -- delay_cicles
*** Error 12 "C:\Archivos de programa\PICC\drivers\HDM64GS12_modificada.c" Line 322(17,18): Undefined identifier  -- delay_cicles
*** Error 12 "C:\Archivos de programa\PICC\drivers\HDM64GS12_modificada.c" Line 354(17,18): Undefined identifier  -- delay_cicles
*** Error 12 "C:\Archivos de programa\PICC\drivers\HDM64GS12_modificada.c" Line 359(17,18): Undefined identifier  -- delay_cicles
*** Error 12 "EX_GLCD.c" Line 52(20,30): Undefined identifier   RA0_ANALOG
      5 Errors,  0 Warnings.

La cabecera q estoy usando es esta:
Código: C
  1. #include <18F4550.h>
  2. #fuses HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock=20000000)
  4. #define FAST_GLCD

Y puse las librerias modificadas en la carpeta de drivers del CCS. La verdad q no me llevo con estos compiladores. Alguien me puede decir donde le estoy errando??
Gracias!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 13 de Julio de 2009, 01:44:41
Hola Gera: En donde dice delay cicles reemplazalo por delay_us y el último error no lo sé, como que ha cambiado alguna denominación.
saludos.
Título: Re: Generador de imagenes de video con PIC
Publicado por: cerebro en 13 de Julio de 2009, 12:45:34
El ultimo error salta cuando estas utilizando mal los parámetros de la función setup_adc_ports(); ponele AN0.
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 14 de Julio de 2009, 00:11:21
Buenisimo, ahi hice esos cambios y compilo!! Pero sigue sin funcionar :( solo se ve un rectangulo blanco. Tambien probe compilando los demas ejemplos, pero nada.
La plaquita la tengo conectada al pic trainer de Ariel. Por lo q vi en los esquemas, es compatible con tu entrenadora flaco, asiq no creo q sea problema de mala conexion. (con esto de los cables ide no hay forma de equivocarse).

Algo curioso, es q cuando apreto el boton de reset de la plaquita q genera la señal de video, sigue generando la imagen. Y cuando desconecto el jumper, la imagen no se vuelve negra, salvo q le quite la alimentacion y lo vuelva a conectar. Esto es normal? o puede q esta placa tenga algun problema?

Pido disculpas por venir molestando tanto... es q me pone muy mal cuando las cosas no funcionan. Mil gracias por su ayuda!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 14 de Julio de 2009, 19:48:45
Hola Gera: 1º Tu consulta no molesta para nada, 2º no me acuerdo si había que resetear  :D :D
posta ya me fijo en el soft
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 17 de Julio de 2009, 02:19:58
  Hola Gera: Estuve viendo el programa y efectivamente se debe resetear el 18f452 para que te quede la pantalla invertida en color.
  En el caso de que el otro micro que controla al 18f452 utilice la opción fast GLCD no será necesario este reset, esto es porque el firm lee el jumper "INV" cada vez que debe guardar o leer un dato en la ram hacia o desde el puerto de datos, no así con la salida de video, esto se hace así por un problema de tiempos.

  Para que tengas una idea más clara el sistema es así: arranca el programa del 18f452 y junto con todo el resto de la inicialización, lee el jumper y carga toda la ram con ceros o unos según sea el caso, luego en el main cada vez que se solicita desde el otro micro la escritura o lectura de la RAM también verifica el pin INV (osea el jumper) y si está en normal los carga o lee tal como están, en caso contrario los invierte.

  También te comento que hace varios meses vengo haciendo una nueva versión del firm, esto es de a ratos y cada mucho tiempo ya que estoy con muchas obligaciones que no me permiten avanzar mucho mas rápido. Esta nueva versión del firm tiene un concepto algo distinto en el manejo del pin BUSY y con interrupciones mucho más cortas sin tantos contadores y flags.
  En la versión anterior el pin busy se ponía en alto cada vez que estaba procesando un dato o instrucción de GLCD y cuando se atendía una interrupción de video, ahora lo que hace es simplemente ponerse en alto hasta que termina de de procesar un pedido del otro micro.
  Con el tema de las interrupciones de generación de video y sincronismo, antes estas se hacían con contadores y tomas de decisiones, ahora lo que hace es leer una gran tabla ya cargada con los tiempos de sincronismo y 4 flags que indican cuando empezar a leer la tabla desde el principio, cuando activar el TMR1 para la salida de los datos hacia el video, si debe rotar o no el byte a sacar y el avance o retroceso de los punteros de direccionamiento indirecto.

Les voy dejando el bosquejo del firm y la librería de CCS aunque aún no está del todo terminado por si alguien le quiere echar un vistazo o mejorarlo, ya que sigo teniendo algunos problemas en el caso de la lectura de datos desde el emulador hacia el otro micro que controla.

Saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: jonathanPIC888 en 30 de Julio de 2009, 17:33:08
Hola flacolau como andas.

Quería saber en los videos que publicaste del emulador del GLCD con que pic generaste las inmagenes que luego enviaste al simulador ??

Que consideraciones tengo que tener a la hora de hacer el programa en C de CCS ??

Que modificaciones le hiciste a la segunda versión del firm ??

Espero no agobiarte con las preguntas  :lol:
Título: Re: Generador de imagenes de video con PIC
Publicado por: gera en 30 de Julio de 2009, 20:42:12
Flaco! recien leo tu respuesta jeje. Creo q el problema de raiz aca es la falta de tiempo. Ya me voy a sentar tranquilo a revisar minuciosamente el circuito y el codigo. No puede ser tan dificil (espero).
Muchas gracias por tu tiempo y la ayuda!!! Saludos!

jonathanPIC888, el pic q uso es un 18f452. En el archivo (http://rapidshare.com/files/146616006/Emulador_de_GLCD_para_video.rar.html) q subio el flaco viene todo lo necesario para hacer funcionar el emulador (pcb, esquematicos, algunos ejemplos en CCS, firmware...).
Suerte!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: KIRIKU en 24 de Agosto de 2009, 20:30:42
buenas tardes flaco, necesito tu colaboración en el emulador, lo he hecho funcionar, pero tengo la necesidad de crear texto, como lo hago con tus librerias, y una pregunta el mico principal puede enviar la señal al emulador y también al glcd
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 24 de Agosto de 2009, 21:55:03
Flaco! recien leo tu respuesta jeje. Creo q el problema de raiz aca es la falta de tiempo. Ya me voy a sentar tranquilo a revisar minuciosamente el circuito y el codigo. No puede ser tan dificil (espero).

Hola Gera: Mirá si lo hice andar yo te aseguro que no es gran cosa!!!   :D :D :D

buenas tardes flaco, necesito tu colaboración en el emulador, lo he hecho funcionar, pero tengo la necesidad de crear texto, como lo hago con tus librerias, y una pregunta el mico principal puede enviar la señal al emulador y también al glcd

Hola Kiriku: la librería modificada adjunta solo sirve para leer o escribir en el emulador y es casi idéntica a la original, con la salvedad del testeo del pin busy, osea espera a que el micro emulador se desocupe para enviar el dato. Para generar imágenes o letras puedes usar la librería Graphics que trae el ccs o alguna otra afín para glcd.

No entendí la segunda pregunta o afirmación que haces, pero por las dudas te respondo:

si lo vas a emplear con una GLCD normal simplemente le cargas al programa la librería sin modificar, osea  vá esta línea: #include <HDM64GS12.c>

si lo vas a emplear con el emulador simplemente le cargas al programa la librería modificada, osea  vá esta línea: #include <HDM64GS12_modificada.c>

Si quieres hacer algo modular, osea que le puedas enchufar una u otra cosa, le debes cargar la librería #include <HDM64GS12_modificada.c> pero de la carpeta "librerías modificadas con el pin CHECK", En la carpeta donde están todas las librerías hay un TXT que se llama ACLARACIÓN y dice lo siguiente:

 "Adjunto las librerías modificadas y sin modificar,
estas librerías son las pertenecientes una a CCS y la otra a la página uCONTROL
www.ucontrol.com.ar

 Verán que hay dos tipos de librerías:
las que tienen un pin más a sensar por el micro central (PIN_CHECK) y las que prescinden de dicho pin.
Este PIN es puesto a Vdd con la intención de hacer algo modular y enchufable,
ya que checkeando este pin, puesto a GND por la placa central y puesto a Vdd por la placa emuladora,
podemos saber si realmente hay una GLCD o un emulador.

          ________
         |             |                     Vdd
         |             |                        |
         |             |                        /
         |    uC     |                        \
         |  central |                        / 1K
         |             |                        \
         |             |                        /  Placa emuladora
         |             |PIN CHECK       |
         |             |------------     ---
          ________           |
                                  /
                                  \
                                  / 10K
                                  \
                                  /
                                  |
                                  -

 En el caso de solo utilizar la placa emuladora se puede prescindir de este pin y por lo tanto se pueden utilizar las
librerías sin el PIN_CHECK.

 También se ha implementado otro pin (PIN_BUSY), motivo de la modificación de estas librerías,
 ya que el micro de la placa emuladora debe atender las interrupciones en el momento de generar los pulsos de sincronismo
 y enviar la imagen de video al TV.

 Se han elegido los pines del puerto D como datos y los pines del puerto C como control, la disposición y puerto de estos
pines se pueden cambiar en los #define del principio de las librerías."

Espero te sea útil, cualquier cosa consultas por aquí.
saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Jesulin en 12 de Marzo de 2010, 13:30:15
hechad un viztazo a este proyecto. Es interesantisimo!
Es con ATMEGA pero creo que servirá para algo!

http://belogic.com/uzebox/index.asp

Mirad el schematic:

http://belogic.com/uzebox/files/Uzebox-rev-C1.pdf

Está dificil encontrar el AD725 por aqui! Alguien sabe de algun componente para substituirlo?!?!!?

Muchas gracias!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Jesulin en 12 de Marzo de 2010, 13:36:27
DIOSSSS!!! Encontre un MC1377 en mi cajón!!!!!!!!!!!!!!!!!!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: uniqdom en 02 de Mayo de 2010, 16:16:04
Hola. Quiero hacer este proyecto en un pic16f877A. Estuve comparando con el 18f452 y según veo, ambos tienen los pines compatibles.
por lo que vi en el documento subido por "flacoclau", el 18f452 estaba funcionando a 10Mhz, y el 16f877A tambien puede funcionar a esa oscilacion.

Modificado: acabo de releer el firmware y en la cabecera dice:
Código: [Seleccionar]
;------------------------------------------------------------
; Nombre del Proyecto: video_18f452
; Fecha: 08/08/2008
; PIC: 18F452
; Cristal: 10 MHz PLLx4
; Velocidad de reloj: 40 Mhz
;------------------------------------------------------------

asi q el cristal usado era de 10 Mhz pero realmente está funcionando a 40 Mhz.



hay alguna posibilidad de que pueda funcionar a 20Mhz?
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 02 de Mayo de 2010, 17:19:53
Hola Unidom: el tema es que un 16f877 a 20 Mhz de reloj, tendrá solo 4Mhz de instrucciones, para este firmware y con la resolución de un glcd necesitas por lo menos 10Mhz en instrucciones.

lo que puedes hacer es modificar el firm y puedes hacer que se vea algo con la mitad de resolución horizontal.
Título: Re: Generador de imagenes de video con PIC
Publicado por: anfegori91 en 04 de Mayo de 2010, 21:45:47
Miren nada más:

http://www.linusakesson.net/scene/phasor/index.php
 :shock: :shock: :shock: sin palabras..
Título: Re: Generador de imagenes de video con PIC
Publicado por: Drod en 04 de Mayo de 2010, 21:54:38
/\
||
||

Como decimos aqui em Brasil... "CARAAAAAMBAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!"  :shock: :shock: :shock: :shock:
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 05 de Mayo de 2010, 00:33:28
WWWOOWWW!!! Está para investigar ese firm!!
Estuve leyendo la página pero no recuerdo mucho de TV color, fué hace 20 años que lo estudié!!!, por lo que veo está muy ingenioso el sistema.
Saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 05 de Mayo de 2010, 01:55:33
Alucinante, realmente increíble que haya metido todo eso en 8K.

Y encima, en lenguaje C. Asombroso.
Título: Re: Generador de imagenes de video con PIC
Publicado por: BrunoF en 08 de Mayo de 2010, 13:30:54
Si. Hay que sacarse el sombrero ante este muchacho. Un maestro.
Título: Re: Generador de imagenes de video con PIC
Publicado por: albermillan69 en 30 de Junio de 2010, 19:19:14
Buenas! soy nuevo usando GLCD!! yo programo en CCS

Quiero enviar una imagen a la GLCD hasta los momentos la envio asi:

for (lineas=0;lineas<=7;lineas++){
   for(x=0;x<=127;x++){
      for(y=0;y<=7;y++)
         glcd_pixel(x,y+yadd,bit_test(foto[contador],y));
         contador+=1;
      }
   yadd=yadd+8;
}

Pero de esta forma la GLCD se carga muy pero muy lenta!

Me gustaria saber como hacer para enviar la imagen mas rapido! creo q es enviando por datos! osea en BYTE

Espero su ayuda.... Utilizo un PIC 18F4550
Título: Re: Generador de imagenes de video con PIC
Publicado por: albermillan69 en 30 de Junio de 2010, 19:43:46
Buenas! soy nuevo usando GLCD!! yo programo en CCS

Quiero enviar una imagen a la GLCD hasta los momentos la envio asi:

for (lineas=0;lineas<=7;lineas++){
   for(x=0;x<=127;x++){
      for(y=0;y<=7;y++)
         glcd_pixel(x,y+yadd,bit_test(foto[contador],y));
         contador+=1;
      }
   yadd=yadd+8;
}

Pero de esta forma la GLCD se carga muy pero muy lenta!

Me gustaria saber como hacer para enviar la imagen mas rapido! creo q es enviando por datos! osea en BYTE

Espero su ayuda.... Utilizo un PIC 18F4550

Solucion:

contador=0;
for(i = 0; i < 8; ++i)
   {
      output_low(GLCD_DI);                      // Set for instruction
      glcd_writeByte(GLCD_LEFT, 0b01000000);    // Set horizontal address to 0
      glcd_writeByte(GLCD_RIGHT, 0b01000000);
      glcd_writeByte(GLCD_LEFT, i | 0b10111000);// Set page address
      glcd_writeByte(GLCD_RIGHT, i | 0b10111000);
      output_high(GLCD_DI);                     // Set for data
     
   for(x=0;x<128;x++){
      if(x>=64){glcd_writebyte(glcd_right,foto[contador]);}
      else{glcd_writebyte(glcd_left,foto[contador]);}
      contador++;
      }
   }

Solo modifique la rutina glcd_fillScreen

Aunque todavia no se q es lo q hace :
output_low(GLCD_DI);                      // Set for instruction
      glcd_writeByte(GLCD_LEFT, 0b01000000);    // Set horizontal address to 0
      glcd_writeByte(GLCD_RIGHT, 0b01000000);
      glcd_writeByte(GLCD_LEFT, i | 0b10111000);// Set page address
      glcd_writeByte(GLCD_RIGHT, i | 0b10111000);
      output_high(GLCD_DI);                     // Set for data
     
Título: Re: Generador de imagenes de video con PIC
Publicado por: manutek en 27 de Octubre de 2010, 23:35:20
aca otro link para dspic con fuente y esquemas
http://benryves.com/journal/3682170
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 14 de Noviembre de 2010, 19:21:13
Hola amigos!

Existe un sitio ruso en el que su autor ha logrado una buena imagen VGA (solo texto, 30x30 caracteres de 8x16 pixeles en 16 colores) con solo un PIC18F de 28 pines y poco mas.

Lo he armado, y anda perfecto. De hecho, hasta hemos preparado un articulo para el próximo número de la revista uControl (http://www.ucontrol.com.ar/forosmf/novedades-en-ucontrol/). Aqui posteamos una explicación sobre este proyecto (http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/), y se las transcribo por si les resulta de utilidad  :lol:


Generar señal VGA con un PIC 18Fxxxx

Casi todos hemos intentando alguna vez utilizar un microcontrolador para generar una señal de vídeo compatible con un monitor VGA, utilizados por la mayoría de los ordenadores. Se trata de una buena idea, que puede dotar a nuestros proyectos de una pantalla “de verdad”, barata, grande, brillante y en colores. Sin embargo, no se trata en absoluto de una tarea sencilla: los breves tiempos implicados en la generación de cada píxel hace que sea un objetivo muy difícil de lograr. A lo largo de este artículo intentaremos proporcionarte información útil para que puedas encarar con éxito ese desafío.



Cuando un producto de cualquier tipo se fabrica en enormes cantidades, su costo disminuye notablemente. Ese es, sin dudas, el caso de los monitores utilizados en los ordenadores personales. Los monitores VGA, sobre todo aquellos más viejos que utilizan como elemento de imagen un tubo de rayos catódicos, pueden conseguirse por muy poco dinero, e incluso, si buscamos un poco, gratis. Ante este panorama surge inevitablemente la idea de “usarlos para algo”, y como nuestra pasión es la electrónica, lo más natural del mundo es intentar convertirlos en parte de nuestros proyectos. Si lográsemos generar las señales adecuadas, podríamos utilizar estas pantallas como “display” en cualquiera de nuestros proyectos. Desafortunadamente, esto no es algo sencillo. Basta con buscar un poco por la red para darse cuenta de que solo hay un puñado de proyectos destinados a generar imágenes de vídeo compatibles con monitores VGA, y la mayoría de ellos simplemente generan barras de color, o imágenes en blanco y negro de muy baja resolución. Sin embargo, es posible crear imágenes y texto en colores, con pocos componentes, un microcontrolador y el programa adecuado.

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6929)
Figura 1:“Podemos utilizar un monitor VGA como parte de nuestros proyectos.”

A lo largo de este articulo vamos a intentar proporcionar las bases necesarias para que puedas desarrollar un dispositivo pequeño y barato, capaz de recibir ordenes a través de un puerto SPI y desplegar texto -en colores- sobre un monitor VGA. Uno de los mejores trabajos que se pueden consultar sobre como generar estas señales -y el resto de los parámetros de la imagen- con un microcontrolador PIC18 es el de Victor Timofeev (http://www.pic24.ru/), en el que nos hemos basado para escribir esto y cuya lectura recomendamos fuertemente. El sitio de Victor está en ruso (algunas partes en inglés), pero es posible lograr una traducción bastante decente utilizando Google Translator.

La imagen VGA
Lo primero que necesitamos conocer -y al detalle- es la forma en que uno de estos monitores genera su imagen. No debemos olvidar que no intentamos utilizar una placa VGA como la que poseen los ordenadores para generar la imagen, sino que nuestro proyecto debe encargarse de proporcionar al monitor las señales adecuadas para que este muestre lo que queremos. Esto significa que conceptos como “segmento de memoria de vídeo” o “modo 13” -propios de los adaptadores VGA mencionados- no tienen ninguna utilidad para nosotros. Necesitamos enviar al monitor, en el momento exacto, la información necesaria para que este pueda “dibujar” cada píxel que conforma la imagen.

Un monitor VGA común puede ser controlado utilizando solo 5 lineas: dos de sincronismo (horizontal y vertical) y tres señales analógicas (rojo, verde y azul). Las señales de sincronismo, como su nombre lo indica, sirven para que el monitor “sepa” cuando se encuentra en el comienzo de un cuadro o de una linea. Las señales analógicas correspondientes a cada color permiten variar la intensidad del los mismos simplemente variando su voltaje. Al menos en teoría, combinando correctamente el valor de tensión aplicado a las tres lineas analógicas se puede obtener cualquier color que deseemos. En la práctica, la velocidad de nuestro microcontrolador y las características de nuestro conversor digital-analógico determinarán la cantidad de colores que podemos mostrar. La imagen se dibuja linea a linea, de arriba hacia abajo. Cada linea comienza a la izquierda y termina a la derecha de la pantalla. Cuando una linea se ha completado, debemos enviar un pulso de sincronismo horizontal para que la electrónica del monitor la haga avanzar a la posición siguiente. Cuando todas las lineas que conforman una imagen han sido dibujadas, enviamos un pulso de sincronismo vertical para indicarle al monitor que la imagen (el “cuadro”) está completo y que la próxima linea a dibujar debe estar, nuevamente, en la parte superior de la pantalla. Todo esto se repite decenas de veces por segundo.

La “resolución” de nuestra imagen se mide en píxeles. Decir que tenemos una resolución de “640x480” significa que la imagen se compone de 640 píxeles a lo ancho -o 640 píxeles en cada línea- y 480 lineas por cuadro. Nuestro programa debe ser capaz de enviar al monitor la tensión adecuada en cada una de las lineas analógicas para que cada uno de los píxeles que la componentes tenga el color deseado. Veamos un ejemplo concreto: si queremos mostrar 60 cuadros por segundo, en el modo “VGA Standar” de 525 lineas (de las cuales “vemos” solo 480), disponemos de solo

Tiempo por linea = 1 segundo / 60 cuadros / 525 lineas = 31,75 us.

31,75 milésimas de segundo para dibujar cada linea.  Por razones derivadas del diseño, el trazo de la linea solo es visible durante 25.17 ms. (ver figura 2). En ese lapso de tiempo tenemos que obtener los datos correspondientes a cada píxel y colocar el valor correspondiente a cada linea analógica (R, G, B), una vez para cada píxel. Si pensamos dibujar 640 píxeles, solo tenemos

Tiempo por píxel = 25,17 ms / 640 = 0.039328125us (39,33 ns)

poco más de 39 millonésimas de segundo por cada píxel. No es demasiado, pero si se cuenta con un microcontrolador lo suficientemente rápido, es posible hacerlo.


(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6931)
Figura 2: “Diagramas de tiempos.”

El primer problema que enfrentamos es la generación de los pulsos de sincronismo. Necesitamos un pulso -bajo- de una duración de 3,9 us cada 31,75us., que será nuestro pulso de sincronismo horizontal. Y durante la generación de las últimas dos lineas de la imagen -lineas 524 y 525- necesitamos un pulso -también negativo- que sirva como sincronismo vertical. Victor recomienda utilizar una interrupción para generar el pulso de sincronismo horizontal. Para generar los valores adecuados de tensión en las lineas analógicas correspondientes a los colores rojo, verde y azul, puede utilizarse un esquema como el propuesto en pic24.ru (http://www.pic24.ru/):

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6937)
Figura 3: “4 pines del PIC bastan para generar el color de cada píxel.”

Tres pines con salidas tipo “open drain” pueden “encender” o “apagar” las lineas correspondientes al rojo, verde y azul. Son 8 combinaciones que proporcionan 8 colores diferentes. El cuarto pin en cuestión (Y) proporciona un rudimentario mecanismo de control de brillo. Cuando esa salida está en nivel bajo, el transistor se cierra y los voltajes presentes en los nodos etiquetados como  VGA-R, VGA-G y VGA-B se modifiquen a través del divisor formado por los resistores y diodos. Victor sugiere utilizar diodos 1N5819 -funcionan perfectamente, como puedes ver en las fotos- pero en las pruebas que hemos realizado pudimos comprobar que incluso un común y modesto 1N4148 sirve. Esto nos permite duplicar la cantidad de colores, ya que disponemos de 8 colores “vivos” y 8 colores “lavados”. En la practica -como se ve en la figura 4- son solo 15, ya que dos de ellos corresponden al negro.

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6935)
Figura 4: “Tenemos 15 colores diferentes, sin necesidad de conversores DA externos.”


El pin “data”, en la parte superior  de la figura 3, se encarga de encender o apagar cada píxel. Resumiendo, para generar un píxel necesitamos ajustar el valor de los pines R, G, B e Y, y poner el pin “data” en el estado correcto. Si vamos a mostrar solo texto, no necesitamos cambiar el color de cada uno de los píxeles que componen la linea, sino que basta con hacer el cambio cada vez que el trazo del haz de electrones pasa de un carácter a otro. Esto significa que disponemos de un poco más de tiempo para controlar la señal “data”, que es la que en definitiva va a determinar nuestra resolución horizontal. Victor, en el trabajo mencionado, explica todo esto en detalle y proporciona un programa completo (código fuente incluido) que, junto al circuito de la figura 5, permite escribir 30 filas de 30 columnas de texto, con 16 colores posibles para cada carácter, sobre fondo negro, en un monitor VGA estándar.

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6933)
Figura 5: “Circuito propuesto por Victor Timofeev.”

Los caracteres a mostrar se envían al dispositivo mediante el bus SPI. La velocidad máxima de transmisión de datos es de 250Kbps, y los comandos que acepta son:

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6939)

Todo esto está implementado en una librería que puede descargarse junto al resto del código fuente, junto a una explicación más detallada de cada comando,  desde aquí (http://www.pic24.ru/lib/exe/fetch.php/osa/articles/terminal.rar).

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6941)
Figura 6:“Este es el juego de caracteres incluidos. Por supuesto, puede modificarse.”

La figura 6 muestra los 256 caracteres disponibles. La definición de estos caracteres se encuentra en  el archivo font.asm y puede ser modificado para incluir caracteres no contemplados. Las fotografías que ilustran esta nota permiten apreciar la calidad y definición de la imagen obtenida con esta interfaz. Con poco trabajo puede construirse un dispositivo pequeño y flexible que permitirá a nuestros proyectos mostrar texto en cualquier monitor. ¿Te animas a construirla?

Estas son algunas fotografías del que hemos construido en uControl:

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6943)  (http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6945)

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6947)  (http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6949)
(Descarga las imágenes para verlas más grandes)


El conector VGA
Un conector  "HD-15” -a veces también llamado "RGBHV" o "HD-15"- como el que poseen la mayoría de los monitores VGA posee 15 pines dispuestos en tres hileras de 5 cada una. Es posible que aún haya en funcionamiento algún viejo monitor dotado de una versión anterior del conector actual, con solo 9 pines (llamado "DE-9"), pero el 99% de los monitores VGA que encuentres por ahí tendrán el conector azul de 15 pines que ves en la fotografía.

(http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/?action=dlattach;attach=6951)
 “Conector VGA de 15 pines, conocido como “HD-15”


Las letras “HD” hacen referencia a “High Density” (“Alta densidad”), para diferenciarlos de los conectores que tienen el mismo factor de forma, pero sólo 2 filas de pines. Este conector permite transportar las cinco señales básicas que se necesitan para obtener una imagen vertical: los componentes analógicos rojo, verde y azul, y las señales de sincronismo vertical y horizontal.
Título: Re: Generador de imagenes de video con PIC
Publicado por: migsantiago en 14 de Noviembre de 2010, 19:25:49
Va a ser un interesante artículo para la revista, sobre todo si consiguen el permiso del autor para publicarlo. Un saludo Ariel.  :mrgreen:
Título: Re: Generador de imagenes de video con PIC
Publicado por: Nocturno en 15 de Noviembre de 2010, 02:42:53
Es realmente impresionante ver lo que ha hecho con un 18F. Gracias por mostrarlo, Ariel.
Título: Re: Generador de imagenes de video con PIC
Publicado por: aitopes en 15 de Noviembre de 2010, 11:15:52
Va a ser un interesante artículo para la revista, sobre todo si consiguen el permiso del autor para publicarlo. Un saludo Ariel.  :mrgreen:

Gracias Santiago!
La autorizacion la tenemos, de hecho estamos en contacto con Victor por otros proyectos...tiene un monton de cosas muy interesantes, incluido un @Boulder Dash@ con PIC18 muy jugable (incluye ademas 5 canales de sonido a 15KHz....un maestro el tipo)

Es realmente impresionante ver lo que ha hecho con un 18F. Gracias por mostrarlo, Ariel.

Gracias Manolo!
Anda muy bien. Y lo mejor de todo es la interfaz SPI, se puede usar en cualquier proyecto como "placa de video" :)

Saludos!
Título: Re: Generador de imagenes de video con PIC
Publicado por: sdel en 19 de Noviembre de 2010, 12:55:18
que interesente tema, me quiero poner con todo a montarlo, felicitaciones.

alguien sabe por que no puedo descargar el archivo comprimido del primer post?
aparece como que fue eliminado de rapidshare, gracias.
Título: Re: Generador de imagenes de video con PIC
Publicado por: sdel en 23 de Noviembre de 2010, 19:10:03
No puedo descargar el archivo este

http://rapidshare.com/files/146616006/Emulador_de_GLCD_para_video.rar

esta en la primer pagina, lo pueden subir devuelta?
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 23 de Noviembre de 2010, 22:23:48
Hola amigo acá te dejo el nuevo link:

Código: [Seleccionar]
h**p://rapidshare.com/files/432754151/Emulador_de_GLCD_para_video.rar
debes corregir donde dice h**p para poder descargar, saludos!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: Drod en 26 de Noviembre de 2010, 12:50:15
Hola! Habeis visto al proyecto "UZEBOX"???

Es un videojuego opensource basado en ATMEGA. Creo que os podrá ayudar como referencia, las bibliotecas, el firmware, etc, son libres! A ver si alguien lo hace con los PICs!

http://belogic.com/uzebox/
Título: Re: Generador de imagenes de video con PIC
Publicado por: flacoclau en 26 de Noviembre de 2010, 13:52:00
Si está muy bueno!
Y me había olvidado muy bueno lo tuyo Ariel!!
Título: Re: Generador de imagenes de video con PIC
Publicado por: diegogprs en 27 de Junio de 2011, 21:23:01
Buenas. Muy buen proyecto, estube probando el proyecto el de mikrobasic y note que solo me funciona en las tv antiguas, y los modernos sale "sin señal" . Saludos
Título: Re: Generador de imagenes de video con PIC
Publicado por: NANO1985 en 28 de Junio de 2011, 00:50:49
impresionante éste hilo! felicitaciones ariel!  ;-)
Título: Re: Generador de imagenes de video con PIC
Publicado por: diegogprs en 04 de Julio de 2011, 02:18:25
Buenas . buscando encontre esto http://electronics-home-projects.tripod.com/. lastima que esta en asembler
Título: Re: Generador de imagenes de video con PIC
Publicado por: bala de plata en 27 de Mayo de 2014, 01:39:24
Hola, He leido todo desde el inicio y esta muy interesante su trabajo y muy buenos los resultados obtenidos, felicito a todos los que participaron en este proyecto.
Yo estoy intentando crear una señal de video con el pic 18f4550, programandolo en lenguaje C con el complilador ccs, por que no se me da bien el assembler con la familia 18f. No pude descargar los archios de los enlases:
 http://rapidshare.com/files/146616006/Emulador_de_GLCD_para_video.rar.html (http://rapidshare.com/files/146616006/Emulador_de_GLCD_para_video.rar.html)
ni tampoco
http://rapidshare.com/files/432754151/Emulador_de_GLCD_para_video.rar. (http://rapidshare.com/files/432754151/Emulador_de_GLCD_para_video.rar.)
Podrían volver a subirlos? gracias.
Título: Re: Generador de imagenes de video con PIC
Publicado por: jorgenuviola en 11 de Junio de 2014, 00:03:15
hechad un viztazo a este proyecto. Es interesantisimo!
Es con ATMEGA pero creo que servirá para algo!

http://belogic.com/uzebox/index.asp

Mirad el schematic:

http://belogic.com/uzebox/files/Uzebox-rev-C1.pdf

Está dificil encontrar el AD725 por aqui! Alguien sabe de algun componente para substituirlo?!?!!?

Muchas gracias!

los chinos lo hacen, compre 2 el año pasado y me llegaron la semana pasada, logico ya no puedo comprar mas, en argentina en las casas de electronica no tienen idea de que es el ad725.

el tema es que quiero usarlo sin usar un cristal de pal que no lo consigo.