TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: jorgenuviola en 16 de Septiembre de 2014, 00:41:33

Título: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 16 de Septiembre de 2014, 00:41:33
Buenas noches comunidad, dado el comienzo de mi busqueda en crear un IC de sincronismos para VGA y TV y porque no Hercules, buscando obtener un IC que me permita incluir en mis futuros proyectos para utilizar algun dispositivo visual como un monitor o una TV, me embarque hace meses en la lectura de como hacerlo, he leido todos los post existentes a la fecha, he sacado buenas conclusiones y si bien en algunos post hay archivos hex o algunos en otro lenguaje, incluso en la pagina de richard´s que habla de video con pic da una programacion en ASM, yo queria por mis propios medios crear la mia. Soy programador en basic e hice todas las pruebas necesarias para saber que en basic no es posible un proyecto de este tipo, si es potente para hacer todo tipo de programacion pero cuando se debe hilar fino para manejar los ciclos del pic y los microsegundos se convierte en un lenguaje inexacto.

Asi que siempre le esquive al ASM y finalmente me meti, porque quiero hacer mi proyecto y si hay que aprender algo nuevo, bueno nunca es tarde.

el desarrollo del fracaso en en basic esta en este post.

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

es por ello que no los voy a aburrir con la introduccion de todo el experimento. Lo unico que voy a aclarar que empiezo con una señal de video compuesto para TV.

esto busco generar

