"Videopic 16f877" Mensajes en la TV.

Hola a todos y a todas:

He visto en una Web utilizar un PIC en este caso el 16F877 (también vale el 16F876A) que muestra textos que se ven muy bien en un televisor como muestra en la imagen de abajo.


modo0c.JPG


modo0b.JPG


placaprueba.JPG


Me gustaría entre todos nosotros hacer algo parecido. Siempre he querido hacer esto y mis limitaciones por ahora ya que estoy en aprendizaje de PIC me lo impiden. La verdad mostrar también el estado de los LED, motores, ventiladores, relé o relay, etc.

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

ASM Hex

Un cordial saludo.
 
Hola:

Ese buscador merece una cucarda: muy buen hallazgo !

Si bien me he volcado a los GLCD, este tema me interesa porque los TRC son tan ubicuos que no es necesario transportarlos. Basta con mandarle señal al que uno tiene más cerca :)

De todos modos hay que tener la cajita de chapa de la derecha, que no es precisamente un pic.
 
Alejandro Sherar dijo:
Hola:
De todos modos hay que tener la cajita de chapa de la derecha, que no es precisamente un pic.

Es un sintonizador para la entrada RF (de antenas). Esa parte no hace falta en ralidad, sólo los rCA y en este caso es el amarillo que ves al lado, lo mismo es para EuroConector.
 
