Generar Señal de Video con PIC

Para el sistema PAL creo que la sincronización horizontal es la misma, 12us de sincronización y 52us de señal de video, es la resolución vertical lo que cambia, mi video es de 260 lineas pero para PAL sería de 312, desentrelazado igual que el mío.
 
Ok.

Te recuerdo que oscilador usas, porque para estas cosas suelen usar de 16MHz y quizás estás usando otro.

Cuando ya consigas algo, si es posible hace unos tutoriales con tus palabras de cómo hacer un dibujo y reflejarlo en pantalla (siempre que no sea una gran molestia, claro). Así aprendemos más del tema.

A ver si algún día hacemos algo de esto:
eohcountdown.jpg


16f84a_tv.jpg


EDIT:
Mirando con el MPLAB 8.14, me he dado cuenta que sólo usas dos variable de la memoria RAM.
 
De hecho solo uso una "delaycnt", las demás las dejé ahi pero en verdad no las ocupo, el oscilador que uso es de 12MHz, es el más rápido que puedo conseguir en mi ciudad pero con el se pueden ejecutar 3 millones de instrucciones por segundo, suficiente para las pruebas que estoy haciendo.

---

Conseguí la sincronización vertical, ahora la imágen ya no se va hacia arriba ni se ve ese parpadeo, la figura se queda fija en el televisor, es ya un buen avance.

Algunas fotos y el código fuente modificado:


Como nota, la imágen aparece justo donde comienza la pantalla. Antes de la imágen en el código hay 22 líneas negras que no aparecen así que la resolución real ya se va reduciendo un poco, digamos que ronda alrededor de las 240 líneas verticales.

La resolución vertical la hice gracias a un diagrama de la página de PIC Breakout, consiste en pulsos de sincronización alternados que duran 9 líneas horizontales:
- Primero pulsos de sincronización cortos: 30us de Negro seguidos de 2us de Sincronización. Se repite 3 veces.
- Luego pulsos de sincronización largos: 30us de Sincronización seguidos de 2us de Negro. Se repite 3 veces
- Por último pulsos de sincronización cortos de nuevo: 30us de Negro seguidos de 2us de Sincronización. Se repite 3 veces.

Con eso se logra la sincronización vertical!
 

Adjuntos

  • utv_prueba_1_2_788.asm
    16.9 KB · Visitas: 239
Aqui está otro avance. Ya puedo desplegar letras además de figuras "hechas a mano". Para desplegar texto se lee primero de una tabla y luego se va desplegando línea a línea. De prueba solo tengo una línea que despliega "A". Mejorando un poco el código se debe poder reducir el espacio entre cada caracter. El único problema es que las letras me aparecen un poco recorridas en la parte de arriba, no tengo idea por qué pero seguiré trabajando para solucionarlo.




El hardware cambió, ahora la resistencia de 1k se conecta a RA0 y la de 470 a RB7.
 

Adjuntos

  • prueba_video_1_1_180.txt
    13.4 KB · Visitas: 237
Buenisimo!

Voy a ver si puedo reescribir parte del código para que funcione a 20mhz (Pic16f628a) y así poder lograr mayor resolución horizontal.

Gracias por publicar tus códigos!
Gonzalo
 
gzaloprgm dijo:
Buenisimo!

Voy a ver si puedo reescribir parte del código para que funcione a 20mhz (Pic16f628a) y así poder lograr mayor resolución horizontal.

Gracias por publicar tus códigos!
Gonzalo

¿Y por qué no un 16F88 que es más potente en todo? También con 20MHz.
 
Yo no he encontrado cristales de 20MHz pero cuando lo haga también adaptaré los códigos para esa velocidad. Con 12MHz me gusta la resolución que se logra, pero con 20MHz se pueden hacer 2 instrucciones más por microsegundo así que se debe poder hacer cosas bastante interesantes.

Aqui dejo una imagen más de lo que he hecho. Con el código que publiqué en el último post se puede armar un buen texto, lo que sigue es lograr desplegar gráficos.

 
Sí, basicamente es el único micro que tengo ^_^, por eso lo voy a usar. que bueno lo que lograste hacer! (no vi el código todavia) estás usando el puerto como shift register para un pixel por instrucción no?

Saludos,
Gonzalo
 
Si te hace falta más megaherzios 48 por ejemplo, utilizas el 18F2550. Encima las operaciones y con las instrucciones que hay, lo haces con menos código.
 
Así es gzaloprgm, por el puerto B recorro los bits para tener mayor resolución. El tipo de letra es el de Capcom que me pareció que quedaba bien :LOL:

