# Generar Señal de Video con PIC



## Ettneciv (Jul 27, 2006)

Estoy elaborando un proyecto con PIC, en el cual necesito tener la facilidad de visualizar todo en el monitor de un PC....

Y la señal de video la quiero generar con dicho PIC sin necesidad de utilizar el PC completo ....
Ya tengo algo de información sobre las señales R,G,B, YUV, SyN , etc.
Aun no se como enviarle las 5 señales q necesita un monitor para q muestre el video. Es decir, si tengo un tiempo critico para el envio de señales RGB, etc dependiendo de la resolucion a usar.....

Conocen algun link o tienen algun material donde pueda ver el diagrama de estados de todas estas señales? 

En la Figura 1... esta el conector del puerto VGA, 
- Los 3 pines q dicen retorno d rojo, azul, verde. Son simplemente tierra?

En este proyecto se utilizara un monitor de PC pantalla plana, el cual quiere ser utilizado con una resolucion de 320x200 ( 256 colores )

Gracias de Antemano....


----------



## okcomputer (Jul 31, 2006)

Amigo Ettneciv, a riesgo de equivocarme, creo que lo que tu estas tratando de hacer es casi imposible.
las aplicaciones de video por lo general son de alta velocidad aun en el caso de ser monocromatica, en estos casos se utiliza hardware programable o configurable "FPGA".

Sin embargo, te pregunto ¿es necesario que transmitas la señal de video al pc"? , ya que es
mucho mas facil "practicable" enviar la información basica al pc para que un software genere la señal, de esta forma optimizarias tu diseño, dejandole el grueso del trabajo al 
hardware y software de tu computador, el cual esta diseñado para este tipo de tareas, y no a un microcontralodor con un pequeño ciclo de relog y un microprocesador de  8 bits, o algo asi.


----------



## tiopepe123 (Jul 31, 2006)

http://www.epanorama.net/links/videocircuits.html#computervideo

o utilizar un OSD tipo STV9425

Pero ten encuenta que solo podras hacer letras muy budas.

Utiliza un pic18f452 que corre mas.

Yo en su tiempo genere señales VGA y TV y es facil, pero da mucho trabajo diseñar cada letra y numero, aunque es muy rutinario.

tambien corre por internet un generador de patrones  de tv en español en formato pdf

Tambien puedes utilizar un integrado tipo teletexto si buscan un poquito encontraras una pagina te hay un diagrama pero aumenta la complejidad un poquito a nivel de PCB


----------



## Aristides (Oct 26, 2006)

Creo que la única forma que se puede lograr es con el micro Propeller:
http://www.todomicrostamp.com/propeller.php


----------



## lokutas (Nov 17, 2006)

Agarrate un Video DAC y un Micro que corra bien rapido como un PowerPC o un StrongARM, necesitaras mucha memoria externa si quieres pintar un patron complicado... o igual te avientas un JPEG decoder...

http://focus.ti.com/docs/prod/folders/print/ths8135.html

Sopas


----------



## Norberto (Nov 18, 2006)

adiero a lo escrito por Okcomputer hay cosas echas con pic como un tetris o un pingpong con un pic16f84 pero tiene un codigo muy pulido, debido a las velocidades.
Hoy en dia hay micros mas veloces pero no se el grado de experiencia que tienes.
Las señales para controlar vga suponiendo que sea una imagen estatica requieran tiempos muy cortos y precizos. No se que queres hacer pero si no tenes mucha experiencia comenza con pantallas LCD de powertip o alguna otra ( no para PC ) + un micro, estas pantallas vienen con controlador y memoria.
Lo unico que tendria que hacer tu soft es poner los dato en dicha memoria despreocupandote del tiempo.
Estas pantallas son de precios razonables, pero aunque ya tengas la pantalla vga todo el desarrollo para esta es casi imposible.
Hay otro tipo de pantallas que ya tiene todo lo necesario internamente y se programan en lenguage html


----------



## Aristides (Nov 19, 2006)

Insisto con este micro, porque aparte de la velocidad, tiene verdadera multifunción, en la jerga actual "multi core".

La única forma que se puede lograr sintetizar, señales VGA y TV es con el micro Propeller:
http://www.todomicrostamp.com/propeller.php


----------



## lokutas (Nov 20, 2006)

Ese propeller es digno de mantenerse en la bolsa de trucos... abrire un topico para Q & A's ok...

L


----------



## Tomasito (Nov 22, 2007)

Los "retornos" de cada color, son las tierras, porque cada color es una linea flotante. En la practica los retornos van todos a tierra, inclusive adentro de los monitores que he desarmado van a tierra. Pero creo que hay que usarlas flotantes cuando se usan resoluciones muy altas (más de 1024x768) por un tema de ancho de banda.
Por lo demás, son señales de video común (podés mandarle video compuesto) solo que tienen el vertical a 32khz. Supongo que se podrían generar 3 señales de video compuesto (con 3 pic para más velocidad) por cada color y mandarlas al monitor. Si no tenés los sincronismos separados, usá el lm1881 que anda barbaro, mandá la salida del lm1881 de vsync a la entrada de vsync del monitor, y la salida de csync (sincronismo compuesto) al hsync del monitor.

Lo que no sé es si le dará la velocidad al pic para generar todo esto, pero en una revista (Saber Electronica) vendian un generador de patrones VGA color con pic si no me acuerdo mal.
Y video compuesto he visto que hacen con pics, aunque a 16khz, no a 32. Si le mandás 16khz la mayoría de los monitores o se vuelven locos, o se ven imagenes fantasma.


Salu2!


----------



## Paloky (Nov 23, 2007)

Si que se puede hacer.

Incluso con un 16F84, es possible programar un videojuego.

Mira este link que te lo explica todo muy bien, desde la senyal de sincronismo hasta como hacer un DAC con las salidas directas del pic sin utilizar un ocnvertidor.

http://www.rickard.gunee.com/projects/video/pic/howto.php


Saludos.


----------



## pic-man (Jul 23, 2008)

Hola a todos. Estoy trabajando en un proyecto para generar video NTSC usando un PIC 16F88 a 12MHz. Estos dias he estado leyendo alguna documentación sobre señales de video pero la información que he encontrado no me ha quedado muy clara.

Hasta ahora el único avance que he tenido ha sido un programa de prueba (similar al de el PIC Video Howto de Rickard Gunee) para desplegar barras de colores (negro, gris y blanco) que realicé basandome en el diagrama de sincronización horizontal que se muestra a continuación





Mi implementación tiene algunos cambios con respecto a ese diagrama, el valor de voltaje del front y back porch es 0.33V (el mismo del color negro) y el valor de sincronización es 0V en vez de -0.4V como aparece en el diagrama. El resultado fue este:

Los tiempos de las líneas horizontales son bastante cercanos a los del estándar NTSC, aproximadamente 12us de sincronización y 52us de señal de video.

El gran problema que estoy teniendo es que no he sido capaz de realizar una sincronización vertical. Las imágenes de video se van dibujando en la pantalla una línea a la vez, primero las impares y después las pares. Según he entendido al terminar de dibujar todas las líneas impares se debe realizar la sincronización vertical para comenzar a dibujar las líneas pares, despues se vuelve a realizar la sincronización vertical y vuelven a dibujarse las impares. Hasta ahora no he sido capaz de realizar eso, lo único que logro es dibujar líneas verticales a partir de la rutina que controla la sincronización horizontal.

Hay muchos proyectos que generan video con pic, el tetris y pong de Rickard Gunee, el PIC Breakout, el &microSCOPE, PIC-Pong y PIC-Tock de Eric Smith, entre otros, pero yo quisiera saber si alguien podría darme información sobre los tiempos de sincronización horizontal y vertical (aunque la horizontal creo que ya la tengo dominada) del estándar NTSC, además si hay algún iluminado en el tema no estaría mal una explicación para el resto de nosotros.

Bueno, aqui dejo esto, si a alguien le interesa el tema tal vez podamos colaborar y realizar entre todos una buena librería para generar video usando un PIC.

Por último adjunto el código de prueba y el diagrama de conexión que uso entre el pic y la entrada de video

La resistencia de 450 en realidad puede ser de 470 y la de 900 puede ser de 1K, la de 75 ohms representa la entrada de video RCA del televisor.


----------



## tiopepe123 (Jul 23, 2008)

Cuando hablas de ntsc es que quieres generar color, creo que con el pic andas muy justo, en pal no daba tiempo.

Si la señal es en blanco y negro no necesitas generar la señal de burt lo que se te simplifica mucho.

Si quieres colo lo mas comodo es utilizar la entrada RGB posterior de tu TV o sea el euroconector o Scard.


Para el tema de las tensiones recuerda que tienes tres estados o sea nivel alto, bajo y alta impedancia lo que te permite tener 3 tensiones facilmente.


Si buscas un poco encontraras un tutorial es pdf en español aunque es para pal que es lo que yo conozco.
Ya diseñe hace unos años un patron con un pic16f876 en colo via RGB.


----------



## pic-man (Jul 23, 2008)

gracias tiopepe por tu respuesta pero no estoy buscando generar una señal a color, se que con el pic no me alcanza (y menos a esa velocidad), quiero generar una señal blanco y negro que cumpla con la norma ntsc, lo que sería el estándar RS-170 (RS-170A es para color).

No sabía que en B/W no hacía falta el burst del backporch, yo no lo había hecho, solo había hecho el backporch, con razón si funcionaba.

Bueno, de nuevo gracias, seguiré buscando porque creeme que ya he buscado y leido bastantes manuales pero aún no me queda claro como hacer la sincronización vertical. Si alguien tiene alguna idea o sabe algo de esto agradecería su ayuda.


----------



## Meta (Jul 23, 2008)

Si puede ser, también es bueno saber de PAL que es el que uso aquí en España, bueno, aunque en mi país también puedes usar el NTSC pero el predeterminado es el PAL, en concreto el PAL-D que es una mejora del PAL normal, para que lo tengan en cuenta.

He visto por ahí que el que quiera color usan los dsPIC de 16 bits y dicen que con 32 bits es la leche. Con el 16 Bits han conseguido algo con 16 colores.

Hace un tiempo quería hacer algo pero no tengo ni idea, a ver si entre todos hacemos algo.

https://www.forosdeelectronica.com/f24/16f84a-conetacto-al-tv-tetris-13163/

En español.
http://www.taringa.net/posts/información/996552/Mod-8--Arma-tu-propia-consola-1-

http://server-die.alc.upv.es/asignaturas/TEII/2006-07/Web_C05/02.html

http://www.pablin.com.ar/electron/circuito/mc/picpong/index.htm

EDIT:
http://www.ucontrol.com.ar/wiki/index.php/PIC_PAL_Video_Library

http://www.pablin.com.ar/electron/circuito/mc/tetris/index.htm

http://wk3.iespana.es/tetris.htm


----------



## pic-man (Jul 23, 2008)

En esos enlaces todos usan el código de Rickard Gunee, su explicación es muy sencilla pero aún así no logro comprenderla del todo.


----------



## Meta (Jul 23, 2008)

pic-man dijo:
			
		

> su explicación es muy sencilla pero aún así no logro comprenderla del todo.



Yo tampoco, lo lograremos con la práctica, por no entenderlo lo he dejado, pero como veo a más personas animadas, me han animado y haré ese proyecto aunque sea en color. Eso si, en realidad es el 16F84, pero como el 16F88 tiene más RAM y Flash, mejor que mejor.

Este hombre si lo entiende.
YouTube - PROGRAMANDO EL TETRIS EN EL PIC 16F84


----------



## pic-man (Jul 24, 2008)

Sigo sin lograr la resolución vertical pero aqui les dejo un avance del proyecto:

YouTube - microTV: SeÃ±al de Video NTSC usando PIC16F88

El video generado esta desentrelazado y tiene una resolución vertical de 260 lineas, aunque claro la imágen que se despliega (space invaders yeah!) ocupa gran parte de la pantalla por lo que no se ve una super resolución, pero con 260 líneas disponibles (tal vez menos, habrá que hacer más pruebas) se pueden hacer cosas interesantes, o al menos eso espero.

El efecto de scroll aunque queda bien no es intensiónal, eso se debe a que aún no logro hacer la sincronización vertical, simplemente dibujé línea a línea la pantalla, espero encontrar la solución para la sincronización vertical pronto y que con eso quede fija la imágen en la pantalla.

Aqui dejo esto, espero que alguien se anime y consigamos la sincronización vertical


----------



## Meta (Jul 24, 2008)

Muy interesante.

YouTube - Video NTSC / PALM & PIC

YouTube - PIC Microcontroller generating PAL TV signal

YouTube - PIC PAL video OSD superimposer


*1-* ¿Hacerlo con el 16F88 no es lo mismo que un 16F84? Lo digo porque todo el mundo usa ese (16F84), aún así el 16F88 tiene más RAM que ayuda mucho.

*2-* ¿Te cuesta mucho programar un dibujo en pantalla como el que hiciste?

*3-* ¿Es complicado el tema de hacer algo con señal de vídeo?

Si tienes más ejemplos lo pones, cada vez que te veo hacer algo, más gana me dan de hacer algo. A ver si vienen más personas que les interesen estos temas.


----------



## pic-man (Jul 24, 2008)

El 16F84 sin duda debe ser el más común de los pics de gama media, yo no programo en el porque me sale más caro que otros pics como el 16f628 o el 16f88. Son pics parecidos, tienen el mismo conjunto de instrucciones (dos más o dos menos, algo asi), pero además el 16f628 tiene un oscilador interno de 4MHz y el 16f88 uno de 8MHz (además de otros añadidos como el convertidor analógico digital, más memoria y cosas asi). Un código escrito para el 16F84 puede funcionar con algunos cambios en un 16F88, pero hay que saber que cambiar y eso en un código sin comentarios muchas veces no es sencillo.

Hacer el dibujo que hice no es complicado, simplemente modifiqué el primer código que puse para dibujar las 260 líneas, usé 9 líneas distintas, una todo negro y otras 7 que son las que forman la imágen, lo demás fue simplemente repetir. El código al final no es nada eficiente y es demasiado largo para lo que hace pero en realidad solo quería hacer una prueba para ver la resolución vertical.

El tema de video a mi me parece un poco complicado, ya ves llevo 3 días investigando y aún no logro la sincronización vertical.

En cuanto tenga más ejemplos o avance un poco con el proyecto iré publicandolos, por lo pronto aqui dejo el código fuente del ejemplo del video que se me olvidó subirlo en el post anterior.

Por cierto, el segundo video que pusiste lo vi ayer o antier, es bastante impresionante y la verdad es que cuando termine mi proyecto creo que lo voy a montar en una pequeña televisión como la de ese alemán.


----------



## Meta (Jul 24, 2008)

Muchas gracias por las respuestas.

Voy a mirar el código, a ver si lo puedo adaptar al 16F84A ya que es el único que tengo por ahora.

Voy a intentar poner una imagen como tu a ver si me sale en estos días, ya que actualmente estoy haciendo otro proyecto para presentarlo en una revista oficial de España.

Eso si, seguiré investigando mientras pueda sobre el tema de señales de TV, aunque estoy para el sistema PAL, pero bueno.

Me he dado cuenta que el NTSC y el PAL son *.hex a parte ya que el 16F84A no cabe. 

¿Con 4Kb que tiene el 16F88 crees que cabe el NTSC y PAL a la vez? Eso si, habrá que seleccionar uno o otra en el código de entrada con un simple btfss.

Otra cosa que me olvidaba, ¿con qué frecuencia utilizas el oscilador? Porque por lo que he visto por ahí, el tetris funciona con 16MHz.


----------



## pic-man (Jul 24, 2008)

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.


----------



## Meta (Jul 24, 2008)

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:











EDIT:
Mirando con el MPLAB 8.14, me he dado cuenta que sólo usas dos variable de la memoria RAM.


----------



## pic-man (Jul 24, 2008)

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!


----------



## pic-man (Jul 25, 2008)

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.


----------



## gzaloprgm (Jul 27, 2008)

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


----------



## Meta (Jul 27, 2008)

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.
> 
> ...



¿Y por qué no un 16F88 que es más potente en todo? También con 20MHz.


----------



## pic-man (Jul 27, 2008)

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.


----------



## gzaloprgm (Jul 28, 2008)

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


----------



## Meta (Jul 28, 2008)

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.


----------



## pic-man (Jul 28, 2008)

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   

Usando un pic como el que dice Meta si se tendría una muy buena resolución.


----------



## Meta (Jul 28, 2008)

Si ya te gustan los textos de Resident Evil 5 http://www.gametrailers.com/player/36581.html

También podrías usar un PIC32 de 80 MHz, lo más rápido que hay en el mercado. 

Es broma.


----------



## pic-man (Jul 28, 2008)

Un video y nos vamos   

YouTube - micro bitman Video NTSC usando un PIC16F88


----------



## Chico3001 (Jul 28, 2008)

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....


----------



## gzaloprgm (Jul 28, 2008)

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


----------



## Chico3001 (Jul 28, 2008)

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.
> 
> ...



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.....


----------



## torresdelamora (Jul 29, 2008)

YouTube - 3D Test ( atmega32 displaying .obj file )


----------



## gzaloprgm (Jul 29, 2008)

Bastante rápido lo renderiza, no sabía que calcular 136 senos y cosenos con un micro de 8 bits a 16 MIPS tardara tan poco


----------



## Meta (Jul 29, 2008)

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.


----------



## pic-man (Jul 29, 2008)

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


----------



## Meta (Jul 29, 2008)

Muy curioso. Me la juego que alguien hará algo de eso con un PIC32. Con ese si que no hay problemas de limitaciones.


----------



## tiopepe123 (Jul 29, 2008)

Antes de nada quiero "quejarme" del termino NTSC, si no se utiliza la modulacion de color no se puede llamar NTSC sino señal de blanco y negro (sincronismo + luminancia).
La diferencia esta en la complejidad, mucho se hablo,pero creo que el unico que lo consiguio fue con la gama SX, una especie de pic tuneados a 50Mhz.



Por impresionante esta "DEMO" con SONIDO guapisimo.
Hay algunos puntos que me hacen sospechar parece tener mucha resolucion...?

El sonido y la preimagen las generan en los tiempos muertos del refresco.

Lo que me tiene intrigado es la entrada MOSI (canal serie).

En su dia pense que era una señal interesante(SPI/I2C), le tiras  el dato y va saliendo bit a bit como si fuera un registro de desplazamiento, esto permitira ganar 7ciclos libres y ganar velocidad

Creo que es interesante estudiar si es factible utilizar el spi para enviar información a la pantalla mediante interrupciones.


Otra forma de plantearlo seria utilizando una memoria RAM y un contador tipo 74hct4040, pero esto ya se complica un poco


----------



## pic-man (Jul 29, 2008)

Soy yo el que sigue llamando NTSC a la señal de video, eso lo hago para dejar claro que la imágen se ve en un televisor compatible con el estándar NTSC, debería usar el termino RS170 pero NTSC suena más claro


----------



## Meta (Jul 29, 2008)

tiopepe123 dijo:
			
		

> Antes de nada quiero "quejarme" del termino NTSC, si no se utiliza la modulacion de color no se puede llamar NTSC sino señal de blanco y negro (sincronismo + luminancia).
> La diferencia esta en la complejidad, mucho se hablo,pero creo que el unico que lo consiguio fue con la gama SX, una especie de pic tuneados a 50Mhz.
> 
> 
> ...



Sigo diciendo que si no quieres limitaciones, usen el PIC32, se nota que nadie por el momento sabe manejarlo y menos en ASM. Tiene 80 MHz, nadie se puede quejar. Quizás aumente ya que antes eran de 72MHz y ahora 80.