Sí, estaría bueno destripar el código y usarlo para simular algun glcd quizás o hacer algo como la YBox ( http://ybox.tv/index.php?page=media ). Habría que considerar overclockear el Pic hasta 24, 25 o incluso 32 MHz para obtener una mejor resolución horizontal (ver http://www.sparkfun.com/commerce/tutorial_información.php?tutorials_id=54 )

A los que estén interesados, recomiendo ver el post inferior a este, "Generar una señal de video NTSC usando un PIC" https://www.forosdeelectronica.com/about25870.html

Saludos,
Gonzalo
 
Para el que esté interesado,

La resolución máxima que se puede lograr es de 576 líneas de las cuales posiblemente se usen las de arriba o las de abajo (o ambas) para procesar o copiar caracteres a memoria.

A 20mhz la resolución horizontal máxima es de 208 pixeles.

A 25mhz (160ns / instr) es de 288 pixeles!

A 32mhz (125ns / instr - super overclock ) es de unos 368 pixeles!
 
gzaloprgm dijo:
La resolución máxima que se puede lograr es de 576 líneas [...]
Son 576 líneas si se genera video entrelazado. Yo intenté generar video entrelazado de 525 líneas (correspondiente al sistema de televisión de México) pero el esfuerzo no vale la pena, es muy complicado y al menos a mi no me fue bien, así que lo mejor y más sencillo es generar video desentrelazado, lo que le daría una resolución vertical de 288 líneas que no está nada mal.
 
Mmmm, claro, por qué no?

Nunca he usado ese PIC, pero averigua si se puede usar 48 MHz, pero yo creo que cualquier pic, por más periféricos que tenga, debe tener por lo menos algunos pines I/O para usarlos con este fin, haciendo un programa en assembler...... bieeeeeen largo. Pero claro que se puede.

Lo que sique sería el buen dato, sería tener una memoria externa donde la pantalla entera esté guardada en forma matricial dentro de ella, y leerla constantemente, tirando cada dato en pantalla. Con eso se facilita mucho el código, ya que con un PIC tu grabarías cambios en esa memoria, y otro PIC simplemente se encarga de tirar en pantalla. Estaría bueno cierto?

Mmm, y qué hay del color con PIC? Tengo entendido que con 20 MHz es imposible generar colores en pantalla. Se podrá con 48 MHz?

Es posible "overcloquear" un PIC? Hasta cuánto?

Saludos![/i]
 
Si, segun el articulo que publique de sparkfun hicieron andar un 16f876 a 32mhz sacando datos por rs232 durante dos horas sin problemas.

En cuanto a imagen color es posible, el problema es que requiere una circuitería un poco más compleja (conversor digital analogico que funcione muy rápido).

Otra forma que estaría buena intentar sería conectar al pic a un cable de scart, no rca, que lleva los colores y la señal de sync en distintos conductores por lo que sería más facil dibujar a color, si tenemos tres posibilidades (blanco, gris y negro) para tres colores (rojo, verde y azul) podríamos generar unos 27 colores distintos!

Saludos,
Gonzalo

[edit]: hice una imagen mostrando todos los colores que se podrían hacer: 0 es apagado, 1 es medio encendido y 2 es prendido del todo, en orden RGB izq. a derecha.
 

Adjuntos

  • colores_984.jpg
    colores_984.jpg
    90.8 KB · Visitas: 33
Hola amigos que tal? Estoy trabajando con este proyectito para una aplicación escolar y les voy a hablar un poco de lo que se sobre el tema para aquel que le sea de utilidad.
Estoy utilizando un Pic16F84 con un cristal de 20Mhz, lo cual me es suficiente para generar imagen a buena resolución en blanco y negro. También se puede generar imagen a color pero es bastante mas complicado asi que por lo pronto les hablo del que esta en blanco y negro.
Miren, para programar eso (los que saben assambler y lo van a programar de mano propia) hay que tener muy en cuenta el tiempo dado que la señal debe estar perfectamente sincronizada y conseguirlo hay que cuantificar el tiempo que tarda cada instrucción de nuestro programa y determinar los tiempos de cada instrucción. En el caso de un cristal de 20Mhz, mi microcontrolador Pic16F84 genera un ciclo maquina con duración de 200ns en instrucciones simples y 400ns en instrucciones de ramificado (branch). Cada instrucción hay que sumar su tiempo para ir midiendo cuando nos dura la ejecución durante el barrido de la imagen en pantalla.

El estándar NTSC indica que genera una imagen de 525 lineas horizontales y cada una de ellas puede dividirse en una resolución que varía entre 240 (VHS), 330 (señal de TV común), 380(TV satelital común) y 540(DVD) pixeles dependiendo el sistema que se utilice. Cada imagen esta compuesta de 2 campos entrelazados, el primero que imprime en pantalla 262.5 líneas (números pares) y el segundo las siguientes 262.5 (números impares). Entre los 2 campos se imprime en pantalla 1 cuadro o foto en una fracción de 1/30 segundos con lo que sabemos que el primer campo es de 1/60 seg y el segundo transcurre en el 1/60 seg siguiente.

video1.jpg


Bueno ahora vamos a los tiempos, es necesario comprender todo esto antes de poder programar un PIC que genere estas señales necesarias para mostrar imagen en pantalla.
Cada línea horizontal en pantalla tiene una duración de 64us y esta dividido en 2 partes, la primera que es la señal análoga de la imagen y dura 52microsegundos y la segunda parte que son los 12us restantes que utilizan un pulso de sincronismo durante el cual se borra la siguiente línea antes de comenzarla a imprimir, además de que este también es el pulso de sincronismo horizontal.
La señal queda como se muestra a continuación:

video2.jpg


Bueno para el sincronismo vertical es otro rollo diferente. Les explicare de manera resumida. En el sistema NTSC la imagen está compuesta de 525 líneas como dijimos anteriormente, pero de éstas solo se muestran en la pantalla únicamente 480, las 45 líneas restantes son utilizadas para datos adjuntos al video .Las que realmente son importantes son las primeras 21 que son para datos de video las 24 que nos quedan son las finales que se utilizan para subtítulos y datos escritos en pantalla. Volviendo a las primeras 21 en ellas están contenidos datos críticos del video, unas de ellas son especialmente utilizadas para el sincronismo vertical. En ellas se entrega un tren de pulsos que sincroniza el monitor y determina el inicio de cada imagen. Como comprendimos cada imagen se divide en 2 campos de 262 líneas. Cada campo debe ser sincronizado individualmente así que de sus 262.5 líneas las primeras 9 son las que determinan el sincronismo y en las que entregaremos el tren de pulsos de sincronía vertical. Las 9 líneas van separadas en 3 grupos de 3 líneas cada uno. El primer y tercer grupo se denomina zona de igualación y el segundo zona de sincronía. Cada uno tiene que tener un tren de pulsos digital como se muestra a continuación en la imagen, nótese que el tren de la zona de igualación es inverso al de sincronización:

video3.jpg


Ahora para imprimir cada pixel hay que conocer como se maneja la señal. La señal de video tiene un rango de 0 a 1 V siendo 0 el punto de sincronismo, .3v es el rango para el valor nulo o equivalente al color negro y un valor de 1v para el color blanco más brillante. Para sacar variantes de la escala de grises únicamente hay que modular el dato entre .3 y 1V para generar el gris deseado. Ese nivel será el que se coloque en cada punto o pixel de la imagen.
Por ultimo aplicaremos esto en el pic. Ya sabemos que cada instrucción tiene una duración de 1 o 2 ciclos de reloj dependiendo del tipo, por defecto la instrucción simple de 1 ciclo de reloj tiene una duración de 200ns. Si sabemos que la señal dada para una sola línea de imagen horizontal tiene una duración de 64us podemos calcular que en ese periodo el PIC puede realizar 320 instrucciones, y más específicamente dentro del periodo de la señal de imagen en una línea (que tiene una duración de 52us como dijimos anteriormente) únicamente podremos realizar 260 instrucciones en base a esto podemos determinar que resolución nos acomoda dependiendo de nuestra aplicación. En mi caso solo requiero imprimir en monitor algunos datos asi que para mi comodidad puedo utilizar una resolución de 130 pixeles en las que al imprimir cada pixel utilizare 2 instrucciones. Esto esta un poco reducido pero si aumentamos el numero de instrucciones por pixel también reducimos el numero de pixeles por línea. Puedo decirles que con 2 instrucciones es suficiente, 1 para traer el dato (bit individual 1 para blanco y 0 para negro), y otra para imprimirlo (dando salida en un puerto del pin). Como tip para el almacenamiento del dato que quieren mostrar en pantalla, cada línea la pueden dividir en fracciones de 8 pixeles (1byte).

Como pueden ver es simple generar una imagen en blanco y negro con un Pic16F84, es un poco justo pero es suficiente. Dependiendo de su aplicación pueden variar. Una opción que vi en algunas aplicaciones para poder procesar información en el pic y luego imprimirla en pantalla es que únicamente se utiliza un campo de la imagen para imprimir y en el periodo que debería mostrarse el segundo es tiempo que el pic utiliza para realizar sus cálculos para imprimir el campo siguiente (nuevamente el 1). Sin perder nunca el tiempo de ejecución del programa porque de lo contrario la señal se desordenará.

En seguida les publicaré mas sobre mi proyecto mientras tanto aquí les comparto los fundamentos sobre los que hay que trabajar.
 
Atrás
Arriba