Usando un pic como el que dice Meta si se tendría una muy buena resolución.
 
Siempre me ha gustado este tema... incluso presente un proyecto generador de TV en blanco y negro para NTSC usando un PIC16F84 a 4MHz solo que como el ciclo de reloj era tan lento solo podia generar barras gruesas en vez de lineas delgadas en el horizontal...

Pero proponer micros cada vez mas rapidos se me hace una solucion poco practica y un poco cara por una razon.... el ATARI2600 que todos conocemos fue inventado a finales de los 70s y usaba procesadores arcaicos de 1MHz, sin embargo podia manejar 128 colores y graficos y sonido bastante buenos para la epoca....

Como es posible que teniendo a nuestra disposicion micros mas grandes y potentes (lease un PIC a 4MHz) no podamos generar las mismas graficas?

Creo que con la electronica actual a nuestra disposicion deberiamos ser capaces de lograr algo similar.... pero por mas que investigo no encuentro como lo hicieron, posiblemente ustedes sepan o hayan visto algo por alli en internet....
 
La velocidad del pic es 4MIPS (a 12MHz), la del atari2600 era 1MIPS (supongo) pero tenía un procesador de video analógico aparte, que seguramente corría mucho más rapido y leia de una memoria de video compartida entre ambos.

Si podemos conseguir procesadores de videos podríamos dedicar el pic unicamente a manejar la memoria, por lo que se podrían crear cosas más complejas sin depender de las sincronizaciones correctas y la lógica para escribir en la pantalla, dejando unicamente una rutina de acceso a una memoria vram.

Además, para generar gráficos en color necesitaríamos un DAC con más resistencias y mucho más código, para obtener 256 colores harían falta usar 8 bits del micro con 8 resistencias.

Acá encontré un sitio donde usan un pic16f628a a 20mhz y generan un juego estilo space invaders en color! pero usan conexión RGB SCART, no composite: http://www.quinapalus.com/picsi.html

Saludos,
Gonzalo
 
gzaloprgm dijo:
La velocidad del pic es 4MIPS (a 12MHz), la del atari2600 era 1MIPS (supongo) pero tenía un procesador de video analógico aparte, que seguramente corría mucho más rapido y leia de una memoria de video compartida entre ambos.

Si podemos conseguir procesadores de videos podríamos dedicar el pic unicamente a manejar la memoria, por lo que se podrían crear cosas más complejas sin depender de las sincronizaciones correctas y la lógica para escribir en la pantalla, dejando unicamente una rutina de acceso a una memoria vram.

Además, para generar gráficos en color necesitaríamos un DAC con más resistencias y mucho más código, para obtener 256 colores harían falta usar 8 bits del micro con 8 resistencias.

Saludos,
Gonzalo

Efectivamente.... el atari usaba un un 6507 a 1.2MHz lo que le daba alrededor de 1MIPS, y como coprocesador de video aparentemente usaba un PLD (?) Xilinx, ambas tecnologias son superobsoletas al dia de hoy...

Para generar color necesitamos mas bits, pero en un procesador de 8 bits no es problema, para generar la señal NTSC o PAL se puede usar un convertidor RGB a NTSC (AD723 de analog) y resolvemos el problema facilmente, pero la parte donde ando atascado es en la programacion del CPLD para generar una memora RAM de doble puerto con un secuenciador automatico que envie los datos al AD723

Resolviendo esa parte el pic (en mi caso un AVR) solo se dedicaria a generar las graficas y sonidos necesarios.....
 
Muy interesante los vídeos.

Insisto que para solventar problemas, mejor usar un PIC con 48 MHz y asunto solucionado. Por ejemplo el PIC 18F2550. Pruébalo.
 
Vaya, en el video que puso torresdelamora usan 5 microcontroladores atmega.

Chico3001 tiene razón, la solución no tiene por que ser usar micros más grandes o más rápidos (aunque claro que eso si ayudaría bastante), yo creo que la solución es utilizar al menos dos microcontroladores, uno que funcione como GPU y otro como CPU de modo que uno esté dedicado exclusivamente a generar los gráficos y el otro que realice cualquier otra tarea que se tenga que hacer.

Con el mismo hardware (esos 5 microcontroladores) el del video anterior también hizo este pacman que es bastante impresionante:
YouTube - Pacman running on my homemade console

Pero también hay alguien que hizo un pacman (con menos resolución y blanco y negro) con un sólo atmega8:
YouTube - Pacman AVR by Duch
 
Atrás
Arriba