----------



## Meta (Jul 29, 2008)

Vaya, hasta Mario sale en microcontroladores.

YouTube - Mario Bros on Atmega 64 micro controller


----------



## mcrven (Jul 29, 2008)

Bonito trabajo muchachos.
Los felicito. En unos días me uno con algo que pienso implementar, un entrenador para monitores y TVs.

Saludos:


----------



## gzaloprgm (Jul 29, 2008)

Estoy implementando algo parecido pero en PAL y a 20MHz. 

Las líneas horizontales y sincro horizontal ya se ven perfectas, el problema es que no tengo idea de cómo hacer el sincronismo vertical. Ya busqué en internet y no logro entender cuándo hay que mandar los pulsos, de que tamaño son, de que niveles, etc.

Alguien me podría ayudar ?

Gracias,
Gonzalo


----------



## Meta (Jul 29, 2008)

Aquí hay uno que lo logró. A ver si con el tiempo hace un pequeño tutorial parte por parte del código para entenderlo.


----------



## pic-man (Jul 29, 2008)

Autocita:



			
				pic-man dijo:
			
		

> 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.
> ...



Es decir ocupas generar una señal que sea:
30us de Negro -- 2us de Sync -- 30us de Negro -- 2us de Sync -- 30us de Negro -- 2us de Sync
30us de Sync -- 2us de Negro -- 30us de Sync -- 2us de Negro -- 30us de Sync  -- 2 us de Negro
30us de Negro -- 2us de Sync -- 30us de Negro -- 2us de Sync -- 30us de Negro -- 2us de Sync

Esa parte fue la que mas tiempo me llevó porque tambien yo buscaba información pero en ningún lado lo veía claro.


----------



## Chico3001 (Jul 29, 2008)

La idea de generacion de las sincronias es muy simple... simplemente se ponen contadores en cascada para ir contando los tiempos requeridos de sincronia horizontal y vertical 

para cada pulso de sincronia horzontal esperas 64uS, y para cada vertical 14mS, durante el tiempo de sincronia la señal de video debe estar en un cero logico (que es el nivel de voltaje requerido para sincronia), para un negro la señal es de 0.3V y para un blanco de 1V

El proyecto que hice tiene unos 8 años y mis documentos se han ido perdiendo con el paso del tiempo... pero si tengo el codigo que use en un PIC16F84 a 4MHz, se los dejo para que entre todos lo estudiemos y veamos que demonios quise hacer por que el diagrama del circuito lo tengo extraviado, recuerdo que el pic daba salida en 2 pines.. uno para sincronia y otro para señal.. ambos pines se "sumaban" por medio de 2 transistores para poder generar la señal compuesta


```
LIST p=16F84
	#include P16F84.inc
	
SGEN	EQU	H'0C'		;REGISTRO DE ESTADO
CONT	EQU	H'10'		;CONTADOR GENERAL
CONTV	EQU	H'11'		;CONTADOR VERTICAL
CONTH	EQU H'12'		;CONTADOR HORIZONTAL

CONTS	EQU H'13'		;CONTADOR SEGUNDOS

BAND	EQU 7			;BIT DE BANDERA

SINC	EQU 0			;BIT DE SINCRONIA
INF		EQU 1			;BIT DE INFORMACION



		ORG H'0000'

		BSF 	STATUS,RP0		;PAGINA 1
		MOVLW	B'00000000'		;
		MOVWF	OPTION_REG		;CONFIGURA OPTION
		MOVLW	B'00000000'		;
		MOVWF	TRISA			;CONFIGURA PUERTO A
		MOVLW	B'00000000'		;
		MOVWF	TRISB			;CONFIGURA PUERTO B
		BCF		STATUS,RP0		;PAGINA 0

;++++++++++ FIGURA 1 +++++++++++++++

		MOVLW	D'170'			;CONTADOR SEGUNDOS
		MOVWF	CONTS			;
FIG1	MOVLW	D'229'			;CONTADOR 14mS
		MOVWF	CONTV			;
HOR1	MOVLW	D'18'			;CONTADOR 64uS
		MOVWF	CONTH			;
		
		NOP						;
		NOP						;
		BSF		PORTB,SINC		;PULSO SINCRONIA
		NOP						;
		NOP						;
		BCF		PORTB,SINC		;

SAL1	DECFSZ	CONTH,F			;64uS?
		GOTO	SAL1			;NO, CONTINUA ESPERANDO

		DECFSZ	CONTV,F			;14mS?
		GOTO	HOR1			;NO, GENERA SINC HORIZONTAL

		MOVLW	D'166'			;SI, GENERA PULSO 2mS
		MOVWF	CONTH			;
		MOVLW	D'03'			;
		MOVWF	CONTV			;

		BSF		PORTB,SINC		;PULSO EN ALTO

SAL2	DECFSZ	CONTH,F			;RETARDO DE 2mS
		GOTO	SAL2			;
		DECFSZ	CONTV,F			;
		GOTO	SAL2			;
		
		DECFSZ	CONTS,F			;TIEMPO DE PANTALLA TERMINADO?
		GOTO	FIG1			;NO, VUELVE A GENERAR FIG 1


;++++++++++ FIGURA 2 +++++++++++++++

		MOVLW	D'170'			;CONTADOR SEGUNDOS
		MOVWF	CONTS			;
FIG2	MOVLW	D'229'			;CONTADOR 14mS
		MOVWF	CONTV			;
HOR2	MOVLW	D'10'			;CONTADOR 32uS
		MOVWF	CONTH			;
		
		NOP						;
		NOP						;
		BSF		PORTB,SINC		;PULSO SINCRONIA
		NOP						;
		NOP						;
		BCF		PORTB,SINC		;

SAL3	DECFSZ	CONTH,F			;32uS?
		GOTO	SAL3			;NO, CONTINUA ESPERANDO

		BSF		PORTB,INF		;DIBUJA LINEA
		BCF		PORTB,INF		;

		MOVLW	D'07'			;RESTO DE LA ESPERA
		MOVWF	CONTH			;
		
SAL4	DECFSZ	CONTH,F			;32uS?
		GOTO	SAL4			;NO, CONTINUA ESPERANDO

		DECFSZ	CONTV,F			;14mS?
		GOTO	HOR2			;NO, GENERA SINC HORIZONTAL

		MOVLW	D'166'			;SI, GENERA PULSO 2mS
		MOVWF	CONTH			;
		MOVLW	D'03'			;
		MOVWF	CONTV			;

		BSF		PORTB,SINC		;PULSO EN ALTO

SAL5	DECFSZ	CONTH,F			;RETARDO DE 2mS
		GOTO	SAL5			;
		DECFSZ	CONTV,F			;
		GOTO	SAL5			;
		
		DECFSZ	CONTS,F			;TIEMPO DE PANTALLA TERMINADO?
		GOTO	FIG2			;NO, VUELVE A GENERAR FIG 1

		GOTO	FIG1			;REPITE SECUENCIA
								;HASTA EL CANSANCIO
	
		END
```

Como pueden observar el codigo esta hecho para compensar incluso los saltos del pic asi que si quieren usar este codigo en un pic mas rapido van a tener que recalcular todos los contadores y los nops que vean

Aqui se generan 2 pantallas... la primera es completamente negra y dura unos 3 segundos, la segunda es una raya (o mejor dicho barra) en el centro de la pantalla y tambien dura 3 segundos... despues se repite la secuencia....


----------



## gzaloprgm (Jul 29, 2008)

Gracias, lo había leído, pero pensé que era solo para ntsc.  ops: 

Por otro lado, hice un código que se podría poner en las scanlines y me da que con 20MHz se pueden hacer 231 pixeles y los pixeles múltiplos de nueve son iguales a los de la izquierda.

Voy a ver si implemento VSYNC y hago alguna animación sencilla.

En tu video, los cuadrados se ven separados, es por algo en particular? o es a propósito?

Saludos,
Gonzalo


----------



## pic-man (Jul 29, 2008)

gzaloprgm me equivoqué con la sincronía, ahora que veo mi codigo me doy cuenta que estoy equivocado, la cosa es asi:

- Primero se ocupan pulsos de sincronía cortos: 30 us Negro, luego 2 us Sync, 30 us Negro y otra vez 2 us Sync, con eso logras los 64us que dura una línea horizontal, eso lo debes repetir 3 veces, es decir 192us
- Luego van los pulsos de sincronia largos: 30us de Sync, luego 2 us Negro, 30us Sync y de nuevo 2 us de Negro, de nuevo son 64us y repites esos pulsos 3 veces para tener 192us
- Al final se vuelven a necesitar pulsos de sincronía cortos: 30 us Negro, luego 2 us Sync, 30 us Negro y otra vez 2 us Sync, con eso logras los 64us que dura una línea horizontal, eso lo debes repetir 3 veces, es decir 192us

Así hago yo la sincronización vertical. Es distinto al tiempo que dice Chico3001 pero segun lo que yo he investigado la sincronía vertical debe durar el tiempo de 9 líneas horizontales, 576us, el tiempo que dura la sincronización que yo digo.

-- Edito --
Tengo entendido que el tiempo de sincronia es igual para PAL así que no debes tener ningún problema.

Y sobre tu pregunta de la línea negra entre cada cuadro, ¿era para mi?, si es así las líneas negras aparecen para que se vea bien definido cada cuadro, son intensiónales y escritas directamente en el código.


----------



## gzaloprgm (Jul 29, 2008)

Sí, era para tí. Gracias por la explicación. 

Chico3001, estás seguro que son cada 14ms los períodos de sinc. vertical?

(14 milliseconds) / (64 microseconds) = 218.75 (?)
el ,75 es lo que me intriga.

Además, no debería dar 625lineas /2 ? 

Estoy cada ves más confuso con esto  

Saludos,
Gonzalo


----------



## Chico3001 (Jul 29, 2008)

El programa funciona.. fue mi proyecto de fin de carrera en la materia de TV... pero la verdad lo hice hace 8 años y se fue extraviando la documentacion del proyecto y solo me quedo el programa, por lo que la verdad no se si sea correcto o solo jalo "de chiripa" como decimos en mexico

Recuerdo que tenia problemas casi al final de la pantalla donde se empezaba a perder un poco la sincronia horizontal y la linea se comenzaba a desviar al inicio de la pantalla... pero nunca pude averiguar si era debido a inconsistencias en el cristal o por que haya tenido errores al generar alguna sincronia 

Estoy reanalizando el programa para ver el por que de los 14mS, pero se me ocurren 2 ideas.. una que el comentario este errado y sea un contador de numero de horizontales que se estan generando (que es lo mas probable) y otra que el restante del tiempo sea parte del todo el codigo sumado... 

Mientras te dejo esta pagina que es donde me estoy basando en revisar los calculos...

http://www.desi.iteso.mx/telecom/siscom/tv/información/senal_de_video.html


----------



## pic-man (Jul 29, 2008)

En ese enlace dice lo siguiente:



> * El intervalo de tiempo correspondiente al retroceso vertical tiene una duración de 9 líneas horizontales.
> * Las 3 primeras líneas forman una zona denominada como de igualación, las 3 líneas centrales son en sí el pulso de sincronía y las últimas 3 líneas horizontales forman otra vez una zona de igualación.
> * En todo el intervalo de retroceso vertical los pulsos de sincronía se producen al doble de la frecuencia: 31,468.5 Hz.
> * En las zonas de igualación los pulsos de sincronía son invertidos en su forma



Es lo mismo que había leido yo en otra parte, la sincronía vertical tiene una duración de 9 líneas horizontales asi que la duración no puede ser de 14ms sino de 576us como dije en el post anterior., que bueno es encontrar información en español, y de una universidad, que respalde lo que leí.

Gracias por el enlace Chico3001, ya lo guardé para futuras referencias.


----------



## Chico3001 (Jul 30, 2008)

mmm eso explica muchas cosas... en mi programa mantengo el pulso en cero durante 2mS posiblemente por eso se pierde la linea al final de la pantalla.... 

Mucho cuidado... si tu vez en el esquema el pulso de sincronia vertical es un tren de pulsos horizontales de ciertas medidas... y todo ese rango de pulsos mide 9 pulsos horizontales...


----------



## pic-man (Jul 30, 2008)

Si, las medidas deben corresponder con las que puse en los mensajes anteriores, es decir 30us y 2us alternando entre Negro y Sync, primero el tiempo equivalente a 3 lineas horizontales en donde la señal de 2us es la Sync, luego 3 líneas horizontales donde los 30us correspondan a Sync y de nuevo 3 línes horizontales donde Sync dure 2us, alternando las señales asi hasta que se completen las 9 líneas horizontales.


----------



## gzaloprgm (Jul 30, 2008)

Entonces la forma es esta?


Lineas impares (64us * 305) = 19,520 ms

Pulsos cortos lineas impares (32us * 6)
Pulsos largos (32us * 5)
Pulsos cortos lineas impares (32us * 5) En total, 8 líneas de vsync = 0,512ms

Lineas pares (64us * 305) = 19,520 ms 

Pulsos cortos lineas pares (32us * 5)
Pulsos largos (32us * 5)
Pulsos cortos lineas pares (32us * 4) En total, 7 líneas de vsync = 0,448ms
TOTAL=40ms = 1/25 (25 FPS)!

Alguien corríjame si me equivoco, son las 3:30 de la mañana  

Es el sincro vertical para PAL!

http://en.wikipedia.org/wiki/Vertical_synchronization_pulse
http://web.archive.org/web/20070325...projects/video/pic/vinformación_vsync_big.png

Mañana armo el código y me fijo si funciona bien.

Saludos,
Gonzalo


----------



## tiopepe123 (Jul 30, 2008)

META, el pic32 sera muy potente pero parece que no gusta, mira que llevan tiempo intentando promocionarlo y no les funciona, pasate por el foro de microchip y compara los dspic con el pic32 y no hay brillo por algo sera.

Uno de los problemas de los pic  cuando generamos imagenes son los saltos que hacen saltar la pipeline y se saltan pasos intermedios y eso no se puede solucionar con un nop al ser medios ciclos.


El error que sale en la parte inferior puede ser un problema de post ecualizacion, no tiene exactamente la misma duracion la pantalla par respecto la impar.


----------



## Meta (Jul 30, 2008)

p0 equ 0x20
p1 equ 0x21
p2 equ 0x22
p3 equ 0x23
p4 equ 0x24
p5 equ 0x25
p6 equ 0x26
p7 equ 0x27
p8 equ 0x28
p9 equ 0x29
p10 equ 0x2A
p11 equ 0x2B
p12 equ 0x2C
p13 equ 0x2D
p14 equ 0x2E
p15 equ 0x2F
p16 equ 0x30
p17 equ 0x31
p18 equ 0x32
p19 equ 0x33
p20 equ 0x34
p21 equ 0x35
p22 equ 0x36
p23 equ 0x37
p24 equ 0x38
p25 equ 0x39
p26 equ 0x3A
p27 equ 0x3B
p28 equ 0x3C

movfw p0
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p1
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p2
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p3
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p4
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p5
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p6
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p7
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p8
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p9
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p10
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p11
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p12
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p13
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p14
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p15
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p16
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p17
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p18
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p19
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1 
movfw p20
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p21
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p22
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p23
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p24
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p25
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p26
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p27
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
movfw p28
movwf porta
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1
rlf porta, 1 ; (9*29)-1 instrucciones / 260 instrucciones = 52us / (8*29)-1 pix. = 231 pixeles
	     ; 260 WORDS ROM / 29 BYTES RAM


----------



## Meta (Jul 30, 2008)

tiopepe123 dijo:
			
		

> META, el pic32 sera muy potente pero parece que no gusta, mira que llevan tiempo intentando promocionarlo y no les funciona, pasate por el foro de microchip y compara los dspic con el pic32 y no hay brillo por algo sera.
> 
> Uno de los problemas de los pic  cuando generamos imagenes son los saltos que hacen saltar la pipeline y se saltan pasos intermedios y eso no se puede solucionar con un nop al ser medios ciclos.
> 
> ...



Entonces estás diciendo que los PIC32 son una basurilla. ME daré el salto al foro de Microchip a ver http://forum.microchip.com/

¿Tanto que por ahí decían que es muy bueno y7 potente con sus 80MHz y al final no sirve para nada?

Pues salió en noviembre del 2007 que recuerdo que decían que es genial y que no se que historias... Si no vende, entonces a ver que harán, porque los de 8 Bits se venden como rosca. La verdad es que siempre encuentro muy poca información sobre ellos y en otros foros lo han comprado y les encanta, eso si, menuda maraña de cables.

Pues Microchip que tanto presume de ellos, vamos a ver que harán, porque el 16F sea mejor que el PIC32 para TV como que sorprende.

Bueno, pues, a probar un *16F88* a TV, que tiene más memoria.

PD:_ Aún así, tengo ganas de ver proyectos de esos PIC32 que nunca se lo he visto a nadie y la programación tanto en ASM como en nivel alto._

EDIT:
Bueno, para lo que se quieres registrar y sacar más información sobre PIC32...

http://www.mypic32.com/

No sabía que había una Web de ellos mismos sólo con sus PIC32.


----------



## Chico3001 (Jul 30, 2008)

tiopepe123 dijo:
			
		

> Uno de los problemas de los pic  cuando generamos imagenes son los saltos que hacen saltar la pipeline y se saltan pasos intermedios y eso no se puede solucionar con un nop al ser medios ciclos.



Ese problema creo que lo tienen todos los micros de todas las marcas... debido a que tienen que desechar la instruccion que estan preejecutando y solicitar la nueva instruccion

En cuanto al los PIC por encima de 8 bits ya ni los considero... me gusta mas Freescale o Texas (Aunque Meta pegue de gritos jejeje....)


----------



## Meta (Jul 30, 2008)

Chico3001 dijo:
			
		

> tiopepe123 dijo:
> 
> 
> 
> ...



Nunca he visto Texas, freeScale es más conocido.


----------



## pic-man (Jul 30, 2008)

Hoy estuve trabajando un poco en esto del video con PIC. Hice un código distinto de 262 líneas verticales incluyendo las 9 líneas de sincronización vertical. Aqui está el video de lo que hice:

YouTube - Video NTSC con PIC16F88 - Desplazamiento por la pantalla

En el video se ve un cuadro blanco que se desplaza por una parte de la pantalla al presionar unos push buttons. El desplazamiento solamente se hace en un espacio de 8x8 "pixeles", pero me sirvió como prueba para desplazar una imágen por la pantalla, aunque solamente fuera un cuadro blanco.

La generación de señal monocromática (que no NTSC como bien lo aclaró tiopepe) ya la tengo dominada pero por el momento no puedo hacer gran cosa. Me gustaría hacer algún tipo de video juego como los pong o tetris que hay por ahí pero para eso ocupo comprender la lógica detrás de esos juegos, algún día, espero que pronto, me pondré a hacer algo así, por ahora ya comprendí como generar video blanco y negro compatible con un televisor NTSC o PAL.

Cuando tenga algo de tiempo haré alguna guía aunque creo que siguiendo los post de este tema se puede comprender el proceso.


----------



## Meta (Jul 31, 2008)

Hola:

Muy buena le vídeo. Lo que te falla de que se repite hacia adelante y atrás muy rápido o abajo y arriba cuando pulsas el botón, es porque en ese botón no has puesto *retardos para  antirrebotes*. Pasa en cualquier botón.

Todo esto está en www.pic16f84a.com

Veo que cada vez domina mucho las señales de vídeo y es un gran paso.

Felicidades...


----------



## pic-man (Jul 31, 2008)