(http://i222.photobucket.com/albums/dd89/ford1940deluxe2/electronica/vinfo_hline.png)


voy a retomar en la ultima pagina de ese post en donde habia quedado pendiente esta prueba.



Gracias a la explicacion de los muchachos logre manejar los ciclos del pic, en basic me sentabaa sumar 2us aca 2us alla pero en realidad no eran reales, seguramente serian casi milesegundos, aca entendi el concepto de contar los ciclos de trabajo del pic, tambien de a poco voy comprendiendo la programacion, antes veia y no entendia nada, poco a poco ya voy traduciendo, me cuesta un montoooon!!! porque todavia no se nada.


Lo ultimo charlado era este experimiento que propuso elgarbe SIN SINCRO VERTICAL para ver si algo se generaba y parto este experimento desde este punto usando un cristal de 10 MHZ.


Dejame insistir en que la primer prueba debería hacerla sin sincronía vertical. Tal como lohace Rickard.

El código de él hace lo siguiente:

Pone la señal de salida en 0V
Delay de 4us (en el texto dice 3useg porque ya tiene algo perdido en las instrucciones previas)
Pone la señal en 0.3V (da por finalizado el pulso de sincro horizontal)
Delay de 8useg (acá deja pasar el tiempo para los TV viejos que necesitan ese retardo para que el haz esté en posicion)
Pone señal en 0.6V (una vez que pasaron los primeros 12 useg ya estamos al comienzo de la imagen, en la pate izquierda de la pantalla. Pone color Gris)
Delay de 4useg (deja el color Gris por 4useg para dibujar una rayita)
Pone la señal en 0.3V (vuelve al color negro)
Delay de 19useg (deja que pasen 19useg y el haz avance por la pantalla en color negro. 19useg es casi el medio de la pantalla)
Pone la señal en 1V (Para pintar en blanco)
Delay de 4useg (dibuja una rayita blanca en la pantalla)
Pone la señal en 0.3V (vuelve al color Negro)
Delay de 19useg (espera a llegar al final de la pantalla 4+19+4+19=46useg)
Pone señal en 0.6V (pinta color Gris)
Delay de 2useg
Delay de 2 ciclos de reloj

En teoriía con eso consigue la señal horizontal de 64useg, aunque a mi no me dan las cuentas.

Lo unico que necesitas para que el TV se sincronice con tu señal es el pulso horizontal. Al vertical, en principio podes dejarlo afuera, total el TV funciona igual, lo unico que no vas a conseguir es sincronizarte verticalmente con el barrido. Pero deberías obtener las 3 barras bien verticales.

Yo haría ese programa en basic y ajustaría los tiempos con el osciloscopio hasta obtener los tiempos correctos y los niveles de tension correctos, sin conectar el TV. Luego, cuando tu señal sea perfecta se la mandas al TV y.... voilá tendrás las barras verticales!

Con la alegría de esa imagen podemos seguir con el vertical.

Saludos y suerte!


Conclusion:

4US  ambos port 0
8 us port a0 1 a2 0
4 us port a0 0 a2 1
19us port a0 1 a2 0
4 us port a0 1 a2 1
19us port a0 1 a2 0
2 us port a0 0 a2 1


programe lo siguiente: (pongo solo el programa omitiendo toda la parte de configuracion del pic asi no cansa leer y se hace mas corto)


inicio:
      BSF STATUS,RP0
      CLRF PORTA
      BCF STATUS,RP0
rutina:
      BCF PORTA,2
      BCF PORTA,0
      CALL micros4
      BSF PORTA,0
      CALL micros8
      BCF PORTA,0
      BSF PORTA,2
      CALL micros4
      BCF PORTA,2
      BSF PORTA,0
      CALL micros19
      BSF PORTA,2
      CALL micros4
      BCF PORTA,2
      CALL micros19
      BCF PORTA,0
      BSF PORTA,2
      CALL micros2
      GOTO rutina
      



;-----------------------retardos en microsegundos----------
micros4:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      RETURN
micros8:
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN
micros19:
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN
micros2:
      NOP
      NOP
      RETURN
      
      
NOTA: Aun estoy verde para tomar los tiempos con el osciloscopio vi que me acerque bastante pero puede faltar acomodar o ajustar

el resultado:

Les dejo un video para que vean como opera:




(http://i222.photobucket.com/albums/dd89/ford1940deluxe2/electronica/02550003.jpg) (http://s222.photobucket.com/user/ford1940deluxe2/media/electronica/02550003.jpg.html)


esta mal la fecha de la camara ejejjejejejeej

¿asi debia verse? (porque no salen barras verticales) ¿opiniones?
Título: Re: Video compuesto para TV con pic16f84
Publicado por: siniestro en 16 de Septiembre de 2014, 01:05:08
Hola jorge, de Assembler aun no se mucho que se diga pero
Código: [Seleccionar]
micros4:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      RETURN

Edito:
la instrucción RETURN tambien debe consumir tiempo de ejecucion verdad?Si, consume 2 ciclos .... y no se si me equivoque pero el NOP no consume dos ciclos de trabajo?? Si, me equivoque, solo consume uno
CALL y RETURN consume dos ciclos de trabajo
Título: Re: Video compuesto para TV con pic16f84
Publicado por: vixctor en 16 de Septiembre de 2014, 01:59:00
Básicamente las barras no te salen porque no estas cumpliendo cabalmente con todos los timings...

Desconozco las especificaciones de PAL, pero en NTSC, en los pulsos de sincronía vertical (que no tienes) se añaden algo que se llaman pulsos EQUALIZADORES.

Estos pulsos, sirven más que nada para identificar el campo PAR o IMPAR en una señal entrelazada de video NTSC, y son cruciales al momento de incluir toda la estructura de sincronización o la imagen que se genera no servirá de nada.

También, es importante la frecuencia de trabajo, la series 16 no tienen la velocidad suficiente para generar video, pero un pic serie 18 si que lo tendrá.

Te aconsejo usar un pic 18 de la serie K, por ejemplo, el PIC18F46K22, el cual alcanza 64 mhz de reloj sin problemas, esto es muy util porque en mi caso, cuando generé video compuesto, lo hice usando un cristal de 14.8182 Mhz, que es 4 veces la fundamental de NTSC, para PAL el diferente... pero al usar un cristal con la misma frecuencia que el video, la generación de tiempos es muy precisa.

Si no te es posible usar un PIC serie 18, al menos un serie 16F1, que corren hasta 32 Mhz podría ser de utilidad...

También, es necesario tener todo en ensamblador, y medir muy bien los timings usando el simulador de MPLAB

Aca hay un ejemplo de un proyecto (Ya antiguo) en el cual generé video NTSC sobre una pantalla de un viejo play station 1.




Otra cosa, es que ojala pudieras conseguir un AD725, es un chip que te facilita mucho el trabajo para generar señales a color.

Saludos.
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 16 de Septiembre de 2014, 02:32:28
Vicxtor, muchas gracias por responder. Si debo pulir el programa, se que con la familia 16F se logra video de mala calidad, pixeles grandes, antes de pasarme a un familia 18 quiero lograr manejarlo en el 16, si logro los sincronismos correctos es posible que logre un IC estable.

luego seguire con esto por ejemplo:

http://www.ucontrol.com.ar/forosmf/proyectos-con-pic/generador-de-video/msg84722/#msg84722

este post esta excelente logro los sincronismos de VGA sin problemas, le pedi el archivo ASM y prometio pasarmelo

voy a seguir revisando los tiempos hasta lograrlo, es basicamente una prueba bruta, hasta lograrlo.

en el foro de Ucontrol encontre notas de como hacen correr los pics con cristales mas grandes, tendria que hacer la prueba.

Me faltan los sincronismos de vertical, pensaba usar en el futuro el timer para hacer el vertical mientras el pic genera el horizontal.

tengo varios AD725 que supe comprar, pero la idea es justamente no usarlos, porque solo lo conseguis por ebay y aca ahora no llegan las cosas, usando un pic se convierte en un recurso a mano para todos y muy aplicable, es por eso que busco hacer un programa que quede a disposicion de todos y sea netamente usable en cualquier proyecto.
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 16 de Septiembre de 2014, 02:36:35
Hola jorge, de Assembler aun no se mucho que se diga pero
Código: [Seleccionar]
micros4:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      RETURN

Edito:
la instrucción RETURN tambien debe consumir tiempo de ejecucion verdad?Si, consume 2 ciclos .... y no se si me equivoque pero el NOP no consume dos ciclos de trabajo?? Si, me equivoque, solo consume uno
CALL y RETURN consume dos ciclos de trabajo

si, tenes razon, tengo que sumar eso, con el cristal de 4 mhz sin NOP directamente call y return lograba 5us pero no podia bajar de eso, con el cristal de 10 se hizo mas potable.
Título: Re: Video compuesto para TV con pic16f84
Publicado por: tapi8 en 16 de Septiembre de 2014, 04:50:59
Citar
si, tenes razon, tengo que sumar eso, con el cristal de 4 mhz sin NOP directamente call y return lograba 5us pero no podia bajar de eso, con el cristal de 10 se hizo mas potable.

El PIC 16F84 no va bien para estas cosas, debes escoger otro mas potente, si estas empezando con asm la serie 18f se te va a hacer un poco cuesta arriba, hay 16f que trabajan a 32MHz. Todos los PICs se pueden overclockear, es decir pueden trabajar por encima de la frec que dice el fabricante, pero hay riesgo de que pueda haber errores en la ejecucion del programa, aunque no tendria por que pasar.

Una temporizacion tan pequeña vale la pena hacerla directamente en el programa principal.
Por ejemplo de 5uS a 4Mhz:

bsf  PORTB,0     ;lo que tengas que poner a 1 o 0
goto  $+1          ;va a la suguiente instruccion consumiendo 2 ciclos de instruccion
goto  $+1          ;otros dos uS
nop                   ;1uS mas para completar los 5uS
bcf  PORTB,0     ;ya lleva 5uS en alto

Si aparte de contar tiempos muy precisos tienes que atender a muchas cosas, mejor usar TIMER1 que es de 16bits, te dara precision a 20Mhz de 1/5uS es decir 200nS, con TIMER2 tambien puedes conseguir temporizaciones bastante precisas. Con TIMER0 tambien puedes conseguir estos tiempos, tienes que asignarle el preescaler al WDT, sino la precision sera de la mitad.
Título: Re: Video compuesto para TV con pic16f84
Publicado por: elgarbe en 16 de Septiembre de 2014, 08:27:02
Jorge, veo que venis muy bien en los dos foros, me alegro que sigas con todo!!!

En estas cosas es importante el uso del osciloscopio para poder debuguear si algo no sale bien. Si queres sacale una foto de frente al osciloscopio y te tiramos como deberías poner las cosas para ver la onda.

En teoria tendría que haber lineas bien verticales. Tengo que confesar que tengo mis dudas sobre trabajar sin sincro vertical. Estamos basando todo en la idea de richard, pero la verdad es que no puedo asegurar que sin sincro vertical funcione lo que queremos. De todos modos, me parece que lo que estas obteniendo esta muy cerca de lo que esperamos obtener. Quizás si conseguis ajustar bien los tiempos funcione como esperamos.
No he leido bien detenidamente las respuestas, pero puede ser que tengas problemas con los tiempos en el código de las pruebas?

Saludos!
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 16 de Septiembre de 2014, 12:22:03
Citar
si, tenes razon, tengo que sumar eso, con el cristal de 4 mhz sin NOP directamente call y return lograba 5us pero no podia bajar de eso, con el cristal de 10 se hizo mas potable.

El PIC 16F84 no va bien para estas cosas, debes escoger otro mas potente, si estas empezando con asm la serie 18f se te va a hacer un poco cuesta arriba, hay 16f que trabajan a 32MHz. Todos los PICs se pueden overclockear, es decir pueden trabajar por encima de la frec que dice el fabricante, pero hay riesgo de que pueda haber errores en la ejecucion del programa, aunque no tendria por que pasar.

Una temporizacion tan pequeña vale la pena hacerla directamente en el programa principal.
Por ejemplo de 5uS a 4Mhz:

bsf  PORTB,0     ;lo que tengas que poner a 1 o 0
goto  $+1          ;va a la suguiente instruccion consumiendo 2 ciclos de instruccion
goto  $+1          ;otros dos uS
nop                   ;1uS mas para completar los 5uS
bcf  PORTB,0     ;ya lleva 5uS en alto

Si aparte de contar tiempos muy precisos tienes que atender a muchas cosas, mejor usar TIMER1 que es de 16bits, te dara precision a 20Mhz de 1/5uS es decir 200nS, con TIMER2 tambien puedes conseguir temporizaciones bastante precisas. Con TIMER0 tambien puedes conseguir estos tiempos, tienes que asignarle el preescaler al WDT, sino la precision sera de la mitad.

hola, gracias por el aporte, por ahora los experimentos los voy a hacer con lo que tengo, inicialmente un 16f84 despues paso a un 877 u 886 u 876, no tengo en mi poder un 18f y estan bastante inaccesibles, extraño comprar por ebay.

Muy buen aporte, no sabia que se podia hacer eso con el goto, lo voy a implementar. Estoy usando un cristal de 10mhz asi que cada instruccion seria 0.4us. ahi es donde le pifie en la programacion calcule mal los tiempos.

el sincro vertical son 6 pulsos positivos mas 5 pulsos de igual ancho pero negativos y 5 pulsos positivos mas en donde en la linea par el ultimo pulso dura el doble ¿es correcto lo que digo o le estoy pifiando?
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 16 de Septiembre de 2014, 12:25:41
Jorge, veo que venis muy bien en los dos foros, me alegro que sigas con todo!!!

En estas cosas es importante el uso del osciloscopio para poder debuguear si algo no sale bien. Si queres sacale una foto de frente al osciloscopio y te tiramos como deberías poner las cosas para ver la onda.

En teoria tendría que haber lineas bien verticales. Tengo que confesar que tengo mis dudas sobre trabajar sin sincro vertical. Estamos basando todo en la idea de richard, pero la verdad es que no puedo asegurar que sin sincro vertical funcione lo que queremos. De todos modos, me parece que lo que estas obteniendo esta muy cerca de lo que esperamos obtener. Quizás si conseguis ajustar bien los tiempos funcione como esperamos.
No he leido bien detenidamente las respuestas, pero puede ser que tengas problemas con los tiempos en el código de las pruebas?

Saludos!
gracias, voy por el segundo round en otro lenguaje jajaja.
si es como decis, hay un tema con los tiempos, hoy lo analizo bien y lo pongo a tono. El tema es que estuve mirando detenidamente la foto, me parece que sin sincro vertical siempre van a quedar desfasadas las columnas, hoy pruebo de nuevo. ya me puse a leer de como hacer una interrupcion asi que voy a tener que implementar el timer para el vertical. Lo razono asi porque la pantalla quedo estable y no era algo caotico como me pasaba antes.
Título: Re: Video compuesto para TV con pic16f84
Publicado por: elgarbe en 16 de Septiembre de 2014, 13:08:40
Jorge, veo que venis muy bien en los dos foros, me alegro que sigas con todo!!!

En estas cosas es importante el uso del osciloscopio para poder debuguear si algo no sale bien. Si queres sacale una foto de frente al osciloscopio y te tiramos como deberías poner las cosas para ver la onda.

En teoria tendría que haber lineas bien verticales. Tengo que confesar que tengo mis dudas sobre trabajar sin sincro vertical. Estamos basando todo en la idea de richard, pero la verdad es que no puedo asegurar que sin sincro vertical funcione lo que queremos. De todos modos, me parece que lo que estas obteniendo esta muy cerca de lo que esperamos obtener. Quizás si conseguis ajustar bien los tiempos funcione como esperamos.
No he leido bien detenidamente las respuestas, pero puede ser que tengas problemas con los tiempos en el código de las pruebas?

Saludos!
gracias, voy por el segundo round en otro lenguaje jajaja.
si es como decis, hay un tema con los tiempos, hoy lo analizo bien y lo pongo a tono. El tema es que estuve mirando detenidamente la foto, me parece que sin sincro vertical siempre van a quedar desfasadas las columnas, hoy pruebo de nuevo. ya me puse a leer de como hacer una interrupcion asi que voy a tener que implementar el timer para el vertical. Lo razono asi porque la pantalla quedo estable y no era algo caotico como me pasaba antes.

En teoría, sin sincro vertical lo que pasaría es que la imagen se va hacia arriba o abajo constantemente, pero como son líneas verticales no importaría. Para que salgan las lineas verticales tenes que tener sincronizado solo el horizontal. La duda que me queda a mi es que los pulsos de sincro horizontal debe estar solo en las líneas visibles. No sé que pasa al ser un tren continuo de pulsos horizontales, no sé si el vertical pueda llegar a confundir alguna parte del sincro horizontal. Pero si esto no pasa, entonces las lineas verticales deberías poder verlas. Lo más importante es que el pulso de sincro sea de 4useg y el tiempo entre pulsos sea exactamante el tiempo de la norma en la que trabajes, 64useg para PAL (creo). Si esos 64useg no son exactos, entonces aparece ese corrimiento en horizontal.

Saludos y espero los resultados corregidos!
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 17 de Septiembre de 2014, 13:48:17
gracias, sigo trabajando solo que ayer no hice ningun avance, estoy renengando con crear un contador, queria usar uno para que decremente pero cuando lo compilo me tira error

todavia no empece a practicar interrupciones, pero estoy complicado pero ya lo voy a descular
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 17 de Septiembre de 2014, 22:28:07
tengo el siguiente problema, quiero hacer un contador para contar los pulsos, pense en hacerlo asi.

inicio:
      BSF STATUS,RP0
      CLRF PORTA
      BCF STATUS,RP0
rutina:;cristal de 10MHZ 0.4US cada funcion
      MOVLW D'251'
cont:   MOVFW conteo
      BCF PORTA,2 ;0.4
      BCF PORTA,0 ;0.4
      CALL micros4 ;0.4
      BSF PORTA,0 ;0.4
      CALL micros8 ;0.4
      BCF PORTA,0 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros5 ;0.4
      BCF PORTA,2 ;0.4
      BSF PORTA,0  ;0.4
      CALL micros19 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros6 ;0.4
      BCF PORTA,2 ;0.4
      CALL micros20 ;0.4
      BCF PORTA,0 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros2 ;0.4
      DECFSZ conteo
      GOTO cont  ;cuando esta en cero salta el goto y sigue el programa
                CLRF conteo

vertical:



La variable esta declarada arriba asi:


;***** VARIABLE DEFINITIONS
w_temp        EQU     0x0C        ; variable used for context saving
status_temp   EQU     0x0D        ; variable used for context saving
conteo        EQU      0x0C
;**********************************************************************



ahora cuando apreto f10 y me dice el error.

Error - section 'MAIN_PROGRAM' can not fit the section. Section 'MAIN_PROGRAM' length=0x000008b0
Errors    : 1

este error antes de poner el decrementador no lo arrojaba y no toque nada de eso
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 20 de Septiembre de 2014, 02:43:21
sigo en el proceso de aprender a manejar mplab, asi que pare a leer en estos dias y  encontre el STOPWATCH y ahi pude ir contando los us. Todavia no lo logre pero va

(http://i222.photobucket.com/albums/dd89/ford1940deluxe2/ford1940deluxe2001/19sep.jpg) (http://s222.photobucket.com/user/ford1940deluxe2/media/ford1940deluxe2001/19sep.jpg.html)
(http://i222.photobucket.com/albums/dd89/ford1940deluxe2/ford1940deluxe2001/05120002.jpg) (http://s222.photobucket.com/user/ford1940deluxe2/media/ford1940deluxe2001/05120002.jpg.html)
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 20 de Septiembre de 2014, 03:48:43
me voy a dormir y les comento que elimine los grises para hacerla mas cuadra la programacion (si ya se es dificil creer que sea mas cuadrada de lo que ya es!!) y retoque algunas cosas como por ejemplo que cuando empiece el pulso de 4 us de sincronismo inicial no tenga ningun comando previo, que este limpio y logre esto:

para el garbe y pastbytes!!

(http://i222.photobucket.com/albums/dd89/ford1940deluxe2/electronica/logrado-1.jpg) (http://s222.photobucket.com/user/ford1940deluxe2/media/electronica/logrado-1.jpg.html)

Aca va el video


y aqui el programa

Citar
inicio:
       BSF STATUS,RP0
      CLRF PORTA
      BCF STATUS,RP0
      BCF PORTA,2 ;0.4
      BCF PORTA,0 ;0.4
rutina:;cristal de 10MHZ 0.4US cada funcion
      CALL micros4 ;0.4
      BSF PORTA,0 ;0.4      
      CALL micros8 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros5 ;0.4
      BCF PORTA,2 ;0.4
      BSF PORTA,0  ;0.4
      CALL micros19 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros6 ;0.4
      BCF PORTA,2 ;0.4
      CALL micros20 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros2 ;0.4
      BCF PORTA,2 ;0.4
      BCF PORTA,0 ;0.4
      GOTO rutina
;-----------------------retardos en microsegundos----------

micros4:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN
micros8:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP  
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN
micros5:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN
micros6:
      NOP  ;un ciclo de trabajo por cada instruccion nop
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN         
micros19:
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP ;8us
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP ;8us
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP ;8us
      NOP
      NOP
      NOP
      NOP; 18.8
      RETURN
      
micros20:
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP ;8us
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP ;8us
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN
micros2:
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      RETURN      
; remaining code goes here

        goto $

        END                       ; directive 'end of program'



Me voy a dormir feliz, mañana tratare de hacer la barra gris y luego vere como invento el vertical.

Saludos!!!
Título: Re: Video compuesto para TV con pic16f84
Publicado por: elgarbe en 20 de Septiembre de 2014, 09:24:08
 ((:-)) Pero muy bien!!!!!!!!!!!!!

Ahora te diría que trates de bajar el tiempo que dejas encendido el haz, para hacer la linea vertical, al tiempo mínimo, o sea, yo cambiaría esto:

Código: [Seleccionar]
rutina:;cristal de 10MHZ 0.4US cada funcion
      CALL micros4 ;0.4
      BSF PORTA,0 ;0.4     
      CALL micros8 ;0.4
      BSF PORTA,2 ;0.4
      CALL micros5 ;0.4
      BCF PORTA,2 ;0.4
      BSF PORTA,0  ;0.4
      CALL micros19 ;0.4

Por esto

Código: [Seleccionar]
rutina:;cristal de 10MHZ 0.4US cada funcion
      CALL micros4 ;0.4
      BSF PORTA,0 ;0.4     
      CALL micros8 ;0.4
      BSF PORTA,2 ;0.4       ;barra blanca mas fina posible
      BCF PORTA,2 ;0.4
      BSF PORTA,0  ;0.4
      CALL micros20           ;Agrego acá los 5 useg
      CALL micros4             ;que le robamos a la barra blanca

Otro consejo es que pongas comentarios en todas las líneas ya que seguir un prog en ASM es bastante tedioso para el que no lo hizo y se nos va a empezar a complicar seguirte los pasos.

La verdad que me quedo muy contento de que hayas logrado la prueba con éxito!

Cuando quieras empezar con el vertical posteate la idea así la analizamos entre todos. Lo que hace Rickar no lo termino de entender del todo...

Saludos!!!!

Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 20 de Septiembre de 2014, 10:33:55
Gracias estimado!!!

listo hoy lo pruebo, a ver que sale y completo el programa con los comentarios para que se pueda seguir
Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 20 de Septiembre de 2014, 12:46:17
todavia no cambie nada, probe en la otra tv me la traje para probar de nuevo

(http://i92.photobucket.com/albums/l25/ford1940deluxe/electronica/fotologrado_zps288e9e53.jpg) (http://s92.photobucket.com/user/ford1940deluxe/media/electronica/fotologrado_zps288e9e53.jpg.html)



feature=youtu.be
Título: Re: Video compuesto para TV con pic16f84
Publicado por: Vangeluz en 05 de Octubre de 2014, 02:18:39
Hola Jorge, has probado con la rutina de retardos de Editorial Ra-ma ?, quizá se te haga mas fácil ( digo yo  :? ).
Simplemente al final de tu programa antes de END pones:

   INCLUDE  <RETARDOS.INC>   ; Librería con subrutinas de retardo.

Luego desde el programa lo llamas con ( CALL ) por ejemplo:

        call      Retardo_4micros

Tienes creo desde 4 micro-segundos hasta 20 segundos.

La libreria es:


Código: [Seleccionar]
;**************************** Librería "RETARDOS.INC" *********************************
;
; ===================================================================
;   Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;   E. Palacios, F. Remiro y L. López.
;   Editorial Ra-Ma.  www.ra-ma.es
; ===================================================================
;
; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos.
; Además se pueden implementar otras subrutinas muy fácilmente.
;
; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal
; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada
; ciclo máquina tarda 4 x 1/4MHz = 1 µs.
;
; En los comentarios, "cm" significa "ciclos máquina".
;
; ZONA DE DATOS *********************************************************************

CBLOCK
R_ContA ; Contadores para los retardos.
R_ContB
R_ContC
ENDC
;
; RETARDOS de 4 hasta 10 microsegundos ---------------------------------------------------
;
; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ,
; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina
; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina.
;
Retardo_10micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
Retardo_5micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
Retardo_4micros ; La llamada "call" aporta 2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
;
Retardo_500micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'164' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_200micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'64' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_100micros ; La llamada "call" aporta 2 ciclos máquina.
movlw d'31' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_50micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'14' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_20micros ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "K".
;
; El próximo bloque "RetardoMicros" tarda:
; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
;
RetardoMicros
movwf R_ContA ; Aporta 1 ciclo máquina.
Rmicros_Bucle
decfsz R_ContA,F ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto Rmicros_Bucle ; Aporta (K-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_500micros: 2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
; - Retardo_200micros: 2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
; - Retardo_100micros: 2     + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
; - Retardo_50micros : 2 + 1 + 1 + 2 + (2 + 3K) =  50 cm =  50 µs. (para K= 14 y 4 MHz).
; - Retardo_20micros : 2     + 1     + (2 + 3K) =  20 cm =  20 µs. (para K=  5 y 4 MHz).
;
; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
;
Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_50ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_20ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_10ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_5ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_2ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'2' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_1ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'1' ; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
movwf R_ContB ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop ; Aporta KxMx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_50ms : 2 + 1 + 2 + (2 + 4M + 4KM) =  50007 cm =  50 ms. (M= 50 y K=249).
; - Retardo_20ms : 2 + 1 + 2 + (2 + 4M + 4KM) =  20007 cm =  20 ms. (M= 20 y K=249).
; - Retardo_10ms : 2 + 1 + 2 + (2 + 4M + 4KM) =  10007 cm =  10 ms. (M= 10 y K=249).
; - Retardo_5ms  : 2 + 1 + 2 + (2 + 4M + 4KM) =   5007 cm =   5 ms. (M=  5 y K=249).
; - Retardo_2ms  : 2 + 1 + 2 + (2 + 4M + 4KM) =   2007 cm =   2 ms. (M=  2 y K=249).
; - Retardo_1ms  : 2 + 1     + (2 + 4M + 4KM) =   1005 cm =   1 ms. (M=  1 y K=249).
;
; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
;
Retardo_20s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_10s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_5s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_2s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_1s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_500ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "N".
;
; El próximo bloque "Retardo_1Decima" tarda:
; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
;   + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
;
Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno         
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_20s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
; (N=200, M=100 y K=249).
; - Retardo_10s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
; (N=100, M=100 y K=249).
; - Retardo_5s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  5000207 cm =  5 s.
; (N= 50, M=100 y K=249).
; - Retardo_2s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  2000087 cm =  2 s.
; (N= 20, M=100 y K=249).
; - Retardo_1s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  1000047 cm =  1 s.
; (N= 10, M=100 y K=249).
; - Retardo_500ms: 2 + 1     + (2 + 4N + 4MN + 4KMN) =   500025 cm = 0,5 s.
; (N=  5, M=100 y K=249).

; ===================================================================
;   Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;   E. Palacios, F. Remiro y L. López.
;   Editorial Ra-Ma.  www.ra-ma.es
; ===================================================================

Solo la copias a un TXT/ Guardar como/tipo ( todos los archivos ) nombre  RETARDOS.inc.
Y solo la llamas desde el programa con call.
Saludos !!!

Título: Re: Video compuesto para TV con pic16f84
Publicado por: jorgenuviola en 05 de Octubre de 2014, 17:20:25
muchas gracias Vangeluz!!! impecable tu aporte, todavia no aprendi a manejar .inc, me voy a poner al dia con este tema. Esta bueno porque se acota en tiempos solo a lo que consume el comando call.


Por otro lado hice un avance, con las ideas de los muchachos hice en la programacion solo un sincro vertical, es decir no hay sincronismo impar. Lo programe cada 304 lineas, el sincronismo vertical consiste en 6 pulsos de 32US en logico 1, 5 pulsos de 32US en logico 0 y por ultimo 5 pulsos de 32US en logico 1. Cuando cuenta 304 lineas salta al sincronismo vertical. Los tiempos son exactos.

 El resultado fue este que no se exactamente que estoy viendo, deberia ver un solo sincro pero veo varios, no se ve el color negro sino un gris, lo que me dice que hay algun tiempo que esta mal. Lo que si quedo estable a diferencia de las pruebas anteriores que fueron un desastre. Les dejo el video.


feature=youtu.be

Ahora si estoy medio perdido, porque no logro identificar en lo que estoy viendo que es lo que esta mal.
¿debo hacer el sincro impar?
Si lo tuviera que hacer ¿acorto un pulso de video a la mitad? o ¿la diferencia de video la da el ultimo pulso del sincro vertical que es de 64US en lugar de 32?
Título: Re: Video compuesto para TV con pic16f84
Publicado por: robertomasconde@hotmail.c en 10 de Febrero de 2015, 11:43:05
buenos dias hace unos años arranque a hacer un programa igual para truchar el cable y cuando lo temine ya estaba obsoleto en cuanto llegue a casa lo subo
deje de estudiar este tema por algunos años y hoy estoy retomandolo porque me gusta realmente pero reconosco que si te desenchufas despues tenes que arrancar practicamente de cero el proyecto que te comento genera el sincronismo completo impulsos de borrado igualadores y sincronismo es para un 16f84 y un cristal de 4 mhz lo probe con proteus y el occiloscopio y andava de vuelo
Título: Re: Video compuesto para TV con pic16f84
Publicado por: robertomasconde@hotmail.c en 10 de Febrero de 2015, 19:45:25
bueno aca lo subo espero les sirva
Título: Re: Video compuesto para TV con pic16f84
Publicado por: misterweb en 17 de Febrero de 2015, 17:43:14
Muchas gracias Jorge por tu aporte que me parece muy interesante, yo me manejo con la familia de microcontroladores 18F pero basicamente seria lo mismo.

Mi intencion seria hacer un pequeño osciloscopio, de tal forma que la onda capturada se pudiera presentar en pantalla mediante la entrada de video.

Bueno y otras aplicaciones interesantes que se podrian hacer.

Haber si encuentro un momento y adapto tu programa al PIC y puedo ver los resultados.


Un saludo y gracias por todo:




________________________________________________________________
Mi Blog

https://misterelectronico.wordpress.com/entranador-fabricacion-casera/ (https://misterelectronico.wordpress.com/entranador-fabricacion-casera/)