Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

20/05/2009 #121


Generar video..
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.
20/05/2009 #122

Avatar de Meta

Buenas.

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

Saludo.
20/05/2009 #123


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.
http://www.megaupload.com/?d=Q65R9TYZ
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
20/05/2009 #124

Avatar de Meta

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.
20/05/2009 #125


mira la pagina es:
http://www.micro-examples.com/public...erimposer.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
26/05/2009 #126


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.
26/05/2009 #127

Avatar de Meta

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.
26/05/2009 #128


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.
26/05/2009 #129

Avatar de Meta

Muy buena explicación...
27/05/2009 #130

Avatar de asherar

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)

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.

...
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
28/05/2009 #131


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.
28/05/2009 #132

Avatar de Meta

itvboy, eres digno de ser admirado...
28/05/2009 #133

Avatar de asherar

itvboy, gracias por la aclaración.

Meta dijo:
itvboy, eres digno de ser admirado...
Suscribo.
03/06/2009 #134

Avatar de Javilondo

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.
03/06/2009 #135

Avatar de asherar

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.
04/06/2009 #136

Avatar de Javilondo

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.
05/06/2009 #137


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.
05/06/2009 #138
Moderador

Avatar de Chico3001

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...
05/06/2009 #139


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).
17/06/2009 #140


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
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.