Todos los botones tienen retardos antirrebotes pero en realidad son muy chicos, leo los botones durante la sincronización vertical así que pasan solamente 20us entre que se detecta una pulsación y se vuelve a checar, es por eso que se ve tan rapido. Tiene antirrebotes pero no es suficiente.

Ahora revisé el código, sigo leyendo los botones durante la sincronización vertical pero ahora el retardo es de 16.2ms, sigue siendo poco pero es muchisimo más que los 20us de antes. El resultado es similar, el cuadro aún se mueve muy rapidamente por la pantalla pero es un poco más "estable"


----------



## Meta (Jul 31, 2008)

Vete probado poco a poco hasta lograr los efectos deseados, cada vez te sale mejor. Cuando domines bien estas cosas, ya podríamos hacer un tutorial. Empezando claro lo que has puesto desde el principio que me llama la atención como esto:



Siiiiiiii, se que es simple y sin movimiento, pero me gustaría hacer cosas de estas.

PD: _Por cierto, ¿esos vídeos que has puesto desde el principio el 16F88 lo hiciste con el Windows Media Maker?_


----------



## pic-man (Jul 31, 2008)

Si, lo hice con el windows media maker, soy muy cutre pero es lo único que tenía a la mano


----------



## Meta (Jul 31, 2008)

pic-man dijo:
			
		

> Si, lo hice con el windows media maker, soy muy cutre pero es lo único que tenía a la mano



Pues eso es lo que quería saber, para hacer cosas de esas también con el Maker. Solo lo he probado como prueba en mi vida, pero ahora como está Youtube, lo utilizaré.

Avisa si sigues avanzando con las señales de vídeo.

PD: _Bueno, decías que no hablan bien del PIC32._ http://forum.microchip.com/tm.aspx?m=355118

EDIT:
Vaya, no me vale el formato del Nokia N70 (mp4) para el Movie Maker, espero que en el Windows Vista si funcione...

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

Aquí hay algo de señales de vídeos para coger ideas. con el tiempo haré una recopilación sea español y inglés sobre temas de vídeos.
http://www.pablin.com.ar/electron/circuito/mc/picdream/index.htm


----------



## Meta (Jul 31, 2008)

pic-man dijo:
			
		

> Cuando tenga algo de tiempo haré alguna guía aunque creo que siguiendo los post de este tema se puede comprender el proceso.


No mucho, hay que hacer resumen de lo que se está haciendo y explicar partes de código y esquema del hardware, cosas así.
Explicar cómo se hace una letra y dónde ponerla en pantalla o el punto ese que lo hiciste mover.
Pero tiempo al tiempo, por ahora céntrate en lo que estás haciendo.
¿Al final que harás cuando dominas toda la señales de vídeo?

Puedes poner el código asm por donde vas, me gustaría probarlo en el MPLAB.


----------



## mcrven (Jul 31, 2008)

Hola de nuevo a todos los del hilo.

Aquí les dejo este link que creo les va a ser útil para lo que están haciendo:

http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/timings.html

Saludos:


----------



## Meta (Jul 31, 2008)

mcrven dijo:
			
		

> Hola de nuevo a todos los del hilo.
> Aquí les dejo este link que creo les va a ser útil para lo que están haciendo:
> http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/timings.html
> Saludos:



Muchas gracias mi muy distinguido amigo. Quizás estas cosas puedan servir.

http://xtiming.sourceforge.net/cgi-bin/xtiming.pl

http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html

Con cálculos y todo.


----------



## mcrven (Jul 31, 2008)

No hay por qué Meta. De los dos links que pasaste, el segundo está incluido en el que te mandé - el calculador - , el xtiming lo conozco ya que trabajo con Linux y, hace tiempo adaptaba con precisión cualquier tarjeta de video. Hoy día casi no es necesario, pues, la base de datos de tarjetas incluida en las distros es enorme y, casi todas las que existen se configuran automáticamente.

De todas formas, para quien no conozca estos datos, considero que les será de utilidad.

Igualmente agradecido y, saludos:


----------



## torresdelamora (Ago 1, 2008)

YouTube - TV oscilloscope


----------



## Meta (Ago 1, 2008)

Gracias, mejor ponlo así.

YouTube - TV oscilloscope


----------



## asherar (Ago 1, 2008)

Si está lindo pero ese es con ATMEL. 
Este es con PIC !

Sorry! No me anda la placa de sonido así que no sé si dice algo para explicar cómo hace.

YouTube - DJ's Homemade Microchip Pic Oscilloscope DIY Gadget
Saludos!


----------



## gzaloprgm (Ago 2, 2008)

Con el adc interno del pic 'lee' de un generador de funciones y manda los resultados via rs-232. en la pc un programa lo muestra al estilo oscilloscopio.


----------



## Chico3001 (Ago 2, 2008)

torresdelamora dijo:
			
		

> http://www.youtube.com/watch?v=JenpEbd0vTE&feature=related




Torres... de casualidad tu hiciste ese proyecto o sabras como generaron la señal a color?

Gracias....


----------



## torresdelamora (Ago 2, 2008)

del video del pic no esta generando señal para tv solo manda lo adquirido a la pc.

Ese que puse no lo hice yo,  y por mas que lo veo creo que esta en blanco y negro, me parece que esta ese en  la de avrfreaks.

He estado metido con la generacion de vga pero es para un frecuencimetro de 8 digitos y quiero hacer un osciloscopio agregado a esto


YouTube - Frecuencimetro de 8 digitos en Spartan 3


----------



## gzaloprgm (Ago 5, 2008)

Chico3001 dijo:
			
		

> torresdelamora dijo:
> 
> 
> 
> ...



En la descripcion del video pusieron esto:
 TVoscilloscope with ATmega8 and ADC0820  

Están usando un ADC0820, integrado conversor digital -> analogico de 8 bits.

Saludos,
Gonzalo


----------



## Meta (Ago 5, 2008)

¿Aún trabajando con NTSC o señales de vídeo?


----------



## itvboy (Ago 5, 2008)

Hola, yo logre generar seniales de video NTSC utilizando memoria ram dinamica y el pic18F252 corriendo a 48Mhz, manejo 128 x 96 de resolucion con 4 tonos de gris x pixel. Incluso logre manejo de sprites, 8 sprites de 8x8 a un color (tono de gris).

    Ahora quiero saber si alguien ah armado un codificador RGB NTSC, que quisieran compartir, porque poder manejar color me haria muy feliz. Recrearia los video juegos de mi epoca, como pacman, zentipede, frostbit, riverwar, Aliens ETC. Los juegos del atari 2600, disfrute mucho tiempo con esos juegos en mi infancia.


----------



## Meta (Ago 5, 2008)

itvboy dijo:
			
		

> Hola, yo logre generar seniales de video NTSC utilizando memoria ram dinamica y el pic18F252 corriendo a 48Mhz, manejo 128 x 96 de resolucion con 4 tonos de gris x pixel. Incluso logre manejo de sprites, 8 sprites de 8x8 a un color (tono de gris).
> 
> Ahora quiero saber si alguien ah armado un codificador RGB NTSC, que quisieran compartir, porque poder manejar color me haria muy feliz. Recrearia los video juegos de mi epoca, como pacman, zentipede, frostbit, riverwar, Aliens ETC. Los juegos del atari 2600, disfrute mucho tiempo con esos juegos en mi infancia.



Si has logrado eso, es un éxito, falicidades.

¿Has utilizado esta pantalla o LCD?

http://www.msebilbao.com/tienda/product_información.php?cPath=23_87&products_id=465


----------



## Chico3001 (Ago 5, 2008)

gzaloprgm dijo:
			
		

> Chico3001 dijo:
> 
> 
> 
> ...



Nop... el ADC es convertidor Analogico Digital.. y supongo que con ese estan haciendo la adquisicion de la señal del osciloscopio.. pero como generaran la señal de TV?


----------



## Meta (Ago 5, 2008)

¿Qué opinan del PCF8591, ADC y DCA en bus I2C?

Viene en el libro de Ra-Ma para 156F84A, el que dicen ustedes no lo usa pero usa este PCF8591.

¿Lo ven más complicado?

EDIT:
_
Es PCF8591._


----------



## Chico3001 (Ago 5, 2008)

No sera el PC*F*8591?

Se ve interesante pero los convertidores internos y los puertos de salida creo que pueden dar mejor resolucion, ya es normal tener de 10 y 12 bits y he visto de 16 y hasta 24 bits en algunas marcas.... y el DAC se puede hacer con redes R 2R en las salidas de los puertos digitales...

El problema de fondo que veo es el mismo... un circuito lo suficientemente rapido para generar una señal de color que pueda ser convertida a NTSC con algun circuito externo, y me gustaria poder hacerlo usando velocidades estandar de 4 Mhz.... ya que el atari funcionaba con 1Mhz... 

Creo que voy a hacer un circuito con logica combinacional en un CPLD para ver si puede actuar de generador de video.... y usar un micro a 4Mhz estandar para manejar los programas...

No se que opinen los demas...


----------



## Meta (Ago 5, 2008)

Bueno, lo de los bits ya eso es cuestión de elección. Y si, opino lo de 4MHz.

No se que planes tendrá al final con el NTSC.


----------



## pic-man (Ago 13, 2008)

Nunca he trabajado con pics de la familia 18F pero ahora quiero comenzar a usarlos. He estado investigando y con un pic 18F puedo trabajar con un reloj de 48MHz, es decir 12MIPs. ¿Con esa velocidad será suficiente para generar una señal NTSC como debe ser? Es decir, generar una verdadera señal NTSC que incluya información de color.

He visto gente que ha hecho eso usando microcontroladores AVR y SX pero no he encontrado en ningún lugar ninguna explicación para no iluminados. Me estoy documentando con el libro "Video demystified" pero el mundo del video parece bastante complicado, espero llegar a comprenderlo y encontrar alguna manera de realizar una implementación, aunque sea muy básica y sencilla, con un pic 18F ya que los pic son los únicos microcontroladores a los que tengo acceso.

tiopepe123, se ve que tu tienes alguna idea sobre este tema, si así es agradecería tu ayuda o tu guia, asi como de cualquier otro que sepa por donde van las cosas.

Espero que logremos algo bueno.


----------



## darkangeluz (Ago 13, 2008)

pic-man dijo:
			
		

> 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.
> 
> 
> 
> ...


----------



## Meta (Ago 13, 2008)

pic-man dijo:
			
		

> Nunca he trabajado con pics de la familia 18F pero ahora quiero comenzar a usarlos. He estado investigando y con un pic 18F puedo trabajar con un reloj de 48MHz, es decir 12MIPs. ¿Con esa velocidad será suficiente para generar una señal NTSC como debe ser? Es decir, generar una verdadera señal NTSC que incluya información de color.
> 
> He visto gente que ha hecho eso usando microcontroladores AVR y SX pero no he encontrado en ningún lugar ninguna explicación para no iluminados. Me estoy documentando con el libro "Video demystified" pero el mundo del video parece bastante complicado, espero llegar a comprenderlo y encontrar alguna manera de realizar una implementación, aunque sea muy básica y sencilla, con un pic 18F ya que los pic son los únicos microcontroladores a los que tengo acceso.
> 
> ...



No se si lo crecuerdas, te había dicho que en temas de TV uses el PIC18F que alcanza los 48MHz y tiene más memoria. Prueba a ver que tal te sale.


----------



## pic-man (Ago 13, 2008)

Si lo recuerdo, la cosa es que ahora quiero generar la señal a color y no se si con esa velocidad sea suficiente. Si logro algo lo publicaré aqui.


----------



## Meta (Ago 13, 2008)

Hay gente que ha generado 16 colores con los dsPIC. Según ellos, chupa recursos, ahora están experimentando con los PIC32, esto sale en www.mypic32.com


----------



## asherar (Sep 1, 2008)

Acá hay algo de información para trabajar con NTSC. 
Es de hace unos años. 
El sitio original todavía existe pero algunos enlaces no funcionan.

Saludos.

EDITADO: Arreglé los enlaces a las imágenes para que se amplíen bien.


----------



## Meta (Sep 1, 2008)

Alejandro Sherar dijo:
			
		

> Acá hay algo de información para trabajar con NTSC.
> Es de hace unos años.
> El sitio original todavía existe pero algunos enlaces no funcionan.
> 
> Saludos.



Gracias.


----------



## darkangeluz (Sep 7, 2008)

Alejandro Sherar dijo:
			
		

> Acá hay algo de información para trabajar con NTSC.
> Es de hace unos años.
> El sitio original todavía existe pero algunos enlaces no funcionan.
> 
> ...









gracias


----------



## darkangeluz (Sep 14, 2008)

alguien programo esto en otro lenguaje diferente al asm, yo estoy intentando con PROTON y CCS, he podido hacer linea horizontales y verticales, pero me he quedado truncado en como hace letras o graficos?


----------



## pic-man (Sep 23, 2008)

Estoy trabajando en documentar todo lo que hice porque encontrar información simple y clara no es muy sencillo. Cuando tenga todo documentado lo compartiré con el foro, aunque no me comprometo a hacerlo pronto porque hay muchas cosas que me quitan tiempo (el trabajo es la principal), pero si lo compartiré.

Mientras iré comentando algun otro avance que logre.


----------



## Meta (Sep 24, 2008)

pic-man dijo:
			
		

> Estoy trabajando en documentar todo lo que hice porque encontrar información simple y clara no es muy sencillo. Cuando tenga todo documentado lo compartiré con el foro, aunque no me comprometo a hacerlo pronto porque hay muchas cosas que me quitan tiempo (el trabajo es la principal), pero si lo compartiré.
> 
> Mientras iré comentando algun otro avance que logre.



Esperando respuestas...

..mientras tanto haré un manual sobre Visual C# y RS232 con 16F84A.

YouTube - RS232 con PIC 16F84A y Visual C#


----------



## starfox (Oct 21, 2008)

Hola Saludos a toda la comunidad de electronica y aficionados. Yo tambien quiero hacer algunas pequeñas aplicaciones de video con un Pic y mientras investigaba como generar la señal de video con el pic, me tope con este archivo que estudia a detalle la señal NTSC y PAL de video, y a partir de ello poder generar la señal con el PIC.
Por ahora les envio el archivo por si les es de utilidad, mientras que yo voy comenzando con mi proyecto, espero les sea de utlidad la información, yo mientrastanto los tendre al pendiente de mis avances

Archivo en mi pagina:
http://www.gii.upv.es/personal/gben...ñal pal color-garciamartinez/la señal pal.doc


----------



## Meta (Oct 21, 2008)

starfox dijo:
			
		

> Hola Saludos a toda la comunidad de electronica y aficionados. Yo tambien quiero hacer algunas pequeñas aplicaciones de video con un Pic y mientras investigaba como generar la señal de video con el pic, me tope con este archivo que estudia a detalle la señal NTSC y PAL de video, y a partir de ello poder generar la señal con el PIC.
> Por ahora les envio el archivo por si les es de utilidad, mientras que yo voy comenzando con mi proyecto, espero les sea de utlidad la información, yo mientrastanto los tendre al pendiente de mis avances



Hola:

Empieza aquí con algo de información.

https://www.forosdeelectronica.com/f24/videopic-16f877-mensajes-tv-16596/

Saludos.


----------



## Javilondo (Feb 18, 2009)

Oigan amigos, qué tal si intentan usar el integrado *AD725* de Analog Devices.
Este chip es capaz de generar señales *NTSC* o *PAL* a partir de señales *RGB* usando solo cinco entradas:
R
G
B 
H_Sync
V_Sync

He aquí el enlace del datasheet --> AD725.pdf

Y el integrado lo pueden obtener gratis en la página del fabricante --> Analog Devices/Samples.
Solo tienen que registrarse con una cuenta de correo electrónico *no comercial*, es decir que no sea una como hotmail, yahoo gmail o similares, yo por ejemplo utilicé la que me proporciona mi universidad, pero también puede funcionar una cuenta asignada por una empresa donde estén trabajando.


----------



## Moyano Jonathan (Feb 18, 2009)

Yo tengo un proyecto completo , de como generar un GLCD para TV. Este proyecto es del usuario flacolau del foro todopic. 
Si lo quieren lo posteo


----------



## Javilondo (Feb 19, 2009)

> Moyano Jonathan Publicado: Mie Feb 18, 2009 9:17 pm
> Yo tengo un proyecto completo , de como generar un GLCD para TV. Este proyecto es del usuario flacolau del foro todopic.
> Si lo quieren lo posteo


Si amigo, por favor postéalo.


----------



## akarga (Mar 8, 2009)

disculpa pic-man q compilador utilizaste .... sera q tiene alguna diferencia al compilarlo con el ccs?


----------



## pic-man (Mar 8, 2009)

akarga yo el proyecto lo hice en ensamblador utilizando el IDE MPLAB, el proyecto que dice Moyano Jonathan si está escrito en C, quizá utlizando el compilador que tu dices, buscalo en el foro de todopic porque ese proyecto está muy bueno.


----------



## Moyano Jonathan (Mar 8, 2009)

Acá está el proyecto que les decia.


----------



## rubiete18 (Mar 12, 2009)

Despues de leerme todo el post, la conclusion que saco es que no se pude generar video en color no?


----------



## Moyano Jonathan (Mar 12, 2009)

De poder se puede pero los recursos hardware del PIC son algo prohibitivos como para implementarlo, incluso en assembler.


----------



## Chico3001 (Mar 13, 2009)

Si quieres que el pic genere toda la señal a color no se puede con las velocidades actuales, pero si usas el apoyo de circuitos externos que convierten señales RGB a NTSC o PAL entonces si es posible hasta para un PIC a 4MHz, eso si ... a menor velocidad, mas vas a sufrir con la programacion...


----------



## Moyano Jonathan (Mar 13, 2009)

Es verdad, el controlador de video externo es esencial.


----------



## pic-man (Mar 13, 2009)

Rickard Gunee explica en su how to de color de video como generar color usando un microcontrolador SX. Para generar video PAL utiliza una frecuencia de 53MHz y para NTSC utiliza una de 42MHz. Según entiendo los micros SX ejecutan una instrucción en un ciclo de reloj, con un microcontrolador pic se necesitan 4 ciclos de reloj de modo que ni con un PIC 18F a 24MHz se podría generar color... o tal vez sí, pero supongo que el PIC quedaría muy justo. 

Generar las señales RGB y usar un controlador de video externo debe ser la solución, o usar algun microcontrolador como los SX o algun otro que ejecute las instrucciones en un solo ciclo de reloj.


----------



## rubiete18 (Mar 13, 2009)

Mi proyecto fin de carrera va a tratar sobre este tema, asique veremos hasta donde se puede llegar. Os mantendre informaciónrmados y seguramente os pedire ayuda mas de una vez


----------



## itvboy (May 18, 2009)

