Autor Tema: Generador de imagenes de video con PIC  (Leído 118070 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gera

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

saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Generador de imagenes de video con PIC
« Respuesta #136 en: 15 de Agosto de 2008, 19:22:57 »
Sos un capo flaco, lo que hace un papel, lápiz y ganas de armar un rompecabezas  :-/ :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 928
Re: Generador de imagenes de video con PIC
« Respuesta #137 en: 18 de Agosto de 2008, 14:31:19 »
   Que lata  :(

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

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

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

Salud  8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Generador de imagenes de video con PIC
« Respuesta #138 en: 18 de Agosto de 2008, 15:35:37 »
Cada ves me maravilla más lo que hacían con los famosos home computer de los '80, corrían a 3 o 4 mHz y le sacaban hasta 300 pixeles ¡¡¡ increible !!!

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

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

Tenes toda la razon.
De todos modos, 128x64 para algun juego sencillo puede andar....no vamos a hacer el Doom, pero un tetris o alguna cosilla asi deberia ir bien. :)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Generador de imagenes de video con PIC
« Respuesta #139 en: 19 de Agosto de 2008, 18:22:28 »
Hola gente: Sigo con el tema de la emulación y también ando algo escaso de tiempo, pero no deja de molestarme la mosca en la cara  :D :D :D
El tema es como dice Savage, el 18f452 en el momento de mostrar los pixels no puede hacer otra cosa, si bien la ram sale al video como en una glcd, tenemos que ver como cargarle los datos en dicha ram. Hay unas 62 líneas antes y otras 62 líneas después en las que el micro no tiene más que invertir el pulso de sincronismo, cargar el tmr0 y cambiar algunas banderitas.

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

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

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

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

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

Por ahora sigo con el programa original y ya le mejoré otra cosita, un retardo que estaba hecho con bucle ahora está con el TMR1 y el sincronismo sigue el TMR0.
Todo esto para optimizar tiempos.
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Generador de imagenes de video con PIC
« Respuesta #140 en: 19 de Agosto de 2008, 19:54:14 »
Ariel, esta es una parte de tus librerías, las podrías modificar según explico en la misma? lo que pasa es que no sé como se hace  :mrgreen:
creo que modificando estas dos partes tendríamos algo compatible entre el glcd y el tv.
Necesitaría un pin para el tema de BUSY y otro para indicarle al micro principal que lo que está conectado es una glcd o este emulador (le llamamos CHECK a dicho pin)
Este pin puede ser un jumper, swich o mejor una resistencia de 1k a VCC en la misma placa del adaptador, en la placa principal le ponemos una resistencia de 10k a masa, cuando la placa emuladora se conecta tira a positivo la tensión de este pin y le indica que la librería cambia o que trabaje con el pin de busy.

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


Código: C
  1. //-----------------------------------------------------------------------
  2. //Escribe un byte en una de las mitades de la pantalla (lado=0:izq Lado=1:der)
  3. //-----------------------------------------------------------------------
  4. void GLCD_enviaBYTE(int1 lado, BYTE dato)
  5. {
  6.    if(lado) output_high(GLCD_CS2);  // Selecciono la mitad correspondiente
  7.       else  output_high(GLCD_CS1);
  8.  
  9.    output_low(GLCD_RW);       // Modo escritura
  10.    output_d(dato);            // Coloco el dato en el puerto y...
  11.  
  12.  
  13. //Si Check está a uno en lugar del delay_us(1) hacemos que espere a que el pin BUSY se ponga a cero.
  14. //En caso de que el pin check esté a cero ignora la señal de BUSY y hace el retardo de 1us.
  15.  
  16.  
  17.    delay_us(1);           // ...espero.
  18.    output_high(GLCD_E);       // Pongo el bit Enable en alto y...
  19.  
  20.  
  21. //Si check=1 espera a que Busy se ponga a 1.
  22. //Si check=0 hace un delay de 2us.
  23.    delay_us(2);           // ...espero.
  24.  
  25. //de nuevo si check=1 espera a que busy se ponga a cero.
  26.  
  27.  
  28.    output_low(GLCD_E);        // Pongo el bit Enable en bajo.
  29.  
  30.    output_low(GLCD_CS1);      // Libero la linea CS1 y...
  31.    output_low(GLCD_CS2);      // CS2.
  32. }
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1678
    • winpic800
Re: Generador de imagenes de video con PIC
« Respuesta #141 en: 20 de Agosto de 2008, 02:47:37 »
Yo use una vez el modulo spi para generar video , si es solo para blanco y negro .

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


Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Generador de imagenes de video con PIC
« Respuesta #142 en: 20 de Agosto de 2008, 02:52:48 »
Interesante idea!! :-/
como es eso? le tiras el bit y directamente sale al pin?
sin bit de inicio y esas cosas como la usart?

Cuentanos!!!
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1678
    • winpic800
Re: Generador de imagenes de video con PIC
« Respuesta #143 en: 20 de Agosto de 2008, 15:06:52 »
Hay que hacer los sincronismos igualmente , la salida spi solo se usaria en el tiempo "video" usease impresion de pixels  .

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

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


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



Solo es una idea , quizas pueda ayudar .







Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Generador de imagenes de video con PIC
« Respuesta #144 en: 20 de Agosto de 2008, 16:02:15 »
Si si culpa tuya me puse a leer!! :D
Te ahorras muchos ciclos, ya que básicamente es un shift register,  muy buena idea, ni se me hubiera ocurrido.
El problema en este caso es ajustar correctamente la frecuencia del clock del mssp, el otro es que hay que reorganizar la ram nuevamente, todo es cuestión de pensar, gracias sispic.
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 928
Re: Generador de imagenes de video con PIC
« Respuesta #145 en: 20 de Agosto de 2008, 21:52:34 »
Muy buena idea, desconocía que el SPI podía alcanzar los 5 Mbps a 20Mhz, eso permitiría lograr unos 256 pixeles de ancho, por desgracia el 16f648A no lo incluye, pero el 16F877A y el 18F2550 sí lo tienen, de esa manera ya podríamos lograr algo mejorcito.
Muy buen aporte Sisipic.

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

Salud  8)
« Última modificación: 20 de Agosto de 2008, 21:57:15 por SavageChicken »
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Generador de imagenes de video con PIC
« Respuesta #146 en: 20 de Agosto de 2008, 22:32:13 »
16F877A a 40MHz? a lo mucho trabaja a 20Mhz. Mas bien el PIC18F2550 a 40MHz alcanza 10Mbps y a 48MHz alcanza 12Mbps.

Javicho.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 928
Re: Generador de imagenes de video con PIC
« Respuesta #147 en: 20 de Agosto de 2008, 22:58:26 »
Hola  Javicho.

Estoy citando datos del datasheet de ambos microcontroladores, aunque se que el 16F877A llega solo a los 20 Mhz.
Salud  8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
Re: Generador de imagenes de video con PIC
« Respuesta #148 en: 21 de Agosto de 2008, 02:16:12 »
Javicho tiene razón, con el 16F877 llegarás a 5MIPS y con el 18F2550 llegarás a 12MIPS.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1678
    • winpic800
Re: Generador de imagenes de video con PIC
« Respuesta #149 en: 21 de Agosto de 2008, 03:40:11 »
Pero hay que contar la limitacion de por ""ejemplo 2 "" ciclos que es lo que se tarda en cargar un nuevo byte al modulo una vez enviado .
Ya que si el spi va  rapido  y tardamos mucho en cargarlo , veremos en la pantalla franjas negras entre bytes .
El spi habria que configurarlo a la velocidad que se toma en cargar un byte en el .