Generar Señal de Video con PIC

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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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
 
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.
 
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.
 
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.
 
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.
 
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
 
Atrás
Arriba