Saludos, Solo quiero comentarles que hace 3 semanas me puse a trabajar duro (sabados y domingos que descanso del trabajo) y dias festivos, y ya tengo resultados muy satisfactorios.
Lo que tengo es lo siguiente.
- PIC18F252 a 12MIPS (overcloked of course)
- Resolucion 112x74 Pixels blanco y negro (ocupa 1036 bytes RAM interna de los 1536 que tiene el pic)
- Utilizo la interrupcion del timer1 cada 64uS para generar el barrido de la pantalla. (Con lo que el programa principal queda libre para procesar el juego.
- Conectado un control de Super nintendo directamente al PIC, (solo 3 pines).
- Tengo ya programados SPACE INVADERS y PACMAN. (En 1 mes tendre un sitio con toda la información.

Me queda por hacer..

- Conectar un pic de 8 pines (12F675) como procesador de audio.
- Disenar su placa de circuito impreso y armar todo en una cajita.
- Programar mas juegos ( Ajedrez, Breakout, Centipede, Moon Patrol, MEGAMAN atari )
- Documentar todo en una pagina web. ( Quiero compartir con todo el mundo mi micro consola )

A futuro.. (Siguiente proyecto)
- Utilizar un PIC18F452 a 12MIPS (overcloked of course)
- Utilizar una RAM Estatica HM62256 32Kx8 Como Video RAM
- Manejar una resolucion de 192x224 Pixels a 16 Colores (21504 bytes VRAM)
- Manejar el color con el codificador NTSC MC1377P.
- Ahora conectar 4 controles de super nintendo. (para juegos de football, baseball, boleyball etc).
- Conectar 3 pics de 8 pines (12F652) para tener 3 canales de sonido (Uno por pic).

Este ultimo creo que me tomara mas tiempo (quizas hasta fin de anio)
Cualquier pregunta que tengan al respecto con gusto la contestare..


----------



## pic-man (May 18, 2009)

itvboy muy interesante el avance que llevas, ojala publiques algo pronto. Saludos.


----------



## Moyano Jonathan (May 18, 2009)

Me añado al pedido de publicación para estudiar ese proyecto se ve impresionante !


----------



## Meta (May 19, 2009)

Muy buenas.

Para lo que vas hacer, algún día te metes con los PIC32 que ese si te da colores y tienes 80MHz, harás maravilla pero lo primero es lo primero.

¿Lo que estás haciendo es en ensamblador?

http://wk3.iespana.es/tetris.htm
http://www.rickard.gunee.com/projects/video/pic/tetris.php
http://www.redeya.com/electronica/circuitos/monta8.htm
http://www.pablin.com.ar/electron/circuito/mc/tetris/


----------



## Moyano Jonathan (May 19, 2009)

Igual meta cada PIC32 está bastante caro como para hacer las pruebas. Yo creo que mejor sería hacer algo con PIC24F pienso yo meterse de una con esos microcontroladores me parece como que demasiado.


----------



## Meta (May 19, 2009)

mmmmmmmmmm ¿Cuánto de caro?

http://es.rs-online.com/web/476539.html

http://es.rs-online.com/web/search/...ieveTfg&Ne=4294958129&N=4294753830+4294955761

Por lo que veo, cuesta entorno a un 16F84A-04 porque el  16F84A-20 donde vivo cuesta 9€.


----------



## Moyano Jonathan (May 19, 2009)

claro entiendo que donde vos vivas el precio de los micros no sea algo significativo pero donde yo vivo sale [(lo que sale en españa) + impuestos de argentina ] * 5 osea se encarece mucho el precio final.
Igual para que te des una idea: 

http://www.mcelectronics.com.ar/productos/ ahi aparecen los precios detallados de cada micro


----------



## Meta (May 19, 2009)

Ahora entiendo.

Menos mal que está ebay.


----------



## Moyano Jonathan (May 19, 2009)

Si igual acá esa empresa es la única que vende pura y esclusivamente microchip y para colmo aunque no lo creas son mas o menos los mejores distribuidores y con los mejores precios y que además tiene variedad.


----------



## Meta (May 19, 2009)

En Sur de América creo que en Argentina hay uno muy bueno.


----------



## Moyano Jonathan (May 19, 2009)

Si hay más lo que pasa es que yo no vivo en la capital y todo lo tengo que pedir por correo. Igual ya cuando junte algún dinero voy a comprar algún dsPIC o PIC32 pero va a ser recien como para julio donde voy a realizar la mayor cantidad de proyectos y pruebas que pueda.


----------



## Meta (May 19, 2009)

La verdad que para yo comprar un PIC32, primero que saquen libros de como se programa desde cero, que ya lo harán, en inglés si están.

Vamos a ver como queda las señales de vídeo al final de este proyecto.


----------



## Moyano Jonathan (May 19, 2009)

Hay bastantes tutoriales de como se programa para PIC32 en inlges, aunque creo que si nos ponemos todos en el foro podemos hacer mucho mas que con un manual.


----------



## Meta (May 19, 2009)

Verdad. Pero antes debo tener hasta un grabador de PIC32 que no poseo. Vamos a ver si algún día nos ponemos todos de acuerdo,me llama mucho la atención los PIC32.


----------



## Moyano Jonathan (May 19, 2009)

https://www.forosdeelectronica.com/about30181.html este programador pronto va a tener compatibilidad con micros de 3.3v y va a programar toda la línea PIC.


----------



## pic-man (May 19, 2009)

Para generar video a color usar un PIC32 creo que es demasiado. Un PIC16 no puede hacerlo y un PIC18 probablemente tampoco, pero usar un PIC32 para generar video creo que no tiene sentido ya que sería demasiado desperdicio de recursos. Rickard Gunee usó un microcontrolador SX que según lo que entiendo en su página es mas o menos equivalente a un PIC18 pero funciona a una frecuencia mayor, en otros lugares he visto que manejan microcontroladores AVR que también son equivalentes a los PICs así que para generar video blanco y negro o a color no hace falta un PIC32 y usarlo sería desperdiciar recursos.

Mejor sería buscar microcontroladores que se encuentren dentro del rango de las familias PIC16/PIC18 que si sean capaces de hacerlo.


----------



## Meta (May 19, 2009)

El PIC32 es muy rápido. He visto que tiene hasta menú-


----------



## Moyano Jonathan (May 19, 2009)

Meta a que te referis con que tiene menú?


----------



## Meta (May 20, 2009)

Un tío, presentó  un vídeo que mostraba imágenes en color y tiene menú de opciones. Como si fuera la BIOS de un PC, pero más detallada y más bonita. Ese PIC32 tiene de sobra.

A ver si sacan ya traducciones del Inglés al español, hay libros de dsPIC, pero aún no de 32.


----------



## itvboy (May 20, 2009)

Para los que preguntaron, estoy trabajando con el compilador de C PICC PCW, Todo el codigo lo estoy tratando de escribir en C para que sea muy entendible, solo unas pequenas cosas la estoy codificando en ASM. Denme tiempo, voy a tratar de subir mis avances este fin de semana, repito, como trabajo no tengo mucho tiempo, ademas mi novia ya me esta reclamando, se esta encelando de la computadora porque le estoy dedicando mi tiempo libre.. en fin..

// Declaro una matriz que va a ser la ram de video. 
int VRAM[74][14]; // 74 lineas de 14 bytes (14*8=112 pixels)
// Declaro el contador de lineas 1 byte (256 lineas en total, visibles 222.. 222/3=74 lineas)
int ROW_COUNTER;

El timer es algo como esto..
#int_timer1 FAST
void ISR() {
  // Salvar las 5 primeras posiciones de memoria (utilizadas por C)
  SET_TIMER1( 64768 ); // Esto es para tener 64uS entre llamadas a la interrupcion  

  if( ROW_COUNTER<3 ) PULSOS_SINCRONISMO_VERTICAL(); else
  if( ROW_COUNTER<6 ) PULSOS_SINCRONISMO_VERTICAL_INVERTIDOS(); else
  if( ROW_COUNTER<9 ) PULSOS_SINCRONISMO_VERTICAL(); else
  if( ROW_COUNTER<26 ) SINCRONISMO_HORIZONTA(); else
  if( ROW_COUNTER<248 ) SINC_HOR()+GRAFICAR_LINEA( (ROW_CONTER-26)/3 ); else
  SINCRONISMO_HORIZONTAL();

  // Restaurar las 5 posiciones de memoria salvadas..
}

y para escribir a la memoria de video es tan facil como
VRAM[0][0] = 0xFF;

para escribir un pixel seria..
void SetPixel( x,y ) {
  VRAM[y][x>>3] |= 1<<(X&3);
}

para escanear la memoria rapidamente durante la presentacion en pantalla utilizo los punteros FSR2L, FSR2H y POSTINC2.

#asm
MOVFF POSTINC2,PORTB // Presento el byte en el puerto
NOP
NOP
NOP
NOP
RRNCF PORTB   // Roto el puerto, obteniendo el siguiente bit
y asi hasta lograr los 8 bits..

Espero con esto haberles dado unas ideas, esta explicacion es abstracta porque solo queria transmitirles la idea, el codigo completo lo compartire pronto.


----------



## Meta (May 20, 2009)

Buenas.

Te entendemos, tómate tu tiempo hacia tu novia, de lo contrario pasa lo que pasa, ejjejejej

Saludo.


----------



## Fhrozen (May 20, 2009)

Bueno yo he hecho uno modificado que encontre en el internet busque como pic osd, justo lo necesitaba para un proyecto para la empresa en q trabajo y ahora se los paso, aunq va contra la politica de la empresa UPPSS , pero bueno no importa.
Lo encontre para un pic12f683 y generaba señales PAL, las modificaciones q he hecho son para NTSC, pic16f628.

El problema q sigo teniendo es el acoplamiento de las impedancias de salida y entrada ya q depende mucho del voltaje de recepcion y la impedancia del equipo en el q se muestra. Yo trataba de displayarlo en una camara sony cuya resistencia media 200K, tenia como entrada otra camara, y ese era el problema pq cuando lo conectaba a un tv como salida, no tenia problemas
A ver si revisan el ckto y pueden presentar mejoras 
Saludos 

Fhrozen


----------



## Meta (May 20, 2009)

Si tienes las de versión PAL del  12F, pásalas o di el enlace, porque yo tengo que hacer el PAL, aunque los TV de ahora permite configurar también el NTSC.


----------



## Fhrozen (May 20, 2009)

mira la pagina es:
http://www.micro-examples.com/public/microex-navig/doc/081-pic-osd-superimposer.html
el problema es que cuando utilizo una señal de camara cctv (esas de vigilancia que tienen como 200mts de distancia) no se ve bien, no se si alguien podria talvez modificar el ckto para aislarlo o amplificarlo hasta la deteccion, o talvez mejorar el codigo, de todas cualquier mejora es bien recibida 

Hasta otra

Fhrozen


----------



## itvboy (May 26, 2009)

El viernes y sabado (22 y 23 mayo 2009) me puse a trabajar en el I.C. NTE879 (sustituto directo del MC1377) y ya consegui generar colores en mi television.

El sabado y domingo estube trabajando para poder generar colores con mi pic, al fin lo logre y los resultados son muy satisfactorios...

Lo que tengo ahora es lo siguiente..

    - PIC18F252 a 12Mhz (Overclocked of course)
    - Resolucion de pantalla de 192x224 pixels a 16 colores (4 bits x pixel) Tiled mode (modo mosaico)
    - Mosaico de 6x8 a 16 colores almacenados en FLASH MEM, en bancos de 85 tiles.
    - Escenario de 32x28 tiles, almacenados en ram interna del pic ( int VRAM[28][32] )
    - Control de supernintendo acoplado (3 pines)

Con estas caracteristicas se puden generar juegos con la calidad del nintendo de 8 bits, INCREIBLE, de verdad yo mismo estoy sorprendido de lo que puedes lograr cuando utilizas de forma muy ingeniosa las instrucciones avanzadas de los pics de la familia 18F..
Ahora lo que queda por hacer..

    - Cambiar el NTE879 por el AD725 para manejar unicamente 5V y simplificar el disenio.
    - Cambiar el cristal de 12Mhz por uno de 16Mhz, para elevar la resolucion a 256x224 pixel. (NES indee)
    - Integrar 1 PIC16F675 para generar sonidos.
    - Migrar algunos juegos de nintendo a la consola (Tetris, Breakout, zelda y mario)

    Para los que crean que no se puede, dejenme decirles que logre generar 1 pixel de 4 bits con tal solo 3 ciclos de reloj del PIC. Para ello con estos 3 ciclos tomo un pixel del mosaico ubicado en FLASH_MEM y lo muestro en el PORTB (PORTB conectado al NTE879) para ser mostrado en pantalla.

    Este proyecto puede rivalizar muy fuertemente con el proyecto UzeBox ya que hablamos de
    - ATMEL ATMEGA644 8 bits a 40MIPS pantalla 240x224 a 256 colores
vs
    - MICROCHIP PIC18F252 8 bits a 16MIPS pantalla 256x224 a 16 colores. (Calidad NES)

    Prometo pronto publicar en una pagina web gratuita todo el desarrollo.


----------



## Meta (May 26, 2009)

Buen trabajo honorable itvboy.

Que yo sepa el 18F puedes meter hasta 48MHz de reloj. Si quieres más MIPs, hay PIC de 16 bits y otro de 32 bit a 80MHz.

Vamos a ver si soy capaz de realizar cosas con PIC18F.

Saludo.


----------



## itvboy (May 26, 2009)

Gracias META.

    EL PIC18F252 con cristal de 12Mhz (12MIPS) en realidad esta corriendo a 48Mhz, porque utiliza un multiplicador interno 4X. Si logra aguantar el overclock con cristal de 16Mhz, tendre entonces el PIC corriendo a 64Mhz, con rendimiento de 16MIPS, esta semana consigo el cristal a 16Mhz y ya pedi un par de AD725 como muestras gratis a analog devices.

En principio mi intensión era utilizar una SRAM Externa, pero ya eran 2 integrados a utilizar y las SRAM llevan muchas patitas (15 de direcciones + 8 de datos + 3 de control) con lo que se complicaba el disenio, claro que puedo hacerlo pero mi intensión era generar el video unicamente con el PIC18F252.

Estaba en eso cuando encontre en internet el proyecto UzeBox, que con tan solo un microprocesador de 8 bits con 4K ram interna, generaban juegos de 240x224 pixels a 256 colores. Me sorprendio demasiado, y pense si yo podria ser capaz de generar algo parecido con las reducidas prestaciones del PIC18F252.

Empeze a hacer ensayos en papel, de posibles algoritmos para generar imagenes similares con las instrucciones privilegiadas de la serie 18F, si se consigue pero solo bajando la calidad de los pixels de 8bits (256 colores) a 4bits (16 colores), cosa que es muy aceptable, ya que los antiguos adaptadores de video EGA, trabajan a 16 colores y generaban muy buenos juegos y el nintendo de 8 bits generaba imagenes de 16 colores tambien.

Los 4bits es mejor, porque al leer un byte de la memoria FLASH del pic estaremos leyendo 2 pixels (4bits) en lugar de 1 pixel (8bits), con lo que conoseguimos disminuir los ciclos nescesarios para procesar un pixel. Ademas OJO A LO SIGUIENTE... Si presento un byte en el puerto B, donde tendremos 4 bits inferiores para el pixel.. pues tan solo con intercambiar los 4 bits superiores con los inferiores se obtiene el otro pixel en tan solo 1 ciclo,  SWAPF PORTB.

chequen algo (esta no es la rutina final, la rutina final esta muy optimizada)

   TBLRD*+  // Leemos un byte de la memoria FLASH
   MOVFF TABLAT,PORTB     // Presentamos el byte en el puertob..    Se muesta el primer pixel de 4bits
   SWAPF PORTB   // Intercambiamos los 4bits inferiores con los 4bits superiores.  Se muestra el segundo pixel de 4bits.

Esto solo ocupo 5 ciclos de reloj, para mostrar 2 pixels de 4bits.

Espero haberles dado la idea principal de mis rutinas, repido.. mis rutinas estan muy optimizadas y son mas complejas que lo que presente aqui..
Suerte y si alguien consigue overclockear el PIC18F252 mas alla de los 64Mhz (Cristal 16Mhz) les agradecere si comparten como lo hicieron.


----------



## Meta (May 26, 2009)

Muy buena explicación...


----------



## asherar (May 27, 2009)

itvboy dijo:
			
		

> ...
> Empeze a hacer ensayos en papel, de posibles algoritmos para generar imagenes similares con las *instrucciones privilegiadas* de la serie 18F, ...
> 
> chequen algo (esta no es la rutina final, la rutina final esta muy optimizada)
> ...



Hola, itvboy, realmente grande lo tuyo, ... y perdona mi ignorancia del 18F... pero :

Qué es eso de *instrucciones privilegiadas* ... ?     
Supongo que es esa instrucción *TBLRD*+* ? 

Dónde se consiguen para los pic 16... ?  Yo quiero ! :x

Saludos


----------



## itvboy (May 28, 2009)

Saludos Alejandro..

    Instrucciones privilegiadas? Creo que me equivoque a la hora de plasmar la idea en texto, el pic18F252 de instrucciones privilegiadas utiles para esto solo serial TBLRD* y MOVFF, pero lo que realmente queria decir es que la serie 18F tiene "Registros privilegiados" que permiten el manejo de vectores de manera eficiente.

Los punteros a registros FSR0,FSR1,FS2 de 16 bits, permiten indexar toda la memoria ram
Con los registros POSTINC,PREINC,POSTDEC,PREDEC,PLUSW puedes accesar muy rapidamente la memoria ram.

Ejemplo de convinacion de instrucciones y registros de la serie 18F

MOVFF POSTINC0,TBLPTRL   // Leo el num de sprite y lo indexo en FlashMem (TBLPTR)
TBLRD*+  // Leo un byte en FlashMen correspondiente al sprite eh incrementa el puntero TBLPTR
MOVFW TABLAT   // Pongo el byte en el registro W para indexar una paleta de colores
MOVFF PLUSW1,PORTB   // Presento el byte indexado por una paleta de colores en el puerto B
SWAPF WREG  // Intercambio los 4bits inferiores por los superiores para indexar otro pixel.
MOVFF PLUSW1,PORTB  // Muevo el color indexado al puerto B


Si te das cuenta, para una rutina asi son necesaria estos registros eh instruccciones,  La instruccion MOVFF es muy util porque mueve bytes entre posiciones con una sola instruccion y sin ocupar el registro W.
El registro POSTINC0, regresa un byte, que es indexado por FSR, ademas despues de leerlo incrementa el indice FSR para asi poder leer el siguiente byte en memoria la proxima vez. todo en una sola instruccion.

Espero poder haber aclarado esto.

Porcierto.. Ayer hice pruebas en mi casa con sonidos, resulta ser que no es necesario utilizar un PIC de apoyo para generar el sonido, el mismo PIC18F252 que grafica todo, lo puede hacer, el truco es ocupar la misma interrupcion de 64uS para graficar las lineas horizontales, la forma mas facil es por muestreo. Osea, almaceno en un vector las muestras del sonido que quiero reproducir y cada vez que entra a la interrupcion presento una muestra en un puerto con DAC. No tengo nada de experiencia con sonidos y pics, pero espero tener algo pronto.


----------



## Meta (May 28, 2009)

itvboy, eres digno de ser admirado...


----------



## asherar (May 28, 2009)

itvboy, gracias por la aclaración.



			
				Meta dijo:
			
		

> itvboy, eres digno de ser admirado...


Suscribo.


----------



## Javilondo (Jun 3, 2009)

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.



Hola amigos.
Como dijo el compañero Gonzalo en el mensaje #24, los que diseñaron el atari2600 no se complicaron tanto con la programación digital y no les hacia mella el hecho de tener un procesador de 1MIPS, ya que tenían algo mucho más poderoso: *un procesador de video analógico*. Tener un procesador a la medida de nuestras necesidades es mucho mejor que cualquier micro programable, por eso se me hace interesante la idea de construir un procesador de video que deje atrás los líos de la programación, ya que el microcontrolador sólo se ocuparía de las rutinas más sencillas como mandar la información del color y posición de pixeles (x,y) al procesador de video que con ayuda del integrado AD725, convierte las señales RGB en NTSC/PAL.

Quiero darme la tarea de construir un procesador de video, pero necesito mucha RAM porque quiero tener un buffer completo para toda la imagen. Para generar una imagen con registros de 8 bits manteniendo una proporción de aspecto de (4:3) la máxima resolución posible sería 256x192 (49152px). Si se quiere que se tengan 256 tonos por color para cada pixel, siendo tres los colores básicos se necesitarían 3 bytes (un byte por color) quedando así la imagen con una calidad de colores de 24 bits. Tenemos pues que (49152px)*(24 bits) = 1179648 localidades de memoria, lo que es igual a 1152kb o también equivale a 1.125Mb o también a 144kB. Todo esto puede parecer demasiado pero he visto que las tarjetas de RAM de una PC poseen módulos de circuitos integrados con capacidades superiores.

Para todo esto, hablando sin rodeos, quisiera saber si alguien conoce alguna memoria RAM expansible para ser conectada en un microcontrolador sencillo o en un circuito secuencial que pueda se usado como procesador. También me serviría contar con información de cómo utilizar los módulos de las tarjetas de memoria RAM.

Les agradeceré cualquier dato.


----------



## asherar (Jun 3, 2009)

Javilondo dijo:
			
		

> Para todo esto, hablando sin rodeos, quisiera saber si alguien conoce alguna memoria RAM expansible para ser conectada en un microcontrolador sencillo o en un circuito secuencial que pueda se usado como procesador. También me serviría contar con información de cómo utilizar los módulos de las tarjetas de memoria RAM.
> 
> Les agradeceré cualquier dato.



Has considerado la opción de usar una memoria accedida via USB ?
Capacidad de almacenamiento no te va a faltar, y la manejás con un pic.


----------



## Javilondo (Jun 4, 2009)

Alejandro Sherar dijo:
			
		

> Has considerado la opción de usar una memoria accedida via USB ?
> Capacidad de almacenamiento no te va a faltar, y la manejás con un pic.



Lo que comentas no es muy práctico porque sólo cubre la necesidad del espacio o capacidad, pero no la de velocidad, que es realmente la propiedad que interesa en un procesador de video. Lo que pasa es que las memorias RAM son de ciclos rápidos de lectura/escritura  (en el orden de ns) y las memorias EEPROM y FLASH tardan mucho más en ser leídas y escritas (n el orden de µs y ms), consumiendo así tanto tiempo que resultaría éste insuficiente para generar las instrucciones de sincronía horizontal de 64µs y ni pensar las de sincronía vertical. Además las memorias no volátiles tienen una vida limitada de ciclos de escritura que rápidamente se acabarían en los procesos de video, lo cual es malo porque cuando a un cluster de memoria se le termina la vida útil de sus ciclos de escritura sólo podrá ser leído, y ya no podrá almacenar nuevas variables. 

¿O acaso te refieres a una memoria RAM USB? En ése caso si es factible, pero aún seguiría sin ser práctico, ya que le quitarías la simpleza al diseño al utilizar un protocolo de comunicación de alta velocidad y complejidad, siendo así, si cuentas con los recursos suficientes para comunicarte por protocolo USB, sería mejor encausar tal potencia de procesamiento a generar con el mismo PIC las rutinas y patrones de video, condición que volvería innecesaria una memoria externa.


----------



## itvboy (Jun 5, 2009)

Como diria una cancion..
"Close your eyes so you don't feel them."
No se desanimen, todos podemos usar la imaginacion y proponer soluciones a un problema, lo que si seria bueno, es agrupar las ideas en objetivos similares.. see this..

objetivos diferentes (que agrupan objetivos similares)
- Un generador de video para televisores NTSC con resoluciones alrededor de (256x224) en colores, sin Video RAM (Generacion por Mosaicos,sprites).
- El mismo que el anterior pero con una memoria de Video (256Kbytes minimo).
- Un generador de video para computadora VGA con resoluciones alrededor de (640x480) utilizando Video RAM (1Mbyte como minimo)
- Un generador de video en 1 o 2 chips. (aplica para los 4 anteriores)
- Un generador de video super complejo (muchos chips y aplica para los 4 primeros).
- Generar video con logica digital (compuertas, flipflops etc) (aplica para los 4 primeros)
- Genrear video con un microprocesador (aplica para los 4 primeros)

Asi que seria bueno que nos hubiquemos cada uno en algun grupo, o reconocieramos ideas similares y le pusieramos nombre a la propuesta para poder saber de cual idea estamos haciendo un comentario.

Como ven? Yo en lo personal tengo muy avanzada la primera idea, pero despues me gustaria intentar un controlador avanzado con Video RAM para imitar un Playstation. Ya imagino que se puede, solo tengo que utilizar Mucha RAM y microcontroladores poderosos (100MIPS-32bits or better).

Nos vemos, esta semana me enferme y no hice nada en casa, ya me siento mejor, este fin de semana siguo trabajando con el PIC18F252.


----------



## Chico3001 (Jun 5, 2009)

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.





			
				Javilondo dijo:
			
		

> Como dijo el compañero Gonzalo en el mensaje #24, los que diseñaron el atari2600 no se complicaron tanto con la programación digital y no les hacia mella el hecho de tener un procesador de 1MIPS, ya que tenían algo mucho más poderoso: *un procesador de video analógico*.



Yo revise un poco sobre el tema...... en realidad era un CPLD Xilinx que hacia la funcion de procesador de video...


----------



## itvboy (Jun 5, 2009)

En esa epoca (atari2600) era imposible generar video con microprocesadores dedicados porque eran muy lentos (1 MIPS), asi que eso se resolvia con logica digital (CPLD), pero ahora las cosas son diferentes, tenemos microprocesadores que corren a mas de 100 MIPS. Aunque incluso hoy en dia siguen utilizando la logica digital (FPGA).

Suerte con el proyecto, yo seguire intentandolo con microcontroladores, porque me sientan bien, los que quieran intentar con logica digital adelante, luego nos platican como programar en VHDL o Verilog... (El PPU de nintendo esta escrito en Verilog).


----------



## alpharsp (Jun 17, 2009)

que onda jeje
aca reviviendo temas
me parece muy interesante todo lo que han estado comentando en este tema jaja
felicidades a los que lograron hacer todo esto 

bueno tengo un problema
la verdad es que no me sale nada 
mi meta es para mañana hacer un videojuego sencillo con el pic 16f84
ya tengo unos dias estudiando esto hice varias pruebas e incluso descargue el tetris de rickards projects

para empezar debo mencionar que estoy utilizando un cristald e 4mhz
y en este momento me es imposible conseguir uno mas rapido
donde vivo als tiendas de electronica estan muy pobres 
en ocaciones nisiquiera tienen el 16f84 y no se diga otros pics todos son sobre pedido
el detalle es que no puedo trabajar para mañana con otro pic que nos ea este y otro oscilador.

estoy haciendo pruebas apenas de sincronizacion horizontal
y lo hago exactamente como lo mencionan quiza un poco diferente por las limitaciones de este oscilador
-frontporch de 2us en 0.3v
-sync de 5us en 0v
-un delay deunos 6us en 0.3
-finalmente la información entre 0.3 y 1v durante 49us que es lo que me resto

y este patron lo repito indefinidamente
MI TELEVISOR ES NTSC soy de mexico  aunque en sincronizacion horizontal no deberia afectar 

pero no me funciona si trato de poner una barra vertical blanca me sale toda la pantalla con diversas lineas blancas
tengo un par de dudas que me gustaria me pudieran resolver:

1.-estoy metiendo la señal por rca es lo correcto cierto ?
2.- el televisor que uso no es muy antiguo  rickard hace alucion a televisores antiguos y por ahi lei que hay televisores de señal entrelazada, es cierto? puede este ser mi problema
3.- otra cosa lapantalla de video normalmente es azul y cuandos e conecta algun dispositivo por rca la visualiza entonces pero al visualizar mis errores solo al cambiar a ese canal puedo ver lo que estoy haciendo por alrededor de 1 o 2 segundos despues nuevamente se ve azul pero con una leve distorcion (como puedoe stabilizar la señal para que me siga apareciendo lo que hago?

quiza los siga molestando pero esas son las dudas que tengo para poder empezar a hacer algo 

el tetris que baje lo corre pero solo puedo ver una porcion un poco extraña supongo que se debe al oscilador


----------



## JOJOJORGE (Jun 17, 2009)

Hola

felicidades por tu proyecto picman
yo no encontre el 16f88 pero cambie el programa para que funcione en el 16f877a y funciona a la perfeccion. los cambios son miserables pero si quieren el programa modificado lo subo.

tambien consegui un RF-Converter de un vhs muy antiguo y logre transmitir la señal por el canal 3 y 4.

la idea de usar el pic18f2550-18f5440 para la generacion de color me parece muy interesante porque con un cristal de 4MHz puedes trabajar a 48MHz 12Mips configurando el PLL.
ademas de tener mucha mas memoria.

salu2


----------



## alpharsp (Jun 17, 2009)

Aqui va el codigo que estaba utilizando  por lo del oscilador no quice arriesgarme a usar mal los tiempos asi que tengo muchos NOP  si alguien sabe de algo que me pueda ayudar digame porfas 

este programa me da muchas rallas blancas distribuidas a lo largo d ela pantalla parpadeando que deberia dejarmelas en 1 sola linea vertica separadas por muchas lineas negras 

igual si alguien tiene un ejemplo sencillo para el 16f84 que me facilite seria de gran ayuda =D gracias


```
list P=16F84A
#INCLUDE P16F84A.INC
#DEFINE BANCO_0 BCF STATUS,5
#DEFINE BANCO_1 BSF STATUS,5
COLOR_SYNC EQU 0H
COLOR_BLACK EQU 1H
COLOR_GRAY EQU 2H
COLOR_WHITE EQU 3H
VIDEO_PORT EQU PORTA 
DELAY_CNT EQU 0CH
CNT_1 EQU 0DH
CNT_2 EQU 0EH
;EL DELAY TIENE UNA PERDIDA DE 4N+2 CICLOS DE RELOJ
DELAY	MACRO
	LOCAL LABEL
	MOVWF DELAY_CNT
LABEL DECFSZ DELAY_CNT,1
	GOTO LABEL
	ENDM
;FIN DELAY
	ORG 0H
	GOTO BEGIN
	ORG 05H
BEGIN NOP
	BANCO_1
	BCF TRISA,0
	BCF TRISA,1
	BANCO_0
HORIZONTAL	
;----SINCRO VERTICAL----
	MOVLW 6
	MOVWF CNT_1 
SHORT_SYNC	MOVLW COLOR_BLACK
	MOVWF VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOVLW COLOR_SYNC
	MOVWF VIDEO_PORT
	DECFSZ CNT_1
	GOTO SHORT_SYNC
	MOVLW 6
	MOVWF CNT_1 
LONG_SYNC	MOVLW COLOR_SYNC
	MOVWF VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOVLW COLOR_BLACK
	MOVWF VIDEO_PORT
	DECFSZ CNT_1
	GOTO LONG_SYNC
	MOVLW 6
	MOVWF CNT_1 
SHORT_SYNC2	MOVLW COLOR_BLACK
	MOVWF VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOVLW COLOR_SYNC
	MOVWF VIDEO_PORT
	DECFSZ CNT_1
	GOTO SHORT_SYNC2
;----FIN VERTICAL------
	MOVLW .200
	MOVLW CNT_1
;----------SINCRONIZACION HORIZONTAL--------
BLACK	MOVLW	COLOR_SYNC
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	MOVLW  COLOR_BLACK
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP	
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ CNT_1
	GOTO BLACK
WHITE	MOVLW	COLOR_SYNC
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	MOVLW  COLOR_BLACK
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOVLW  COLOR_WHITE
	MOVWF	VIDEO_PORT
	MOVLW  COLOR_BLACK
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP	
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOVLW .200
	MOVLW CNT_1
BLACK2	MOVLW	COLOR_SYNC
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	MOVLW  COLOR_BLACK
	MOVWF	VIDEO_PORT
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP	
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ CNT_1
	GOTO BLACK2

;----FIN HORIZONTAL---------
	GOTO HORIZONTAL
	END
```


----------



## Chico3001 (Jun 17, 2009)

alpharsp: Por favor usa el comando 
	
	



```
para que los programas no se extiendan demasiado y se pueda tener una lectura clara de las respuestas en el foro...

Gracias...
```


----------



## asherar (Jul 14, 2009)

No sufran más muchachos, acá está  "la papa".


----------



## Chico3001 (Jul 14, 2009)

que belleza.....  eso se acaba de convertir en mi proximo proyecto......


----------



## aguevara (Jul 15, 2009)

muy interesante


----------



## enzo84 (Sep 20, 2009)

Hola gente, quiero hacer un generador de barras verticales en escala de grises, algo muy sencillo, tengo un 16f84a y un 16f876a, preferentemente con el 16f84a quisiera hacerlo.
Me ayudan?
Estuve buscando algún código en la web pero no encontré nada hecho...


----------



## enzo84 (Sep 25, 2009)

Hola otra vez, basandome en el sitio http://www.rickard.gunee.com/projects/video/pic/howto.php en el código de ejemplo que está incompleto, que debería generar una barra blanca en el medio y dos grises a los costados del tv. Lo hice para un pic 16f876a, los delay los hice con nop, suponiendo que cada nop tiene una duración de 1us, ya que uso un cristal de 4mhz.
El problema es que me sale lo siguiente en el TV:
http://img97.imageshack.us/img97/1170/210909tv.jpg
Y no se porque sale eso... alguna ayuda?
Este es el código:

```
LIST P=16F876A 
	PROCESSOR 16F876A 
	INCLUDE "P16F876A.INC" 
	RADIX           DEC
	__IDLOCS        H'0000'
	ERRORLEVEL      0, -302, -306

	__CONFIG 		_CP_OFF&_PWRTE_ON&_BODEN_OFF&_LVP_OFF&_DEBUG_OFF&_XT_OSC&_WDT_OFF&_WRT_OFF 


	ORG 00h

	bsf STATUS,RP0 
	bcf STATUS,RP1		;pagina 1
	movlw 00000000B		;todos como salida
	movwf TRISB
	bcf STATUS,RP0 		;pagina 0

main:	
	movlw B'00000001'	;get black level (1)
	movwf PORTB		;set port value (1)
	movlw B'00000000'	;get sync level (1)
			;****5 4us sync ****	
	movwf PORTB		;set port value(1)
	NOP			;delay for 4us (4)
	NOP
	NOP
	NOP			
	movlw B'00000001'	;get black level (1)
			; **** 8 us delay ****	
	movwf PORTB		;set port value (1)
	NOP			;delay for 8us (8)
	NOP			
	NOP
	NOP
				;NOP
				;NOP
				;NOP
				;NOP
	movlw B'00000010'	;get gray color (1)
			; **** 52 image data ****	
	movwf PORTB		;set port value (1)
	NOP			;delay for 4us (4)
	NOP
	NOP
	NOP
	movlw B'00000001'	;get black level (1)
	movwf PORTB		;set port value (1)
	NOP			;delay for 20us (20)
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	movlw B'00000011'	;get white level (1)
	movwf PORTB		;set port value (1)
	NOP			;delay for 4us (4)
	NOP
	NOP
	NOP
	movlw B'00000001'	;get black level (1)
	movwf PORTB		;set port value (1)
	NOP			;delay for 20us (20)
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP	
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	movlw B'00000010'	;get gray level (1)
	movwf PORTB		;set port value (1)
	NOP			;delay for 3us (3)
	NOP
	NOP
	NOP	

	goto main		;loop forever jump (3)
END
```
Muchas gracias!! Saludos


----------



## elAguila (Oct 3, 2009)

chekate esto:http://www.geocities.com/SiliconValley/Monitor/1802/ 
es muy muy viejo lo hizimos hace 12 años y funcino prfecto, alguien copio el website y lo mantiene vivo aun. fue un decodificador de cable y genera toda la señal de tv, habia uno de Rudolf F. Graff y William Sheets que con otros medios generaba hasta el color usando un chip viejo de videocamara el CD22402 lo interesante de ese era la forma en que regeneraba todas las sincronias a partir del burst de crominancia de otra señal usando cristal, pll, divisores y multiplicadores.
en esa pagina debe de estar todo, pero yo devo de tener aun el codigo original en algun disco viejo.


----------



## pic-man (Oct 4, 2009)

lo que itvboy ha logrado es genial, este es un proyecto que practicamente ya tengo abandonado aunque aún me queda la espina de lograr generar color con un PIC, este es uno de los proyectos que tengo pensado retomar próximamente, ahora siguiendo los pasos de itvboy


----------



## carlper07 (Nov 21, 2009)

oye sera que tu me puedes faciliar el codigo que hiciste para los sincronismos en Css
ya que estoy iniciando este proyecto y no se nada de assembler. Te agradezco


----------



## Meta (Dic 31, 2009)

Hola de nuevo, tengo ganas de aprender hacer lo de las señales e vídeo al menos en PAL, los televisores de Europa tiene la posibilidad de seleccionar PAL y NTSC.

Parace que han avandonado. Al menos espero aprender como hacer funcionar conun *16F84A* o mejor aún un *16F88* que tiene más memoria. _(16F88 lo estoy probando y mola)_.



Quiero hacer un ampliación de lo que hice, mostar los datos también en TV al igual que en el LCD y el PC. Ufffffffffff, pensando bien, ya hay que usar un PIC mayor como el *16F886* por lo menos.

Ver progreso.

Espero a ver si alguien hace una breve introducción sobre señales de vídeo para poder poner los datos mostrados en un LCD 16x2 en la TV también.

Feliz año nuevo a todas.


----------



## pic-man (Dic 31, 2009)

Hola de nuevo!

Meta que bueno que tengas interés por generar señales de video. Este tema lo dejé abandonado aunque aún tengo las ganas de ponerme en serio con el. De hecho tengo pensado hacer un proyecto grande a futuro por lo que comenzando este 2010 que ya se nos viene encima me voy a poner a trabajar de nuevo, empezando casi desde cero pero con gusto compartiré lo que vaya haciendo con el foro, así que esa explicación que buscas la tendrás en breve.

Entre todos estoy seguro que se puede sacar adelante lo del video.

Feliz año nuevo, que el 2010 les traiga éxito en sus proyectos!


----------



## Meta (Dic 31, 2009)

Gracias por responder mi muy distinguido amigo.

  He intentado buscar por este tema el _*circuito*_ como lo has hecho para pasarlo a Proteus 7.6. El PIC que quiero es con el 16F84A o con el 16F88 que está mejor en memoria programado en ASM. Si usas el 16F876A o 16F877A que sepas que microchip no los vende ni los fabrican, los que consiguen son lo que queda en Stock en los locales hasta fin de existencia. Su sustituto es el 16F886 y 16F887 con mejores prestaciones, de todas formas ya habían dado la noticia desde hace un a´ño, pero el 16F84A sigue fabricándoce.

Si siguen empeñado en programarlo en 16F876A lo intentaré pasarlo al 16F84A o 16F88 que sea más cómodo posible o que le sobre memoria para no tener problemas.

Si te animas, pues de momento dejo estos enlaces por si ayuda.
http://xtiming.sourceforge.net/cgi-bin/xtiming.pl
http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html


Puedes hacerlo con lo cómodoo que te sientas en NTSC que ya se hará con PLA también. Con el PIC16F88 y 16F876A hay posibilidad con un simple     *btfss    NTCS_o_PAL,W* ya puedes elegir el sistema.

Saludos y felices fiestas.


----------



## wendellbowerman (Ene 6, 2010)

I'm using PIC 16f84. Please programmed word KHOA DIEN on screen.

Thank you


----------



## Meta (Ene 6, 2010)

I also use the 16F84A and 18F88.


----------



## Hatchy (Jun 3, 2010)

Buenas... a todos.... 

Quiero saber si existe algun codigo en C que pueda generar una señal de video NTSC para un PIC...

Gracias anticipadas

Hatchy


----------



## Moyano Jonathan (Jun 5, 2010)

para microcontroladores PIC no creo que encuentres...por el tema de la velocidad de ejecución del código ....pero para AVR de ATMEL vas a encotrar muchisimos proyectos desde simples generadores de video hasta códigos que ejecutan video en tiempo real.


----------



## Meta (Jun 5, 2010)

Si quieres PIC para proceso de señales. Están los PIC de 16 Bits muy poderosos en ese snentido, sea de audio o vídeo. Los dsPIC. (Digital Signal). 

Más aún son los PIC32.


----------



## Moyano Jonathan (Jun 6, 2010)

pero mirá la diferencia meta:
PIC32 con librería para gráficos en tiempo real: U$S 35
ATmega644 + Librería OPEN soft..... U$S 8

La diferencia de precio es demasiada para no tenerla en cuenta...


----------



## Meta (Jun 6, 2010)

No me acordé del precio, ajjajaja. La verdad es que si. Microchip tiene mucho negocio a pesar de los caros que son.


----------



## Chico3001 (Jun 6, 2010)

Moyano Jonathan dijo:


> pero mirá la diferencia meta:
> PIC32 con librería para gráficos en tiempo real: U$S 35
> ATmega644 + Librería OPEN soft..... U$S 8
> 
> La diferencia de precio es demasiada para no tenerla en cuenta...



ATMEGA64 + libreria open soft $8 usd
PIC32 con libreria de graficos   $35 usd

Saber que microsoft uso tu codigo en el XBOX y nunca los podras demandar .... NO TIENE PRECIO!!!!


----------



## Meta (Jun 7, 2010)

El PIC32 con el kit PCB te cuesta 35, el PIC32 solo unos 9 € por ahí que yo sepa, tengo entendido.


----------



## Hatchy (Jun 7, 2010)

Moyano Jonathan dijo:


> pero mirá la diferencia meta:
> PIC32 con librería para gráficos en tiempo real: U$S 35
> ATmega644 + Librería OPEN soft..... U$S 8
> 
> La diferencia de precio es demasiada para no tenerla en cuenta...


Gracias

He de investigar con el ATmega644 es importante la diferencia.

Saludos

Hatchy


----------



## Moyano Jonathan (Jun 9, 2010)

Si la diferencia es grande....meta es verdad lo que decis....sale U$S35 con la placa de gráficos pero en AVR con placa de gráficos para el tele con video en tempo real sale U$S 8


----------



## Meta (Jun 9, 2010)

Menudo cambio. Aún así la gente veo que se descarta por lo más caro, a los PIC. Por algo será.


----------



## Moyano Jonathan (Jun 9, 2010)

Igual meta...es cuetion de ponerse a buscar info...
No he encontrado proyectos serios de generación de video con PIC por el tema de su arquitectura....ahora con AVR tenés muchisimos proyectos con el código fuente incluido....

Te dejo unos links de videos donde se muestra lo que te digo:
http://www.youtube.com/watch?v=z4NxPw6Hj18

Y el proyecto en donde muestran una consola de video con el chip ATmega644:
http://www.youtube.com/watch?v=hWWsSn_QKLM&feature=related


----------



## Meta (Jun 9, 2010)

JEjeje, está muy bueno, claro que lleva mucho más tiempo en el mercado que los PIC32. Demasiado careros los PIC, no se puede hacer nada, eso si, venden como rosquillas.


----------



## Meta (Ago 26, 2010)

Hace un tiempo iban  a sacar un mini tutorial sobre PIC y la TV. ¿Aún sigue en pie? Sólo por curiosidad.


----------



## Ligator (Oct 29, 2010)

Hola
Me interesa el tema para pics en C, mi esperanza era que itvboy publicara su prometedor proyecto pero hace más de un año que no comenta  
Lo más parecido que he encontrado es una biblioteca en C para PAL con el compilador mikroC y un pic de la gama 18F:

http://www.micro-examples.com/public/microex-navig/doc/089-pic-pal-tv

Yo aún no soy diestro en la generación de señales, pero creo que a los veteranos del tema no les será difícil adaptarlo al estándar ntsc. Ojalá se interesen por ello.


----------



## Ligator (Oct 30, 2010)

Unos chavos ya lo consiguieron:

http://www.todopic.com.ar/foros/index.php?topic=22424.160

Está en C con el compilador de CCS, utiliza un pic18F y su uso es transparente con las bibliotecas GLCD. Me encantó.


----------



## Meta (Oct 30, 2010)

Hola:

Aquí puedes dscargar ejemplos en .asm y C del GLCD para aprneder, son prácticas y hay muchos.
http://www.msebilbao.com/tienda/product_info.php?products_id=409

Saludo.


----------



## Moyano Jonathan (Oct 30, 2010)

Acá les dejo un proyecto con PIC para generar video NTSC con PIC, escrito en C de CCS:
http://www.quackenbush.com/lab/picvideo.html


----------



## Ligator (Feb 18, 2011)

Eah!, ya tengo mis samples del AD725....

¿Y ahora qué hago?, ¿cómo se generan las señales RGB y el sincronismo????
¿Alguien ha publicado algo de eso en español?


----------



## Meta (Feb 18, 2011)

Si quieres RGB lo mejor ya sería un PIC de 16 Bits como mínimo, si es de PIC32 lo tienes asegurado.







http://www.winpic800.com//index.php?option=com_content&task=view&id=42&Itemid=94


----------



## Ligator (Feb 19, 2011)

Gracias por tu pronta respuesta Meta, pero preferiría un pic de 8 bits, quizá un pic18F que mande las señales RGB (que se supone que son más fáciles de generar) al AD725, el cual es un ci dedicado a la generación de la señal de video compuesto.
Se que con este ci se puede hacer bastante, como el ejemplo de la Uzebox, pero no he encontrado un lugar donde digan como se generan estas señales y los pulsos de sincronismo. Si se generan (como creo que sugieres) igual que las señales que se mandan a los monitores convencionales, entonces la programación se complicaría mucho y el AD725 no sería una gran ventaja.
Espero que me haya explicado, de todas formas sigo echándole el vistazo a la Uzebox a ver que se me pega


----------



## diablorojo16 (Mar 25, 2011)

hola buenos dias. 

si uno de ustedes tiene alguna informaicon de como hacer de que mi puerto vga se quede abierto es decir que este enviando señal todo el tiempo para conectar a el un circuito enconder el AD725 es que nesesitoque este este enviando señal todo el tiempo para poder visualizar en la TV CRT en video compuesto. si alguien sabe acerca de este tema quisiera que me enviaran un poco de infomacion acerca de este tema. gracias


----------



## Chico3001 (Mar 25, 2011)

Hasta donde tengo entendido el VGA siempre esta enviando informacion de video... para comprobarlo necesitas conectarle un monitor y ver que aparezca algo.... 

El error deberia estar en otro lado...


----------



## diablorojo16 (Mar 25, 2011)

lo que quiero es conectar un circuito en la salida vga pero este no envia nada. ningun tipo de señal ando checando con el osiloscopio la señal que envia hacia el integrado pero este no maanda nada esa es la duda como ago para pueda visualizar al informacion que envia. la sincronia vertical y horizontal. asi como los voltajes de salida de cada uno de los colores (RGB). esa es mi duda. como le ago es que he chacado una informacion acerca de este. pero me dice que tengo que instalar algun driver para que puede enviar la informacion pro el puerto
http://www.analog.com/static/imported-files/eval_boards/AD725_eval_board_instructions.pdf
este es el link pero ahi menciona un sofware que se intala por eso me salio la duda de si alguien sabe de este tema que me pudiera ayudar. por que este diseño lo puedo armar ya que cuento con el ad725 y las piezas son faciles de conseguir. nada mas mi duda es respecto al sofware si sabe alguien que se tiene que hacer para qe lo detecte la computadora. espero algun tipo de informacion.


----------



## tronik (Mar 25, 2011)

dudo musho que lo encuentres si te lo pasan lo publicas como te fue ¡


----------



## duile (Mar 25, 2011)

http://www.pablin.com.ar/electron/circuito/mc/picdream/index.htm

prueba con éste!!!


----------



## diablorojo16 (Mar 25, 2011)

hola buenos dias. bueno ya logre generar video mediante el pic16f84a y el mc1377. eso ya lo hice nada mas que lo que quiero hacer es mandar video de la pc a la TV (CRT) en formato de video compuesto. espero su respuesta si alguien sabe como hacer eso es que lo pretendo hacer con el MC1377 o el AD725 com se pude ver en su hoja de datos del AD este tiene mas posiblidades de la conecxion pero hay una duda de como hacer que la pc lo reconoscos como monitor. mediante el AD725 si alguien tuviera alguna informacion hacerca de este tema. espero su informacion.


----------



## sbl (Mar 31, 2011)

hola esta interesante buenisimo
yo quiero hacer la manera de mostraea textos en un televisor de la siguiente manera
-20 lineas de texto de 20caracteres cadad una.
el detalle es no se por dnd empesar yo programo en asm.
la informacion tiene que ser generda en ntsc monocromo.
encontre proyectos bueno la mayoria estan en pal.
agradesco la ayuda


----------



## sbl (Abr 7, 2011)

hola ya logre generar las lineas de video horizontal con un pic 16f84 aunque tengo problemas todavia con la sincronia vertical al modificar la eficiencia de las lineas


----------



## Meta (Abr 23, 2011)

Cuando te salga, pones ejemplos.

Felicidades por ahora.


----------



## sbl (Abr 23, 2011)

hola
este ejemplo logre la sincronia vertical y horisontal nada mas


----------



## Meta (Abr 23, 2011)

Muy bueno, te funciona. ¿Es en NTSC o PAL?

¿Sabes poner frases en pantalla?

Saludo.


----------



## sbl (Abr 25, 2011)

la señal esta generada en NTSC con krystal de 10M estoy trabajando en una version mas abansada en la uqe pueda mostrar 30 lineas con  un mensaje de 40 caracteres por linea


----------



## Meta (Abr 25, 2011)

Ya nos enseñará de que va la cosa, ejje.


----------



## Moyano Jonathan (Abr 26, 2011)

Hay un exelente proyecto (Para micros AVR), en el cuál se plantea un terminal serie para el televisor donde se puede mostrar texto a partir de una señal RS232.

Se los dejo...yo tengo los materiales para hacerlo..aunque tengo que modificar el firmware para que soporte el ATmega328P.

http://www.batsocks.co.uk/products/Other/TellyMate.htm

También hay con PIC, eso si...para monitores VGA: http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/(guia)-generar-senal-vga-con-un-pic-18fxxxx/


----------



## Meta (Abr 26, 2011)

Siempre he querido hacer estas cosas. L que veo más fundamental es aprender bie, bien, pero bien es el lenguaje estandar como el C par acasi cualquier microcontrolador.


----------



## Meta (Abr 30, 2011)

Aquí hay ejemplos en asm sobre señales PAL y NTSC sobre los PIC y funciona.












http://usuarios.multimania.es/zootronica/modules.php?name=News&file=article&sid=32

Saludo.


----------



## sbl (May 2, 2011)

yo en particular no manejo  el avr ni ningun otro micro aparte de los pic y trato de hacer un programa senc
illo que pueda hacer todo lo que nesecito con el crystal mas bajo posible y el programa mas corto possible por ahi que solo desarrollo los programas en pic y manejo solo asm conosco muy poco de lenguaje C
saludos a todos por los grandes aportes que realizanen nombre de la ciencia.


----------



## Cix (Nov 7, 2011)

Fhrozen dijo:


> Bueno yo he hecho uno modificado que encontre en el internet busque como pic osd, justo lo necesitaba para un proyecto para la empresa en q trabajo y ahora se los paso, aunq va contra la politica de la empresa UPPSS , pero bueno no importa.
> Lo encontre para un pic12f683 y generaba señales PAL, las modificaciones q he hecho son para NTSC, pic16f628.
> 
> El problema q sigo teniendo es el acoplamiento de las impedancias de salida y entrada ya q depende mucho del voltaje de recepcion y la impedancia del equipo en el q se muestra. Yo trataba de displayarlo en una camara sony cuya resistencia media 200K, tenia como entrada otra camara, y ese era el problema pq cuando lo conectaba a un tv como salida, no tenia problemas
> ...


 Saludos, Fhrozen estoy interesado en estudiar e implementar tu proyecto del ODS NTSC con el pic 16f628 para presentarlo como una aplicación en la universidad, pero no me funciona el archivo que tienes subido en megaupload. Si tienes un pequeño tiempo para poder ayudarme sería genial. 

Cix


----------



## rcg (Feb 10, 2012)

Propeller de Parallax viene con el motor de video integrado.


----------



## Meta (Feb 13, 2012)

Hola:

Es verdad, ya el megadownload como que no. ¿Pueden subirlo de nuevo?

Un saludo.


----------



## Meta (Feb 18, 2012)

Buenas:






¿Alguien interesado en el tema de las señales de vídeo?

Y jugar al tetris por supuesto. Sigo recopilando Web que encuentro por ahí sobre señales de vídeo PAL y NTSC. Si encuentra algunas las publicas por aquí.

Tengo intensión de hacer el Tetris y jugar por Internet entre nosotros, ejejejje.

Como curiosidad del tetris y sus códigos para crearlos.
http://www.colinfahey.com/tetris/tetris_es.html

Saludo.


----------



## Meta (Mar 26, 2012)

Por si acaso, más información para los que le interesa ahcer cosas on señales de vídeo.

https://www.forosdeelectronica.com/f24/16f84a-conetacto-al-tv-tetris-13163/

Saludois y anímate.


----------



## Meta (Mar 26, 2012)

Hola:






¿Alguien se siente capaz de traducir de ASM al C generación de caracteres en una TV?
Se que la paciencia y tener conocimiento es un grado.
_ https://www.forosdeelectronica.com/posts/490862/ _

```
; LE 22/08/1997 ; Edited with PFE and assembled with MPASM ; Tristan@Club-Internet.fr or F1CJN @ F6KBF.FRPA (by packet radio) ; 5*7 new routines  ; 7 characters visible scrolling long text on upper line, yes the pic do it ! ; 8 Grey level bars in the middle of the screen ; 4 digits clock in the bottom  ; setup of the clock with two push buttons ; the 625 lines TV screen looks like this ; By Alain FORT and Peter KNIGHT  ; Free for public domain by Internet ; ;              ************* ;              *  T E X T  * this line is scrolling to the left ;              * grey bars * ;              *   12:00   *    (This is the clock) ;              ************* ; ;       TITLE    "PICDREAM"      LIST    P=16C84   #Define    W    0 #Define    F    1      cblock    0x00         INDF,RTCC,PCL,Status,FSR,PortA,PortB     endc     cblock    0x08         EEData,EEAdr,PClath,IntCon     endc      cblock    0x00         C,DC,Z,PD,TO,RP0,RP1,IRP     endc  ; Page 1 registers Roption    EQU    01H TrisA    EQU    05H TrisB    EQU    06H RAMbase    EQU    0CH   #define    Sync    PortA,0  ; Synchro out at RA0  (PIN 17)  ; DNOP - Double NOP. Delay of 2 cycles, takes only one instruction  DNOP    MACRO     LOCAL    Label Label    GOTO    Label+1     ENDM  ; Delay3W - Delay 3 * W cycles, three instructions  Delay3W    MACRO     LOCAL    Label     MOVWF    Delay         Label    DECFSZ    Delay     GOTO    Label     ENDM  SKIPCC    MACRO     BTFSC    Status,C     ENDM  SKIPNZ    MACRO     BTFSC    Status,Z     ENDM      LIST      CBLOCK    RAMbase         Delay,Count,Count2,Count3,SubSec    ; 5 various registers         HrT,HrU,MiT,MiU,SeU            ; 5 clock registers          CA0,CA1,CA2,CA3,CA4,CA5,CA6         ; 6 caracters pointers         Ta0,Ta1,Ta2,Ta3,Ta4,Ta5,Ta6,TNB,TNB1      ; 7 caracter lines pointers         Ptrtxt                    ; 1 text pointer         ENDC      ORG    0     GOTO    Main      ORG    4     RETURN  ; Table of caracters  Table    ADDWF    PCL,F Tbase    equ    $ Car0    equ    $-Tbase CarO    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001110'    ; ....***. Car1    equ    $-Tbase     RETLW    B'00000100'    ; .....*..     RETLW    B'00001100'    ; ....**..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00001110'    ; ....***. Car2    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00000001'    ; .......*     RETLW    B'00000010'    ; ......*.     RETLW    B'00000100'    ; .....*..     RETLW    B'00001000'    ; ....*...     RETLW    B'00011111'    ; ...***** Car3    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'     ;....*...*     RETLW    B'00000001'    ; .......*     RETLW    B'00000110'    ; .....**.     RETLW    B'00000001'    ; .......*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001110'    ; ....***. Car4    equ    $-Tbase     RETLW    B'00000010'    ; ......*.     RETLW    B'00000110'    ; .....**.     RETLW    B'00001010'    ; ....*.*.     RETLW    B'00010010'    ; ...*..*.     RETLW    B'00011111'    ; ...*****     RETLW    B'00000010'    ; ......*.     RETLW    B'00000010'    ; ......*. Car5    equ    $-Tbase     RETLW    B'00011111'    ; ...*****     RETLW    B'00010000'    ; ...*....     RETLW    B'00011110'    ; ...****.     RETLW    B'00000001'    ; .......*     RETLW    B'00000001'    ; .......*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001110'    ; ....***. Car6    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010000'    ; ...*....     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001110'    ; ....***. Car7    equ    $-Tbase     RETLW    B'00011111'    ; ...*****     RETLW    B'00000001'    ; .......*     RETLW    B'00000001'    ; .......*     RETLW    B'00000010'    ; ......*.     RETLW    B'00000010'    ; ......*.     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*.. Car8    equ    $-Tbase      RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*      RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*      RETLW    B'00001110'    ; ....***. Car9    equ    $-Tbase      RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*      RETLW    B'00001111'    ; ....****     RETLW    B'00000001'    ; .......*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001110'    ; ....***.     ;B0      D'70'     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00001000'    ; ....*...     RETLW    B'00000100'    ; .....*..     RETLW    B'00000010'    ; ......*. ;B3      D'75'     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00000010'    ; ......*.     RETLW    B'00000100'    ; .....*..     RETLW    B'00001000'    ; ....*... CarSP    equ    $-Tbase     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........     RETLW    B'00000000'    ; ........ CarA    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00011111'    ; ...***** CarH    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00011111'    ; ...***** CarU    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001110'    ;.....***. CarD    equ    $-Tbase     RETLW    B'00011110'    ; ...****.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...* CarB    equ    $-Tbase     RETLW    B'00011110'    ; ...****.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...* CarP    equ    $-Tbase     RETLW    B'00011110'    ; ...****.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00011110'    ; ...****. CarL    equ    $-Tbase     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*.... CarE    equ    $-Tbase     RETLW    B'00011111'    ; ...*****      RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00011100'    ; ...***..     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*.... CarF    equ    $-Tbase     RETLW    B'00011111'    ; ...*****      RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00011100'    ; ...***..     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*.... CarJ    equ    $-Tbase     RETLW    B'00000001'    ; .......*     RETLW    B'00000001'    ; .......*     RETLW    B'00000001'    ; .......*     RETLW    B'00000001'    ; .......*     RETLW    B'00000001'    ; .......*     RETLW    B'00010001'    ; ...*...* CarG    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010000'    ; ...*....     RETLW    B'00010011'    ; ...*..**     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...* CarQ    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010101'    ; ...*.*.*     RETLW    B'00010011'    ; ...*..** CarS    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010000'    ; ...*....     RETLW    B'00001110'    ; ....***.     RETLW    B'00000001'    ; .......*     RETLW    B'00010001'    ; ...*...* CarC    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010000'    ; ...*....     RETLW    B'00010001'    ; ...*...* CarI    equ    $-Tbase     RETLW    B'00001110'    ; ....***.     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00001110'    ; ....***. CarK    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010010'    ; ...*..*.     RETLW    B'00010100'    ; ...*.*..     RETLW    B'00011000'    ; ...**...     RETLW    B'00010100'    ; ...*.*..     RETLW    B'00010010'    ; ...*..*. CarM    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00011011'    ; ...**.**     RETLW    B'00010101'    ; ...*.*.*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...* CarN    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00011001'    ; ...**..*     RETLW    B'00010101'    ; ...*.*.*     RETLW    B'00010011'    ; ...*..** CarY    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001010'    ; ....*.*.     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*.. CarR    equ    $-Tbase     RETLW    B'00011110'    ; ...****.     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00011110'    ; ...****. CarV    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...* CarX    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00001010'    ; ....*.*.     RETLW    B'00000100'    ; .....*..     RETLW    B'00001010'    ; ....*.*. CarW    equ    $-Tbase     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010001'    ; ...*...*     RETLW    B'00010101'    ; ...*.*.*     RETLW    B'00011011'    ; ...**.**     RETLW    B'00010001'    ; ...*...* CarZ    equ    $-Tbase     RETLW    B'00011111'    ; ...*****      RETLW    B'00000001'    ; ...... *     RETLW    B'00000010'    ; ..... *.     RETLW    B'00000100'    ; .... *..     RETLW    B'00001000'    ; ....*...     RETLW    B'00010000'    ; ...*.... CarT    equ    $-Tbase     RETLW    B'00011111'    ; ...*****     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..     RETLW    B'00000100'    ; .....*..  Main     BSF    Status,RP0    ;  adressing bank 1     MOVLW    B'11110'     MOVWF    TrisA     MOVLW    B'11000000'     MOVWF    TrisB        ; ports B as outputs except  RB7 and RB6     BCF    Roption,7    ; we need the integrated pull-up resistors     BCF    Status,RP0    ; adressing bank 0 for the rest of the program      CLRF    SeU    ;Initialisation clock at 00.00     CLRF    MiU     CLRF    MiT     CLRF    HrU     CLRF    HrT     CLRF    Count3  ; Frame starts here. ; ; Frame must be exactly 312.5 Lignes long, each Ligne 64 cycles. ; That ensures frame rate of exactly 50Hz to crystal accuracy.  ;5 Long Equalisation pulses  Frame                ;Main Loop     BCF    Sync        ; 1        ;30us Sync     DNOP            ; 3     MOVLW    4        ; 4     MOVWF    Count        ; 5 Loop1    MOVLW    8        ; 6  6     Delay3W            ;30 30     BSF    Sync        ;31 31    ;2us Black     NOP            ;32 32     BCF    Sync        ; 1  1    ;30us Sync     NOP            ; 2  2     DECFSZ Count        ; -  -     GOTO    Loop1        ; 5     MOVLW    8        ;    5     Delay3W            ;   29     NOP            ;   30     BSF    Sync        ;   31    ;2us Black     NOP            ;   32  ; Now 5 short equalisation pulses, 4 on interlace      BCF    Sync        ; 1    ;2us Sync     NOP            ; 2     BSF    Sync        ; 3    ;30us Black     MOVLW    4        ; 4     BTFSC    SubSec,0    ;    ; 3 on interlace (SubSec odd)     MOVLW    3        ; 6     MOVWF    Count        ; 7 Loop2    MOVLW    8        ; 8  8  8  8     Delay3W            ;32 32 32 32     BCF    Sync        ; 1  1  1  1    ;2us Sync     NOP            ; 2  2  2  2     BSF    Sync        ; 3  3  3  3    ;30us Black     NOP            ; 4  4  4  4     DECFSZ Count        ; -  -  -  -     GOTO    Loop2        ; 7  7  7     CLRF    TNB        ;          7   RAZ de TBN a chaque trame     MOVLW    8        ;          8     Delay3W            ;         32           ; 304 visible Lines  ; 41 black Lines      BCF    Sync        ; 1     MOVLW    D'41'        ; 2     CALL    BlkLns        ;64  ; ****     INIT TEXTE ******   line  42      BCF     Sync     Call     Preptxt3  ; ****    INIT TEXTE CONTINUED ****** line 43      BCF     Sync     Call     Preptxt4  ;********** DISPLAY TEXTE ********* ( + 60 lines) = 103      BCF    Sync        ; 1     CALL    DisTxt        ;64  ; 15 black lines = 118      BCF    Sync        ; 1     MOVLW    D'15'        ; 2     CALL    BlkLns        ;64  ; ***** GREY BARS ***** 60 lines = 178      BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64 ligne 10     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64 Line 20     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64 Line 30     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64 Line 40     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64 Line 50     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64     BCF Sync        ;1     CALL BARRE        ;64    ;*****  14  BLACK LINES =192  *****     BCF    Sync        ; 1     MOVLW    D'14'        ; 2     CALL    BlkLns        ;64  ;*****  KEYS TEST 1 line = 193 *****     BCF    Sync        ; 1    Line 54     CALL    TOUCHE        ;64  ;***** PREPARE CLOCK    =  194 *****     BCF    Sync        ; 1    Line 54     CALL    PREPH        ;64  ;***** DISPLAY CLOCK     = 254  ***** (this takes 60 Lignes)     BCF    Sync     CALL    DisTxt  ;Increment time     BCF    Sync        ;1     INCF    SubSec        ;2    Increment 1/50th sec     MOVLW    -D'50'        ;3     ADDWF    SubSec,W    ;4    Carry now set if second has expired     BSF    Sync        ;5     SKIPCC            ;6    Zero SubSec if =50     CLRF    SubSec        ;7     SKIPCC            ;8     INCF    SeU        ;9    And increment Second Units     SKIPCC            ;10     NOP            ;11     seconds counter modulo 256     MOVLW    -D'60'        ;12     ADDWF    SeU,W        ;13    Carry if needed Second Units->Tens     SKIPCC            ;14     CLRF    SeU        ;15     SKIPCC            ;16     INCF    MiU        ;17    Minutes Units     MOVLW    -D'10'        ;18     ADDWF    MiU,W        ;19     SKIPCC            ;20     CLRF    MiU        ;21     SKIPCC            ;22     INCF    MiT        ;23    Minutes tens     MOVLW    -D'6'        ;24     ADDWF    MiT,W        ;25     SKIPCC            ;26     CLRF    MiT        ;27     SKIPCC            ;28     INCF    HrU        ;29     MOVLW    -D'10'        ;30     ADDWF    HrU,W        ;31      SKIPCC            ;32     CLRF    HrU        ;33     SKIPCC            ;34     INCF    HrT        ;35     MOVF    HrU,W        ;36  Now check for Hours=24     BTFSC    HrT,0        ;37     ADDLW    D'10'        ;38       BTFSC    HrT,1        ;39     ADDLW    -D'4'        ;40     SKIPCC            ;41     CLRF    HrU        ;42 clear hours units     SKIPCC            ;43     CLRF    HrT        ;44 clear hours tens     MOVLW    D'6'        ;45              Delay3W            ;63  ; *****  489 BLACK LINES = 304 *****     BCF    Sync        ; 1        ;5us Sync     MOVLW    D'49'        ; 2     CALL    BlkLns        ; 64  ; insert half Ligne here on interlace  ; Now 5 short equalisation pulses ; prefixed by half video Ligne on interlace  ; Slight bodge of CCIR/PAL - the half Ligne segment is actually a short eq pulse     BCF    Sync        ; 1        ;2us Sync     NOP            ; 2     BSF    Sync        ; 3        ;30us Black     MOVLW    4        ; 4     BTFSS    SubSec,0    ; -     MOVLW    5        ; 6     MOVWF    Count        ; 7 Loop6    MOVLW    8        ; 8  8  8  8     Delay3W            ;32 32 32 32     BCF    Sync        ; 1  1  1  1 ; 2us Sync     NOP            ; 2  2  2  2     BSF    Sync        ; 3  3  3       ; 30us Black     NOP            ; 4  4  4  4     DECFSZ    Count        ; -  -  -  -     GOTO    Loop6        ; 7  7  7     MOVLW    7        ;          7     Delay3W            ;         28     DNOP            ;         30     GOTO    Frame        ;         32  ; Delay routines  Delay6    NOP Delay5    NOP Delay4    RETURN  ; Some black Lignes BlkLns    ADDLW    -1     BSF    Sync        ; 1        ;59us black     MOVWF    Count     DNOP            ; 1 Loop5    MOVLW    D'17'        ; 1  1  1  1     MOVWF    Delay        ; 1  1  1  1 LoopD9    DECFSZ    Delay        ;18 18 18 18     GOTO    LoopD9        ;32 32 32 32     NOP            ; 1  1  1  1     DNOP            ; 2  2  2  2     BCF    Sync        ; 1  1  1  1    ;5us Sync     CALL    Delay4        ; 4  4  4  4     BSF    Sync        ; 1  1  1  1    ;59us Black     DECFSZ    Count        ; 1  1  1  2     GOTO    Loop5        ; 2  2  2     NOP            ;          1     MOVLW    D'17'        ;          1     Delay3W            ;         51     NOP            ;          1     RETURN            ;          2   ;Display ; Call immediately after BCF Sync, takes 60 Ligne periods  DisTxt    DNOP            ; 5    ;Ligne 1 noire     BSF    Sync        ; 6     MOVLW    D'19'        ; 7    delai=57     Delay3W            ;64     BCF    Sync        ; 1    lignes 2 et 3 noires     MOVLW    D'2'        ; 2     CALL    BlkLns        ;64     BCF    Sync        ; 1    Ligne 4 au noir , +1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 5     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 6       CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 7       CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 8      CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 9      CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 10      CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 11      CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 12 is black, + 1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 13     CALL    Showline    ;64         BCF    Sync        ; 1    Ligne 14     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 15     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 16     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 17     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 18     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 19     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 20 is black, +1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 21     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 22     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 23     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 24     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 25     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 26     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 27     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 28 is black,+1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 29     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 30     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 31     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 32     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 33     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 34     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 35     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 36 is black, +1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 37     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 38     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 39     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 40     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 41     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 42     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 43     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 44 is black, +1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 45     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 46     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 47     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 48     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 49     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 50     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 51     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 52 is black, +1 for caracters line     CALL    INCLIN        ;64     BCF    Sync        ; 1    Ligne 53     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 54     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 55     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 56     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 57     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 58     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 59     CALL    Showline    ;64     BCF    Sync        ; 1    Ligne 60     GOTO    Showline    ;64   Showline MOVF    TNB1,W        ; 4  old TNB (without plus one)     ADDWF    CA6,W        ; 5  Incline (continued), seventh caracter preparation     BSF    Sync        ; 6     CALL     Table        ;12     MOVWF    Ta6        ;13     MOVF    Ta0,W        ;15 Carac 1     MOVWF    PortB        ;16       RLF    PortB        ;18     RLF    PortB        ;19     RLF    PortB        ;20     RLF    PortB        ;21     CLRF    PortB        ;22     MOVF    Ta1,W        ;23 Carac 2     MOVWF    PortB        ;24     RLF    PortB        ;25     RLF    PortB        ;26     RLF    PortB        ;27     RLF    PortB        ;28     CLRF    PortB        ;29     MOVF    Ta2,W        ;30 Carac 3     MOVWF    PortB        ;31     RLF    PortB        ;32     RLF    PortB        ;33     RLF    PortB        ;34     RLF    PortB        ;35     CLRF    PortB        ;36     MOVF    Ta3,W        ;37 Carac 4     MOVWF    PortB        ;38       RLF    PortB        ;39     RLF    PortB        ;40     RLF    PortB        ;41     RLF    PortB        ;42     CLRF    PortB        ;43     MOVF    Ta4,W        ;44 Carac 5     MOVWF    PortB        ;45     RLF    PortB        ;46     RLF    PortB        ;47     RLF    PortB        ;48     RLF    PortB        ;49     CLRF    PortB        ;50     MOVF    Ta5,W        ;51 Carac 6     MOVWF    PortB        ;50     RLF    PortB        ;51     RLF    PortB        ;52     RLF    PortB        ;53     RLF    PortB        ;54     CLRF    PortB        ;55 Put 0 ( black video between 2 caracters)     MOVF    Ta6,W        ;56 Carac 7     MOVWF    PortB        ;57       RLF    PortB        ;58     RLF    PortB        ;59     RLF    PortB        ;60     RLF    PortB        ;61     CLRF    PortB        ;62 Ouf! no more room for any NOP     RETURN            ;64  Preptxt3  DNOP            ; 5         BSF    Sync        ; 6     MOVF    SubSec,w    ; 7     ANDLW    B'00000001'    ; 8     SKIPNZ            ; 9     GOTO    GT4        ; 10/11         MOVLW    D'16'        ; 11     ADDWF    Count3        ; 12     SKIPNZ            ; 13     INCF    Ptrtxt        ; 14     GOTO     GT5        ; 16 GT4    CALL    Delay4        ; 15     NOP            ; 16 GT5     MOVLW   HIGH Texte    ; 17    prepare to read the text page at 3C0     MOVWF    PClath        ; 18          MOVF    Ptrtxt,W    ; 19    first caracter     CALL    Texte        ; 25     MOVWF    CA0        ; 26     INCF    Ptrtxt        ; 27     MOVF    Ptrtxt,W    ; 28    Second caracter     CALL    Texte        ; 34     MOVWF    CA1        ; 35     INCF    Ptrtxt        ; 36     MOVF    Ptrtxt,W    ; 37    Third caracter     CALL    Texte        ; 43     MOVWF    CA2        ; 44     INCF    Ptrtxt        ; 45         MOVF    Ptrtxt,W    ; 46    Fourth caracter     CALL    Texte        ; 52     MOVWF    CA3        ; 53     INCF    Ptrtxt        ; 54     MOVLW    D'2'        ; 55       Delay3W            ; 61    equ 6 cycles                 NOP            ; 62      RETURN            ; 64  Preptxt4  DNOP            ; 5         BSF    Sync        ; 6     MOVF    Ptrtxt,W    ; 7    Fith caracter     CALL    Texte        ;13     MOVWF    CA4        ;14     INCF    Ptrtxt        ;15         MOVF    Ptrtxt,W    ;16    Sixth caracter     CALL    Texte        ;22     MOVWF    CA5        ;23       INCF    Ptrtxt        ;24         MOVF    Ptrtxt,W    ;25    Seventh caracter     CALL    Texte        ;31     MOVWF    CA6        ;32             MOVLW    D'7'        ; 33       Delay3W            ; 54   equ 21      MOVLW    -D'6'        ; 55   plus 6 for a one caracter shift     ADDWF    Ptrtxt        ; 56   voila      MOVF    Ptrtxt,W    ; 57        ADDLW    -(FTexte-DTexte); 58 compar to text length     SKIPCC            ; 59     CLRF    Ptrtxt        ; 60 RAZ text pointer if end of scroll     CLRF     PClath        ; 61 RAZ PClath for reading lire caracters table page at page 0         CLRF    TNB        ; 62 TNB initialisation     RETURN            ; 64                   INCLIN    MOVF    TNB,W        ; 4  Computing the table input adress      MOVWF    TNB1        ; 5     BSF    Sync        ; 6  and store in  Ta0 to Ta5 registers     NOP            ; 7      MOVF     TNB,W        ; 8         ADDWF    CA0,W        ; 9   Add TNB to result     CALL     Table        ; 15  Call line number NB     MOVWF    Ta0        ; 16  Table in TA0     MOVF     TNB,W        ; 17         ADDWF    CA1,W        ; 18     CALL     Table        ; 24     MOVWF    Ta1        ; 25     MOVF     TNB,W        ; 26         ADDWF    CA2,W        ; 27     CALL     Table        ; 33     MOVWF    Ta2        ; 34     MOVF     TNB,W        ; 35         ADDWF    CA3,W        ; 36     CALL     Table        ; 42     MOVWF    Ta3        ; 43     MOVF     TNB,W        ; 44         ADDWF    CA4,W        ; 45     CALL     Table        ; 51     MOVWF    Ta4        ; 52      MOVF     TNB,W        ; 53      ADDWF    CA5,W        ; 54      CALL     Table        ; 60      MOVWF    Ta5        ; 61      INCF    TNB        ; 62  the (Ta6) is in the Showline routine !!     RETURN            ; 64  PREPH    DNOP            ; 5    Clock      BSF    Sync        ; 6     BCF     Status,C    ; 7      MOVLW    D'80'        ; 8 First caracter is space (black)     MOVWF    CA0        ; 9        MOVF    HrT,W        ; 10  Hours Tens      MOVWF    CA1        ; 11     RLF    CA1        ; 12  multiply by 7 for table access     RLF    CA1        ; 13       ADDWF    CA1        ; 14     ADDWF    CA1        ; 15     ADDWF    CA1        ; 16      MOVF    HrU,W        ; 17  Heures Units     MOVWF    CA2        ; 18     RLF    CA2        ; 19  multiply by 7 for table access     RLF    CA2        ; 20     ADDWF    CA2        ; 21     ADDWF    CA2        ; 22     ADDWF    CA2        ; 23      MOVLW     D'70'        ; 24     BTFSC    SeU,0        ; 25 parity test for seconds     ADDLW    D'5'        ; 26     MOVWF    CA3        ; 27 result = 70 or 75      MOVF    MiT,W        ; 28 Minutes Tens     MOVWF    CA4        ; 29     RLF    CA4        ; 30 multiply by 7 for table access     RLF    CA4        ; 31     ADDWF    CA4        ; 32     ADDWF    CA4        ; 33     ADDWF    CA4        ; 34      MOVF    MiU,W        ; 35 Minutes Units     MOVWF    CA5        ; 36     RLF    CA5        ; 37 multiply by 7 for table access     RLF    CA5        ; 38     ADDWF    CA5        ; 39     ADDWF    CA5        ; 40     ADDWF    CA5        ; 41      MOVLW    D'80'        ; 42     MOVWF    CA6        ; 43 Last caracter is a space      MOVLW    D'5'        ; 44     Delay3W            ; 59 eq (15)          DNOP            ; 61     CLRF    TNB        ; 62     RETURN            ; 64  BARRE    DNOP            ; 5    Grey for outputs RA1 RA2 RA3     BSF    Sync        ; 6     MOVLW    B'10000'    ; 7    Outputs Activation RA1 RA2 RA3 on portA     TRIS    PortA        ; 8           MOVLW    D'1'        ; 9    Only even numbers (for sync='1')     MOVWF    PortA        ; 10     CALL     Delay4        ; 14     CALL     Delay4        ; 18     MOVLW    D'3'        ;      MOVWF    PortA        ;        CALL     Delay4        ; 24     MOVLW    D'5'        ;      MOVWF    PortA        ;        CALL    Delay4        ; 30     MOVLW    D'7'        ;     MOVWF    PortA        ;      CALL     Delay4        ; 36     MOVLW    D'9'        ;     MOVWF    PortA        ;      CALL    Delay4        ; 42     MOVLW    D'11'        ;     MOVWF    PortA        ;      CALL    Delay4        ; 48     MOVLW    D'13'        ;     MOVWF    PortA        ;      CALL    Delay4        ; 54     MOVLW    D'15'        ; 55     MOVWF    PortA        ; 56     CALL    Delay4        ; 60     MOVLW    B'11110'    ; 61 Ouput in tristate (except sync) on Port A     TRIS    PortA        ; 62     RETURN            ; 64  TOUCHE     DNOP            ;5     BSF Sync        ;6     MOVF    PortB,w        ;7    reading PortB     XORLW    B'11111111'    ;8    compare with before which was '1' due to the pull-up loads     ANDLW    B'11000000'    ;9      mask for RB7 et RB6     BTFSC    Status,Z    ;10    zero set=no buttons     GOTO    RT2        ;12    out if no key press         INCFSZ     Count2        ;13    delay (with frame counter) if a key at 1     GOTO     RT1        ;15     BTFSC    PortB,7        ;15    minutes button test     INCF    MiU        ;16     BTFSC    PortB,6        ;17    hours button test     INCF    HrU        ;18     MOVLW    D'236'        ;19    Wait a while     MOVWF     Count2        ;20     GOTO    RT3        ;22         RT2    MOVLW    D'236'        ;13         MOVWF    Count2        ;14 RT1    CALL Delay4        ;18         CALL Delay4        ;22 RT3    MOVLW    D'13'        ;23     Delay3W            ;62     return            ;64      Org    3A0  Texte    ADDWF    PCL,F DTexte    equ    $     RETLW    CarSP    ; 1  LENGTH = 95 MAXIMUM (characters plus space)     RETLW    CarSP    ; 2     RETLW    CarSP    ; 3     RETLW    CarSP    ; 4     RETLW    CarSP    ; 5       RETLW    CarSP    ; 6  *** do not modify the first 6 SP characters **     RETLW    CarB    ; 7     RETLW    CarA    ; 8     RETLW    CarT    ; 9     RETLW    CarC    ;10     RETLW    CarSP    ;     RETLW    CarP    ;      RETLW    CarI    ;       RETLW    CarC    ;     RETLW    CarD     RETLW    CarR     RETLW    CarE     RETLW    CarA     RETLW    CarM     RETLW    CarSP     RETLW   CarSP     RETLW   CarSP     RETLW   CarSP     RETLW    CarSP     RETLW    CarSP     RETLW    CarSP     RETLW    CarSP     FTexte    equ    $-6    ; necessairy for scrolling 7 caracters on the screen     RETLW    CarSP      END
```

Al menos el ASM sacado de este enlace.
http://www.pablin.com.ar/electron/circuito/mc/picdream/picdream.asm
de pablín.

Un saludo.


----------



## sbl (Abr 1, 2012)

hola alguien me podria dar las rutinas e sincronzacion vertical y horizontal de video NTSC a 20 cuadros x seg. se les agradece ya que no ogro poder realizar una buena sincronisacion en la señal.


----------



## Meta (Abr 1, 2012)

Hola:

Quiero hacer lo mismo pero con PAL, 

Estas cosas lo explica por aquí, lo que no entiendo ni papa.

http://server-die.alc.upv.es/asignaturas/TEII/2006-07/Web_C05/02.html

Por ejemplo. Quiero hacer una raya blanca en el centro vertical. 







¿Cómo lo hago?

Ahí está la cuestión. Te lo explica arriba pero es un tonstón. Hay que probar y probar. La ventaja que tengo, que me admite PAY y NTSC el TV.


Sólo hay que montar dos resistencias indicado arriba y seguir el esquema indicado en el archivo que puedes descargar.

En esta Wen, no la entiendo mucho, se configura el PAL o el NTSC.
http://xtiming.sourceforge.net/cgi-bin/xtiming.pl

Otras preguntas.
Quiero preparar el código del PIC16F88 ya que tiene más RAM que el PIC16F84A. Quiero saber cosas básicas sea PAL o NTSC. Por ejemplo, quiero preparar rutinias sólo para los tiempos, sea de sincronización o otra cosa en archivos a parte, librerías a parte lalmadas librerías.INC. Así no lo pongo todo en el mismo .ASM principal y volvernos locos. Los retardos se pueden calcular gracias a esta Web de calculador de ratardos o delay.

http://www.golovchenko.org/cgi-bin/delay

Lo que sepan, que nos informe que tipo de retardos hay que poner en cada sincronización.

Aquí hay temas se calcular la sincronización. ¿Quién entiende al Web aquí abajo?
http://xtiming.sourceforge.net/cgi-bin/xtiming.pl

¿A alguien le apatece intentarlo?

Un saludo.


----------



## luiselelectronico (Dic 9, 2012)

Hola a todos, he estado trabajando en la generación de una señal de video mediante un microcontrolador PIC. Gracias a todas sus experiencias y el conocimiento compartido en este foro he logrado lo siguiente, lo cual me gustaria compartirlo. Desarrolle una placa  a base de un microcontrolador PIC16F887 generadora de una señal de  video bajo el estándar NTSC RS-170 para utilizar un televisor como  periférico de salida en diferentes proyectos. El trabajo lo presenté en el 8o. _Congreso_ Internacional _Tendencias Tecnológicas_ en Computación 2012.


----------



## Meta (Dic 10, 2012)

luiselelectronico dijo:


> Hola a todos, he estado trabajando en la generación de una señal de video mediante un microcontrolador PIC. Gracias a todas sus experiencias y el conocimiento compartido en este foro he logrado lo siguiente, lo cual me gustaria compartirlo. Desarrolle una placa  a base de un microcontrolador PIC16F887 generadora de una señal de  video bajo el estándar NTSC RS-170 para utilizar un televisor como  periférico de salida en diferentes proyectos. El trabajo lo presenté en el 8o. _Congreso_ Internacional _Tendencias Tecnológicas_ en Computación 2012.




Buen proyecto.

Con el tiempo y si lo deseas, puedes hacer un menú que se pueda esoger la función NTSC y PAL. Ya es otro cantar y te costará hacerlo.

¿Lo hiciste en ensamblador?

Buen trabajo.


----------



## luiselelectronico (Dic 11, 2012)

¡Gracias por tu comentario!
Si, lo realice en ensamblador el proyecto. Lamentablemente me robaron la computadora en donde tenia el codigo pero estoy trabajando en ello. Creo que es muy buena idea la que comentas, de hecho ya la habia considerado ya que el PIC16F887 dispone de 8KB con los cuales se puede hacer maravillas. Seguire trabajando en el proyecto y subire mis resultados para que lo puedan probar.


----------



## macsa1ind (Dic 16, 2012)

No se si ya estara posteado , aqui mas informacion:

http://graffiti.virgin.net/ljmayes.mal/var/tvsync.htm






Saludos


----------



## Meta (Feb 24, 2013)

Hola:

Hay gente de aquí que sabe crear una buena imagen PAL o NTSC desde un PIC.

Al menos quiero poner en pantalla que diga Hola. Xd. Sigo con el tema, es muy bueno.

Pueden poner más información sobre este tipo de cosas, gracias.

Saludo.


----------



## Meta (Mar 28, 2013)

Buenas:

He estado mirando que a lo mejor el CI llamado cxa1145p controla las señales de AV o el RCA, también RGB. Este integrado se usa mucho en la Master System II, MEga Drive y más máquinas.

Con ello quiero saber si puedo generar señales de vídeos con un PIC no directamente, así el PIC le resulta más fácil de manejar imágenes.

Saludo.


----------



## Meta (Dic 10, 2013)

Hola:






Viendo este enlace:
http://code.google.com/p/arduino-tvout/

No sabía que Arduino era capaz de hacerlo y con soltura.

https://www.youtube.com/watch?v=MEg_V4YZDh0

https://www.youtube.com/watch?v=bHpFv_x_8Kk

Quiero que sea hecho en C como siempre, no el C/C++ puro y duro y más complejo de entender.

Cualquier sugerencia o si encuentra información, es bienvenido.

Explicado el código pero a ver quien lo entiende.

```
[LEFT]  

#include <TVout.h>
#include <fontALL.h>
#include "schematic.h"
#include "TVOlogo.h"


TVout TV;


int zOff = 150;
int xOff = 0;
int yOff = 0;
int cSize = 50;
int view_plane = 64;
float angle = PI/60;


float cube3d[8][3] = {
  {xOff - cSize,yOff + cSize,zOff - cSize},
  {xOff + cSize,yOff + cSize,zOff - cSize},
  {xOff - cSize,yOff - cSize,zOff - cSize},
  {xOff + cSize,yOff - cSize,zOff - cSize},
  {xOff - cSize,yOff + cSize,zOff + cSize},
  {xOff + cSize,yOff + cSize,zOff + cSize},
  {xOff - cSize,yOff - cSize,zOff + cSize},
  {xOff + cSize,yOff - cSize,zOff + cSize}
};
unsigned char cube2d[8][2];




void setup() {
  TV.begin(PAL,120,96);
  TV.select_font(font6x8);
  intro();
  TV.println("I am the TVout\nlibrary running on a freeduino\n");
  TV.delay(2500);
  TV.println("I generate a PAL\nor NTSC composite  video using\ninterrupts\n");
  TV.delay(2500);
  TV.println("My schematic:");
  TV.delay(1500);
  TV.bitmap(0,0,schematic);
  TV.delay(10000);
  TV.clear_screen();
  TV.println("Lets see what\nwhat I can do");
  TV.delay(2000);
  
  //fonts
  TV.clear_screen();
  TV.println(0,0,"Multiple fonts:");
  TV.select_font(font4x6);
  TV.println("4x6 font FONT");
  TV.select_font(font6x8);
  TV.println("6x8 font FONT");
  TV.select_font(font8x8);
  TV.println("8x8 font FONT");
  TV.select_font(font6x8);
  TV.delay(2000);
  
  TV.clear_screen();
  TV.print(9,44,"Draw Basic Shapes");
  TV.delay(2000);
  
  //circles
  TV.clear_screen();
  TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/3,WHITE);
  TV.delay(500);
  TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/2,WHITE,INVERT);
  TV.delay(2000);
  
  //rectangles and lines
  TV.clear_screen();
  TV.draw_rect(20,20,80,56,WHITE);
  TV.delay(500);
  TV.draw_rect(10,10,100,76,WHITE,INVERT);
  TV.delay(500);
  TV.draw_line(60,20,60,76,INVERT);
  TV.draw_line(20,48,100,48,INVERT);
  TV.delay(500);
  TV.draw_line(10,10,110,86,INVERT);
  TV.draw_line(10,86,110,10,INVERT);
  TV.delay(2000);
  
  //random cube forever.
  TV.clear_screen();
  TV.print(16,40,"Random Cube");
  TV.print(28,48,"Rotation");
  TV.delay(2000);
  
  randomSeed(analogRead(0));
}


void loop() {
  int rsteps = random(10,60);
  switch(random(6)) {
    case 0:
      for (int i = 0; i < rsteps; i++) {
        zrotate(angle);
        printcube();
      }
      break;
    case 1:
      for (int i = 0; i < rsteps; i++) {
        zrotate(2*PI - angle);
        printcube();
      }
      break;
    case 2:
      for (int i = 0; i < rsteps; i++) {
        xrotate(angle);
        printcube();
      }
      break;
    case 3:
      for (int i = 0; i < rsteps; i++) {
        xrotate(2*PI - angle);
        printcube();
      }
      break;
    case 4:
      for (int i = 0; i < rsteps; i++) {
        yrotate(angle);
        printcube();
      }
      break;
    case 5:
      for (int i = 0; i < rsteps; i++) {
        yrotate(2*PI - angle);
        printcube();
      }
      break;
  }
}


void intro() {
unsigned char w,l,wb;
  int index;
  w = pgm_read_byte(TVOlogo);
  l = pgm_read_byte(TVOlogo+1);
  if (w&7)
    wb = w/8 + 1;
  else
    wb = w/8;
  index = wb*(l-1) + 2;
  for ( unsigned char i = 1; i < l; i++ ) {
    TV.bitmap((TV.hres() - w)/2,0,TVOlogo,index,w,i);
    index-= wb;
    TV.delay(50);
  }
  for (unsigned char i = 0; i < (TV.vres() - l)/2; i++) {
    TV.bitmap((TV.hres() - w)/2,i,TVOlogo);
    TV.delay(50);
  }
  TV.delay(3000);
  TV.clear_screen();
}


void printcube() {
  //calculate 2d points
  for(byte i = 0; i < 8; i++) {
    cube2d[i][0] = (unsigned char)((cube3d[i][0] * view_plane / cube3d[i][2]) + (TV.hres()/2));
    cube2d[i][1] = (unsigned char)((cube3d[i][1] * view_plane / cube3d[i][2]) + (TV.vres()/2));
  }
  TV.delay_frame(1);
  TV.clear_screen();
  draw_cube();
}


void zrotate(float q) {
  float tx,ty,temp;
  for(byte i = 0; i < 8; i++) {
    tx = cube3d[i][0] - xOff;
    ty = cube3d[i][1] - yOff;
    temp = tx * cos(q) - ty * sin(q);
    ty = tx * sin(q) + ty * cos(q);
    tx = temp;
    cube3d[i][0] = tx + xOff;
    cube3d[i][1] = ty + yOff;
  }
}


void yrotate(float q) {
  float tx,tz,temp;
  for(byte i = 0; i < 8; i++) {
    tx = cube3d[i][0] - xOff;
    tz = cube3d[i][2] - zOff;
    temp = tz * cos(q) - tx * sin(q);
    tx = tz * sin(q) + tx * cos(q);
    tz = temp;
    cube3d[i][0] = tx + xOff;
    cube3d[i][2] = tz + zOff;
  }
}


void xrotate(float q) {
  float ty,tz,temp;
  for(byte i = 0; i < 8; i++) {
    ty = cube3d[i][1] - yOff;
    tz = cube3d[i][2] - zOff;
    temp = ty * cos(q) - tz * sin(q);
    tz = ty * sin(q) + tz * cos(q);
    ty = temp;
    cube3d[i][1] = ty + yOff;
    cube3d[i][2] = tz + zOff;
  }
}


void draw_cube() {
  TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[1][0],cube2d[1][1],WHITE);
  TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[2][0],cube2d[2][1],WHITE);
  TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[4][0],cube2d[4][1],WHITE);
  TV.draw_line(cube2d[1][0],cube2d[1][1],cube2d[5][0],cube2d[5][1],WHITE);
  TV.draw_line(cube2d[1][0],cube2d[1][1],cube2d[3][0],cube2d[3][1],WHITE);
  TV.draw_line(cube2d[2][0],cube2d[2][1],cube2d[6][0],cube2d[6][1],WHITE);
  TV.draw_line(cube2d[2][0],cube2d[2][1],cube2d[3][0],cube2d[3][1],WHITE);
  TV.draw_line(cube2d[4][0],cube2d[4][1],cube2d[6][0],cube2d[6][1],WHITE);
  TV.draw_line(cube2d[4][0],cube2d[4][1],cube2d[5][0],cube2d[5][1],WHITE);
  TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[6][0],cube2d[6][1],WHITE);
  TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[3][0],cube2d[3][1],WHITE);
  TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[5][0],cube2d[5][1],WHITE);
}
[/LEFT]
```
http://miqueridopinwino.blogspot.com.es/2012/07/obtener-salida-visual-de-tu-arduino-con.html

*Edito:*
Más datos.

Por lo que pafecen también se comercializan.




http://www.5hz-electronica.com/tellymate.aspx

 Mi idea es aprender a producir señales a la TV y aprender hacer dibujos que yo desee.





También se comercializa y no sabía, hace unos años estas cosas no se vendían, se hacía en asm para PIC.
http://todoelectronica.com/superposicion-video-placa-arduino-p-15425.html

Mirando por el aire la hoja de datos del LM1881. Emitiendo señales de vídeo el PIC. 

*1)* ¿Realmente es neceario este integrado?

*2)* ¿Qué tiene de especial? ¿Más estabilidad de algo?

Por si solo no hace nada, no es como un PIc que tiene un programa dentro y hago dibujos en pantalla. Por ahoar voy a leeer los toches que me dieron y estos enlaces para más información.
http://www.retrovicio.org/tutoriales/conexion-consolas-monitor-arcade-uso-del-circuito-lm1881

Gracias por la info, seguiré dando batalla.


----------



## iadercamilo (Feb 5, 2014)

Saludos,

ley todo los comentarios y respuestas del foro sobre este tema la verdad esta genial hasta el momento ya pudo hacer la Hsync y Vsync y puedo pintar en el tv ntsc.

Me gustaria saber como puedo mover una imagen con dos pulsadores, vi el video donde mueven un cuadro pero no dan el codigo fuente alguien sabe como hacer eso.?

Gracias.


----------



## Meta (Feb 6, 2014)

iadercamilo dijo:


> ley todo los comentarios y respuestas del foro sobre este tema la verdad esta genial hasta el momento ya pudo hacer la Hsync y Vsync y puedo pintar en el tv ntsc.



Buenas campeón:

¿Puedes poner un ejemplo completo de lo que has sido capaz de hacer en TV?

¿Haz dibujado un "Hola mundo" en pantalla?

Saludo.


----------



## TRILO-BYTE (Feb 6, 2014)

hola hola soy muy muy nuevo a este bizzarro proyecto
quiero hacer un generador de caracteres para un Z80 
tengo nociones de como funciona el video
mis preguntas son las siguientes

¿puedo generar solo la señal de sincronia y el video aparte para despues sumarlas?
¿tiene algo que ver la señal de video entrelazada?
es decir tengo que dibujar el campo par y luego el impar o ¿todo sale de 1 golpe?

es una idea muy lejana para mi aun no he podido generar una señal DTMF


----------



## Chico3001 (Feb 6, 2014)

TRILO-BYTE dijo:


> ¿puedo generar solo la señal de sincronia y el video aparte para despues sumarlas?



Si...



TRILO-BYTE dijo:


> ¿tiene algo que ver la señal de video entrelazada?
> es decir tengo que dibujar el campo par y luego el impar o ¿todo sale de 1 golpe?



Primero generas el campo par y despues el campo impar.. y repites todo el proceso indefinidamente



TRILO-BYTE dijo:


> es una idea muy lejana para mi aun no he podido generar una señal DTMF



Si no has podido con un DTMF no te recomiendo que pases a video... es 50 veces mas complejo y mas aun si quieres ponerle color...


----------



## iadercamilo (Feb 6, 2014)

Meta dijo:


> Buenas campeón:
> 
> ¿Puedes poner un ejemplo completo de lo que has sido capaz de hacer en TV?
> 
> ...



Saludos, gracias por responder.

Hasta el momento ya pude mover la imagen pero estoy algo inconforme por que tuve que pintar todo y luego hacer la misma imagen pero ya movida a la posición que quería.
aun no me he interesado por los textos.

Puedes decirme alguna forma de poder pintar píxeles es decir crear una rutina que pueda pintar X cantidad de píxeles que estén en una variable, intente hacerlo pero esta muy complicado ya que hay que tener en cuenta los RETURN, CALL, DECFSZ entre otros bueno aquí esta el codigo.

--Mueve una barra blanca solo una posicion de izquierda a derecha al soltar el pulsador vuelve a la izquierda.

Ver el archivo adjunto Main.txt
Ver el archivo adjunto video_ntsc_fun.txt
Ver el archivo adjunto video_ntsc.txt

y el video en funcionamiento del codigo jeje el tv es bien antiguo uso un modulador RF.
youtube.com/watch?v=CuqmHF_4jak&feature=youtu.be


----------

