uControl
Septiembre 09, 2010, 02:47:17 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 2   Ir Abajo
  Imprimir  
Autor Tema: ¿Como generar una señal VGA de 640x480 puntos con TTL/PIC?  (Leído 2305 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« : Marzo 31, 2009, 04:23:51 »

Hola amigos!
Este hilo es otro de mis delirios. Los que me conocen saben que cada tanto ataco un problema que me resulta desconocido en un hilo, como si "pensara en voz alta". Esto de redactar el problema me permite clarificar mis ideas, asi que......a aguantarme :)
Dicho esto, vamos al tema:


¿Como generar una señal VGA de 640x480 puntos con TTL/PIC?

¿No seria estupendo tener una placa que nos permita usar un monitor VGA comun como pantalla de nuestros proyectos? ¿Pueden imaginarse el potencial que tendria a la hora de diseñar un pequeño osciloscopio casero, un analizador lógico, una especie de "publik" o simplemente para pasar anuncios en un escaparate?

Bien, estoy seguro que la mayoria de uds. estan pensando en un "si!".La mala noticia es que no se trata de un tema sencillo de lograr. La buena es que es posible.

El secreto está en obtener las señales de sincronismo adecuadas, y tener una lógica de control lo suficientemente rápida. Desde ya aclaro que personalmente creo que un PIC a menos de 20MHZ (e incluso a esa velocidad) no alcanza para esto. Sin embargo, algunos lo han hecho simplemente con compuertas TTL.

VGA ( Video Graphics Array )
La señal VGA contiene 5 señales activas. Dos señales de sincronismo horizontal y vertical (HS y VS) compatibles con los niveles lógicos TTL y activas a nivel bajo. Respectivamente indican el cambio de línea (HS-Horizontal Sync.) y de cuadro (VS-Vertical Sync).
Las restantes tres líneas RGB (Red-Green-Blue) son líneas analógicas cuyos valores oscilan 0 V (ausencia de señal) y 0,7 V (máxima intensidad de rojo, verde y azul respectivamente).
De esta manera, combinando diversas intensidades de las componentes RGB se construyen los diferentes colores.

En una pantalla VGA la pantalla contiene 640x480 pixels (picture elements). Los haces recorren la pantalla empezando por la esquina superior izquierda desde el punto de vista frontal de monitor. Para generar el cambio de línea y de pantalla el controlador VGA debe generar las señales de sincronismo.



Figura 1: la pantalla contiene 640x480 pixels


En la figura 1 se ve la distribución de los puntos en la pantalla y la figura 2 muestra un esquema de los tiempos implicados para una frecuencia de refresco de 60Hz. (1 pantalla cada 16,6 ms) con una resolución de 640 x 480 pixels.



Figura 2: esquema de los tiempos implicados.


Para generar una señal VGA se ha de llevar la cuenta de la posición de los haces RGB y en función de ésta consultar los valores gráficos que se deben mostrar. Un diseño típico incluiría: diversos contadores (de punto, de caracteres, de líneas y de columnas), una memoria de video (donde se almacena y actualiza la información que va a mostrarse y una memoria ROM que guarde la representación de los caracteres alfanuméricos. Este es el corazón de un eventual generador de imagenes VGA.

El problema de los tiempos.
Si miramos nuevamente la figura 2, vemos que disponemos de solo 25.17us para "encender/apagar" 640 veces los bits correspondientes al rojo, verde y azul. Ademas, se necesita un DAC (conversor digital/analogico) para obtener el tono de color deseado. Esto permite solo 25.17/640 = 0,039328125 uS por cada pixel. Luego hay que tener en cuenta los tiempos de los "bordes" de la imagen, etc. Pero esos 0,039328125uS son practicamente "ciencia ficcion" para un PIC ordinario.

El "problema" del color
Cada señal R, G o B que enviamos al monitor VGA debe tener una tension de entre 0 y 0,7V. 0 es "apagado", 0.7 es "maximo brillo". Si usamos (por ejemplo) 8 bits para representar cada posible tono de cada color, tendremos 256 tonos de verde, 256 de azul y 256 de rojo. La cantidad de colores de cada pixel serian 256x256x256 = 16.777.216 de colores.

Sin embargo, (ver post siguiente), la norma original para VGA solo prevee un maximo de 6 bits para cada color, es decir, 64 tonos de R, 64 de G y 64 de B (64x64x64 = 262.144 colores en total).

Obviamente, hace falta un DAC rápido (o tres, en realidad) para hacer esto. Y una memoria intermedia tambien rapida, de la que leer los valores a convertir y mostrar en la pantalla.


(Continuare delirando pronto).


Todo esto explica por que no vemos en todos lados proyectos que usen PICs conectados a pantallas VGAs. Sin embargo, en sitios como este The Great Z80 Computer Project uno descubre que hay genios capaces de obtener imagenes de 512x512 pixeles usando simplemente compuertas lógicas para generar las señales.

Me gustaria soñar con diseñar algo asi alguna vez. ¿Ustedes no?  Cool

* Image1.gif (50.27 KB - descargado 393 veces.)
* Image2.gif (24.23 KB - descargado 395 veces.)
« Última modificación: Marzo 31, 2009, 05:14:49 por Ariel » En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« Respuesta #1 : Marzo 31, 2009, 05:13:10 »

 Las especificaciones VGA son las siguientes:

    * 256 KB Video RAM
    * Modos: 16-colores y 256-colores
    * 262144 valores de la paleta de colores (6 bits para rojo, verde y azul)
    * Reloj maestro seleccionable de 25.2 MHz o 28.3
    * Máximo de 720 píxeles horizontales
    * Máximo de 480 líneas
    * Tasa de refresco de hasta 70 Hz
    * Interrupción vertical vacía (No todas las tarjetas lo soportan)
    * Modo plano: máximo de 16 colores
    * Modo pixel empaquetado: en modo 256 colores (Modo 13h)
    * Soporte para hacer scrolling
    * Algunas operaciones para mapas de bits
    * Barrel shifter
    * Soporte para partir la pantalla
    * 0.7 V pico a pico
    * 75 ohm de impedancia (9.3mA - 6.5mW)

VGA soporta tanto los modos de todos los puntos direccionables como modos de texto alfanuméricos. Los modos estándar de gráficos son:

    * 640×480 en 16 colores
    * 640×350 en 16 colores
    * 320×200 en 16 colores
    * 320×200 en 256 colores (Modo 13h)

Modos de texto estándar
Los modos estándar de texto alfanumérico para VGA usan 80 × 25 o 40 × 25 celdas de texto. Cada celda puede elegir entre uno de los 16 colores disponibles para su primer plano y 8 colores para el fondo; los 8 colores de fondo son los permitidos sin el bit de alta intensidad. Cada carácter también podrá parpadear, y todos los que se configuren para parpadear parpadearán al unísono. La opción de parpadeo para toda la pantalla puede ser cambiada por la capacidad de elegir el color de fondo para cada una de las celdas de entre todos los 16 colores. Todas estas opciones son las mismas que las del adaptador CGA presentado por IBM. Por lo general los adaptadores VGA soportan el modo texto tanto en blanco y negro como en color, aunque el modo monocromo, casi nunca es utilizado. En blanco y negro en casi todos los adaptadores VGA modernos lo hacen con texto en color gris sobre fondo negro en el modo de color. Los monitores VGA monocromo se vendieron destinados principalmente para aplicaciones de texto, pero la mayoría de ellos trabajan de manera adecuada por lo menos con un adaptador VGA en el modo de color. De vez en cuando una conexión defectuosa entre un monitor moderno y una tarjeta de vídeo VGA causará que la la tarjeta detecte el monitor como en monocromo, y de esta forma, la BIOS y la secuencia de arranque inicial aparezcan en escala de grises. Por lo general, una vez que los controladores de la tarjeta de vídeo se han cargado (por ejemplo, mediante el arranque del sistema operativo) se sobrecargarán esta detección y el monitor volverá a color. En el modo de texto en color, cada carácter de la pantalla está, en realidad, representado por dos bytes. El menor, es el carácter real para el actual conjunto de caracteres, y el superior, o atributo byte es un campo de bit utilizado para seleccionar los diferentes atributos de vídeo, como el color, el parpadeo, el conjunto de caracteres, etc. Este esquema par-byte es una de las características que heredó en última instancia VGA de CGA.

Paleta de colores de VGA
El sistema de color VGA es compatible con los adaptadores EGA y CGA, y añade otro nivel de configuración en la parte superior. CGA fue capaz de mostrar hasta 16 colores, y EGA amplió éste permitiendo cada uno de los 16 colores que se elijan de una paleta de colores de 64 (estos 64 colores se componen de dos bits para el rojo, verde y azul: dos bits × tres canales = seis bits = 64 valores diferentes). VGA extiende aún más las posibilidades de este sistema mediante el aumento de la paleta EGA de 64 entradas a 256 entradas. Dos bloques de más de 64 colores con tonos más oscuros progresivamente se añadieron, a lo largo de 8 entradas "en blanco" que se fijaron a negro. Además de la ampliación de la paleta, a cada una de las 256 entradas se podía asignar un valor arbitrario de color a través de la DAC VGA. La BIOS EGA sólo permitió 2 bits por canal para representar a cada entrada, mientras que VGA permitía 6 bits para representar la intensidad de cada uno de los tres primarios (rojo, azul y verde). Esto proporcionó un total de 63 diferentes niveles de intensidad de rojo, verde y azul, resultando 262144 posibles colores, cualquiera 256 podrían ser asignado a la paleta (y, a su vez, de los 256, cualquiera 16 de ellos podrían ser mostradas en modos de vídeo CGA). Este método permitió nuevos colores que se utilizarán en los modos gráficos EGA y CGA, proporcionando un recordatorio de cómo los diferentes sistemas de paleta se establecen juntos. Para definir el texto de color a rojo muy oscuro en el modo de texto, por ejemplo, tendrá que ser fijado a uno de los colores CGA (por ejemplo, el color por defecto, n º 7: gris claro.) Este color luego se mapea a uno la paleta EGA - en el caso del color 7 de CGA, se mapea a la entrada 42 de EGA. El DAC VGA debe ser configurado para cambiar de color 42 a rojo oscuro, y luego de inmediato cualquier cosa que aparece en la pantalla a la luz de gris (color CGA 7) pasará a ser de color rojo oscuro. Esta función se utiliza a menudo en juegos DOS de 256 colores. Mientras que los modos CGA y EGA compatibles permitían 16 colores para ser mostrados de una vez, otros modos VGA, como el ampliamente utilizado modo 13h, permitía que las 256 entradas de la paleta se mostraran en la pantalla al mismo tiempo, y así en estos modos cualquier 256 colores podrían ser vistos de los 262144 colores disponibles.

« Última modificación: Marzo 31, 2009, 05:21:23 por Ariel » En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« Respuesta #2 : Marzo 31, 2009, 05:16:41 »

¿Cuales serian las especificaciones minimas de una placa hogareña que pueda utilizarse con un monitor VGA?

Para mi, estaria bien una resolucion de 640x480 con 8 colores (2 bits de R, 2 de G y 2 de B: 2x2x2 = 8 colores).
En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
Bruno10
Administradores
PIC12F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 470


Jojojojo


WWW
« Respuesta #3 : Marzo 31, 2009, 06:17:36 »

Tengo una saber electronica que aparece un circuito generador de barras y ese cosas para monitor con un pic16f84, pero nunca publicaron el .hex, fue mas bien como un "te muestro el circuito , gastamos hojas de la revista ( 2 numeros fueron ) en publicarlo pero si lo queres pone la moneda ( porque el autor lo vendia armado  Evil )"

Si queres lo busco y lo escaneo pero si en hex no sirve de mucho
Saludos
En línea

Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« Respuesta #4 : Marzo 31, 2009, 06:30:56 »

Te lo agradezco. Pero con PIC -> TV hay varios proyectos publicos. Hay incluso juegos de Tetris y cosas asi. El problema es que al no darle el "cuero", la resolucion es pobre. Suelen verse 40 o 60 puntos por unos 25 o algo asi. Eso es insuficiente para texto. Y tampoco funcionaria con un monitor comun.

Mi idea es usar un monitor VGA (algun dia) para ver textos o imagenes enviadas desde el pic. Se que no tengo los conocimientos suficientes hoy, pero no me rindo :)
En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
lmtreser
Administradores
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 730



WWW
« Respuesta #5 : Abril 01, 2009, 12:31:49 »

No sé si es realmente lo que buscas, pero este proyectito lo tengo andando de maravillas:




* monitor.jpg (70.74 KB - descargado 361 veces.)
* diagrama.jpg (40.44 KB - descargado 364 veces.)
En línea

Visita Automatismos Mar del Plata!
http://automatismos-mdq.com.ar/
Electrónica en Red | Tienda
http://electronicaenred.com.ar/
lmtreser
Administradores
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 730



WWW
« Respuesta #6 : Abril 01, 2009, 12:33:58 »

Y aquí va una breve explicación y el HEX para el PIC.

* Generador de barras.zip (121.39 KB - descargado 41 veces.)
En línea

Visita Automatismos Mar del Plata!
http://automatismos-mdq.com.ar/
Electrónica en Red | Tienda
http://electronicaenred.com.ar/
Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« Respuesta #7 : Abril 01, 2009, 07:34:42 »

Excelente! :)
Eso es lo que me referia. Pero estoy seguro que con ese micro/circuito/soft no podes hacer 640 barras...a lo sumo podrás hacer un par de docenas.

A mi me da vueltas la idea de tener texto legible o menues con iconos mas o menos decentes, algo como las viejas computadoras que se conectaban a un tele. Seria fantastico tener un proyecto con un LCD de 2x16 y un conector VGA....y que cuando necesites ver un grafico de los datos que registró o algo asi, le conectes el monitor de la PC y los veas en grande ¿No?  bang
En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
Meta
PIC12F
**
Desconectado Desconectado

Mensajes: 426


« Respuesta #8 : Abril 01, 2009, 09:21:24 »

Quizás esta web les pueda servir a alguien.

Código:
;MODO 0 --> MUESTRA UNA PANTALLA DE (X,Y) 20 x 8 CARÁCTERES
;MODO 1 --> MUESTRA UNA PANTALLA DE (X,Y) 7 x 11 CARÁCTERES
;TANTO EL MODO O COMO EL MODO 1 DISPONEN DE 31 CARÁCTERES
;DE 8x8 PIXELS INDEPENDIENTES PARA CADA MODO DE VIDEO.

;PARA CAMBIAR EL MODO DE VIDEO SE DEBE CAMBIAR EL VALOR DE
;LA ETIQUETA MODO_PANT, LOS VALORES QUE ACEPTA SON 0 Y 1
;0=MODO DE VIDEO 0(20x8 CARÁCTERES) Y MODO DE VIDEO=1(7x11 CARÁCTERES)

;EL MODO 0 UTILIZA PARTE DE LOS REGISTROS DE MEMORIA DE LOS BANCOS 0 Y 1 DEL PIC,
;LA PANTALLA EN MODO 0 ESTÁ DIVIDIDA EN DOS PARTES, LA PARTE 0(PARTE SUPERIOR DE LA PANTALLA)
;QUE CONTIENE 80 REGISTROS DE MEMORIA DEL BANCO 0 Y LA PARTE 1(PARTE INFERIOR DE LA PANTALLA),
;QUE CONTIENE OTROS 80 REGISTROS DE MEMORIA, PERO DEL BANCO1

;EL MODO 1 UTILIZA 77 REGISTROS DE MEMORIA DEL BANCO 0

;LA MAYORIA DE LOS CARÁCTERES GRÁFICOS QUE REPRESENTA EL PROGRAMA
;EN LA TV HAN SIDO COPIADOS DEL MICROORDENADOR SINCLAIR ZX81

;------------------------------------------------------------------------------
;CONFIGURACIÓN, REGISTROS Y ETIQUETAS DEL PIC

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_HS_OSC&_BODEN_OFF&_LVP_OFF
list p=16f877A
#include p16f877A.inc

LONG_X EQU .20; NUM. MAX. DE CARÁCTERES DE FILA EN MODO 0
LONG_Y EQU .8; NUM. MAX. DE LÍNEAS DE UN CARÁCTER EN MODO 0
CHARMAXXY EQU .4; NUM. MAX DE CARÁCTERES DE COLUMNA EN MODO 0

LONGX_MODE1 EQU .7; NUM. MAX. DE CARÁCTERES DE FILA EN MODO 1
LONGY_MODE1 EQU .8; NUM. MAX DE LÍNEAS DE UN CARÁCTER EN MODO 1
CHARMAXY_MODE1 EQU .11; NUM. MAX. DE CARÁCTERES DE COLUMNA EN MODO 1


;REGISTROS DE USO PARA EL PROGRAMA
CBLOCK 20H
CONT,LINE,BYTECHAR,NUMCHAR,NUMCOL
CONTCHAR,LINECHAR,BUFFER,CONTLINEA,FLAGSTV
INICPANT; DIRECCIÓN DE MEMORIA DONDE COMIENZA LA PARTE 0 DE LA PANTALLA EN MODO 0 Y 1
ENDC

PANT2 EQU 0A0H;DIRECCIÓN DE MEMORIA DONDE COMIENZA LA PARTE 1 DE LA PANTALLA EN MODO 0

MODO_PANT EQU .0; 0=PANTALLA EN MODO 0, 1=PANTALLA EN MODO 1



;------------------------------------------------------------------------------


ORG 00H
GOTO START

ORG 05H


;---------------------------JUEGO DE CARÁCTERES--------------------------------

;-------------------------SET 0 DE CARÁCTERES MODO 0---------------------------
BYTEPANT
ADDWF BYTECHAR,W
ADDWF PCL,F
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'; SPACE 0
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'

    RETLW B'00000000'
RETLW B'00111100'
    RETLW B'01000010'
    RETLW B'01000010'
    RETLW B'01111110';A 1
    RETLW B'01000010'
    RETLW B'01000010'
    RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111100'
RETLW B'01000010'
RETLW B'01111100'
RETLW B'01000010';B 2
RETLW B'01000010'
RETLW B'01111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000000'
RETLW B'01000000';C 3
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111000'
RETLW B'01000100'
RETLW B'01000010'
RETLW B'01000010';D 4
RETLW B'01000100'
RETLW B'01111000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'01000000'
RETLW B'01111100'
RETLW B'01000000';E 5
RETLW B'01000000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'01000000'
RETLW B'01111100'
RETLW B'01000000'
RETLW B'01000000';F 6
RETLW B'01000000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000000'
RETLW B'01001110'
RETLW B'01000010';G 7
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01111110'
RETLW B'01000010'
RETLW B'01000010';H 8
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111110'
RETLW B'00001000'
RETLW B'00001000'
RETLW B'00001000';I 9
RETLW B'00001000'
RETLW B'00111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00000010'
RETLW B'00000010'
RETLW B'00000010'
RETLW B'01000010'
RETLW B'01000010';J 10
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000100'
RETLW B'01001000'
RETLW B'01110000'
RETLW B'01001000';K 11
RETLW B'01000100'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000000'
RETLW B'01000000'
RETLW B'01000000'
RETLW B'01000000';L 12
RETLW B'01000000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01100110'
RETLW B'01011010'
RETLW B'01000010';M 13
RETLW B'01000010'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01100010'
RETLW B'01010010';N 14
RETLW B'01001010'
RETLW B'01000110'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';O 15
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111100'
RETLW B'01000010'
RETLW B'01000010';P 16
RETLW B'01111100'
RETLW B'01000000'
RETLW B'01000000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01010010';Q 17
RETLW B'01001010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111100'
RETLW B'01000010';R 18
RETLW B'01000010'
RETLW B'01111100'
RETLW B'01000100'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000000'
RETLW B'00111100';S 19
RETLW B'00000010'
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'11111110'
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00010000';T 20
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';U 21
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';V 22
RETLW B'00100100'
RETLW B'00011000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';W 23
RETLW B'01011010'
RETLW B'00100100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'00100100'
RETLW B'00011000'
RETLW B'00011000';X 24
RETLW B'00100100'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'10000010'
RETLW B'01000100'
RETLW B'00101000'
RETLW B'00010000';Y 25
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'00000100'
RETLW B'00001000'
RETLW B'00010000';Z 26
RETLW B'00100000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'00000010'
RETLW B'00111100';27 NÚMERO "2"
RETLW B'01000000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000110'
RETLW B'01001010'
RETLW B'01010010';28 NÚMERO "0"
RETLW B'01100010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'00000010'
RETLW B'00000100'
RETLW B'00001000';29 NÚMERO "7"
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00000000'

RETLW B'01111100'
RETLW B'10000010'
RETLW B'10011010'
RETLW B'10100010'
RETLW B'10100010';30 COPYRIGHT
RETLW B'10011010'
RETLW B'10000010'
RETLW B'01111100'
;------------------------------------------------------------------------------
NOP
NOP
NOP
;--------------------------SET 1 DE CARÁCTERES MODO1---------------------------
BYTEPANT1
CLRF PCLATH
BSF PCLATH,0
ADDWF BYTECHAR,W
ADDWF PCL,F
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'; SPACE 0
RETLW B'00000000'
RETLW B'00000000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01111110';A 1
RETLW B'01000010'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111100'
RETLW B'01000010'
RETLW B'01111100'
RETLW B'01000010';B 2
RETLW B'01000010'
RETLW B'01111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000000'
RETLW B'01000000';C 3
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111000'
RETLW B'01000100'
RETLW B'01000010'
RETLW B'01000010';D 4
RETLW B'01000100'
RETLW B'01111000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'01000000'
RETLW B'01111100'
RETLW B'01000000';E 5
RETLW B'01000000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'01000000'
RETLW B'01111100'
RETLW B'01000000'
RETLW B'01000000';F 6
RETLW B'01000000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000000'
RETLW B'01001110'
RETLW B'01000010';G 7
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01111110'
RETLW B'01000010'
RETLW B'01000010';H 8
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111110'
RETLW B'00001000'
RETLW B'00001000'
RETLW B'00001000';I 9
RETLW B'00001000'
RETLW B'00111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00000010'
RETLW B'00000010'
RETLW B'00000010'
RETLW B'01000010'
RETLW B'01000010';J 10
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000100'
RETLW B'01001000'
RETLW B'01110000'
RETLW B'01001000';K 11
RETLW B'01000100'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000000'
RETLW B'01000000'
RETLW B'01000000'
RETLW B'01000000';L 12
RETLW B'01000000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01100110'
RETLW B'01011010'
RETLW B'01000010';M 13
RETLW B'01000010'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01100010'
RETLW B'01010010';N 14
RETLW B'01001010'
RETLW B'01000110'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';O 15
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111100'
RETLW B'01000010'
RETLW B'01000010';P 16
RETLW B'01111100'
RETLW B'01000000'
RETLW B'01000000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01010010';Q 17
RETLW B'01001010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111100'
RETLW B'01000010';R 18
RETLW B'01000010'
RETLW B'01111100'
RETLW B'01000100'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00111100'
RETLW B'01000000'
RETLW B'00111100';S 19
RETLW B'00000010'
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'11111110'
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00010000';T 20
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';U 21
RETLW B'01000010'
RETLW B'00111100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';V 22
RETLW B'00100100'
RETLW B'00011000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010'
RETLW B'01000010';W 23
RETLW B'01011010'
RETLW B'00100100'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01000010'
RETLW B'00100100'
RETLW B'00011000'
RETLW B'00011000';X 24
RETLW B'00100100'
RETLW B'01000010'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'10000010'
RETLW B'01000100'
RETLW B'00101000'
RETLW B'00010000';Y 25
RETLW B'00010000'
RETLW B'00010000'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'01111110'
RETLW B'00000100'
RETLW B'00001000'
RETLW B'00010000';Z 26
RETLW B'00100000'
RETLW B'01111110'
RETLW B'00000000'

RETLW B'00000000'
RETLW B'00011000'
RETLW B'00101000'
RETLW B'00001000'
RETLW B'00001000';27 NÚMERO "1"
RETLW B'00001000'
RETLW B'00111110'
RETLW B'00000000'

RETLW B'00011110'
RETLW B'00111111'
RETLW B'00011010'
RETLW B'00011111'
RETLW B'00011110';28 JET SET WILLY(1)
RETLW B'00001100'
RETLW B'00011110'
RETLW B'00111111'

RETLW B'01111111'
RETLW B'11111111'
RETLW B'11111111'
RETLW B'11011110'
RETLW B'00011111';29 JET SET WILLY(2)
RETLW B'00111011'
RETLW B'01100011'
RETLW B'01110011'

RETLW B'10000000'
RETLW B'11000000'
RETLW B'11000000'
RETLW B'11000000'
RETLW B'00000000';30 JET SET WILLY(3)
RETLW B'01000000'
RETLW B'11000000'
RETLW B'10000000'
;------------------------------------------------------------------------------
NOP
NOP
NOP
;------------------------------------------------------------------------------

TEXTO; EL SIGUIENTE TEXTO SE UBICARÁ EN LOS REGISTROS DE MEMORIA DEL BANCO 0
CLRF PCLATH
BSF PCLATH,1
MOVF BYTECHAR,W
ADDWF PCL,F
DT "      videopic      "
DT "                    "
DT "   este programa    "
DT " muestra caracteres "

TEXTO2; EL SIGUIENTE TEXTO SE UBICARÁ EN LOS REGISTROS DE MEMORIA DEL BANCO 1
CLRF PCLATH
BSF PCLATH,1
MOVF BYTECHAR,W
ADDWF PCL,F
DT " en una pantalla de "
DT " tv mediante un pic "
DT "                    "
DT "  ".126,.123,.124,.124,.125," esteban pa  "   

;------------------------INICIALIZACIÓN DE LOS PUERTOS-------------------------
START
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW B'11111110'
MOVWF TRISB
MOVLW B'00000110'
MOVWF ADCON1
MOVLW B'00000110'
MOVWF TRISA
MOVLW B'11010111'
MOVWF TRISC
MOVLW B'00000000'
MOVWF SSPSTAT
BCF STATUS,RP0
CLRF PORTB

;---------RUTINA DE INICIALIZACIÓN Y ENLACE A LOS MODOS DE VIDEO---------------


MOVLW MODO_PANT
MOVWF FLAGSTV
MOVLW B'00100000'
MOVWF SSPCON
CALL BORRAPANT; INSERTA EN LOS REGISTROS DE MEMORIA EL VALOR "0"
CALL CONV_CHAR; CONVIERTE LOS VALORES ASCII DE LOS TEXTOS A VALORES
CALL CONV_CHAR2;PARA QUE PUEDAN SER UTILIZADOS POR EL PROGRAMA
BTFSS FLAGSTV,0
GOTO START_MODE0; PONE LA PANTALLA EN MODO 0
GOTO START_MODE1; PONE LA PANTALLA EN MODO 1



;----------------------------------MODO DE VIDEO 0-----------------------------
PAUSA2US
NOP
NOP
NOP
NOP
NOP
NOP
RETURN

STARTMODE0
NOP; ESTOS DOS NOP SON PARA SINCRONIZAR LOS 20 PRIMEROS
NOP; CARACTERES CON EL RESTO DE LINEAS
MODE0
CLRF SSPCON
CLRF PORTC
BCF PORTA,0; INICIO DEL PULSO DE SINCRONISMO HORIZONTAL
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF PORTA,0; FIN DEL PULSO DE SINCRONISMO HORIZONTAL
CALL PAUSA4US
CALL PAUSA4US

CALL PAUSA2US
BSF SSPCON,5
NOP
MOVF INDF,W; COMIENZO DE LOS 20 CARÁCTERES
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF SSPBUF,5
CALL PAUSA4US
CALL PAUSA2US
NOP
NOP
NOP
NOP
NOP
NOP
INCF BYTECHAR,F
DECFSZ NUMCHAR,F; CARACTERES 8*8 COMPLETOS?
GOTO NOCOMPLETOS
CLRF BYTECHAR
MOVLW LONG_Y
MOVWF NUMCHAR
DECFSZ NUMCOL,F;COLUMNA COMPLETA DE CARACTERES?
GOTO MODE0
NOP; COMIENZO DE LA SEGUNDA PARTE DE LA PANTALLA
NOP
MODE0_ZONA2
CLRF SSPCON
CLRF PORTC
BCF PORTA,0; INICIO SYNC
BTFSS FLAGSTV,0
GOTO REG_ZONA2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SIGUE_ZONA2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF PORTA,0; FIN SYNC
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA2US
BSF SSPCON,5
NOP
MOVF INDF,W; COMIENZO DE LOS 20 CARACTERES
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT



Saludos.
En línea
Meta
PIC12F
**
Desconectado Desconectado

Mensajes: 426


« Respuesta #9 : Abril 01, 2009, 09:21:52 »

Continuación del código.

Código:
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT
MOVWF SSPBUF
INCF FSR,F
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF SSPBUF,5
CALL PAUSA4US
CALL PAUSA2US
NOP
NOP
NOP
NOP
NOP
NOP
INCF BYTECHAR,F
DECFSZ NUMCHAR,F; CARACTERES 8*8 COMPLETOS?
GOTO NOCOMPLETOS_ZONA2
CLRF BYTECHAR
MOVLW LONG_Y
MOVWF NUMCHAR
DECFSZ NUMCOL,F;COLUMNA COMPLETA DE CARACTERES?
GOTO MODE0_ZONA2
RETURN

NOCOMPLETOS_ZONA2
NOP
MOVLW LONG_X
SUBWF FSR,F
GOTO MODE0_ZONA2

REG_ZONA2
MOVLW CHARMAXXY
MOVWF NUMCOL
MOVLW PANT2
MOVWF FSR
BSF FLAGSTV,0
GOTO SIGUE_ZONA2

NOCOMPLETOS
NOP
MOVLW LONG_X
SUBWF FSR,F
GOTO MODE0


;---------------------------SINCRONISMO VERTICAL-------------------------------
PAUSA4P5
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETURN

PAUSA27P4
CALL PAUSA4P5
CALL PAUSA4P5
CALL PAUSA4P5
CALL PAUSA4P5
CALL PAUSA4P5
CALL PAUSA4P5
RETURN

PIGUALADORES
BCF PORTA,0
CALL PAUSA27P4
BSF PORTA,0
CALL PAUSA4P5
BCF PORTA,0
CALL PAUSA27P4
BSF PORTA,0
CALL PAUSA4P5
BCF PORTA,0
CALL PAUSA27P4
BSF PORTA,0
CALL PAUSA4P5
BCF PORTA,0
CALL PAUSA27P4
BSF PORTA,0
CALL PAUSA4P5
BCF PORTA,0
CALL PAUSA27P4
BSF PORTA,0
CALL PAUSA4P5
BCF PORTA,0
CALL PAUSA27P4
BSF PORTA,0
CALL PAUSA4P5
RETURN

PVERTICALESALM
BSF PORTA,0
CALL PAUSA27P4
BCF PORTA,0
CALL PAUSA4P5
BSF PORTA,0
CALL PAUSA27P4
BCF PORTA,0
CALL PAUSA4P5
BSF PORTA,0
CALL PAUSA27P4
BCF PORTA,0
CALL PAUSA4P5
BSF PORTA,0
CALL PAUSA27P4
BCF PORTA,0
CALL PAUSA4P5
BSF PORTA,0
CALL PAUSA27P4
BCF PORTA,0
CALL PAUSA4P5
BSF PORTA,0
CALL PAUSA27P4
BCF PORTA,0
CALL PAUSA4P5
RETURN

SYNCVERT
CLRF SSPCON
CLRF PORTC
CALL PIGUALADORES
CALL PVERTICALESALM
CALL PIGUALADORES
RETURN


PAUSA4US
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETURN


;----------------------------------LINEA NEGRA---------------------------------
LINEA64US
CLRF SSPCON
CLRF PORTC
BCF PORTA,0
CALL PAUSA4US
BSF PORTA,0
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETURN


;---------------------GENERACION DE UN CUADRO DE TV EN MODO 0------------------
START_MODE0
PANTALLA
CLRF FLAGSTV
CLRF BYTECHAR
MOVLW CHARMAXXY
MOVWF NUMCOL
MOVLW LONG_Y
MOVWF NUMCHAR
MOVLW INICPANT
MOVWF FSR
MOVLW .124
MOVWF LINE
NL1 CALL LINEA64US
DECFSZ LINE,F
GOTO NL1
CALL STARTMODE0
MOVLW .124
MOVWF LINE
NL3 CALL LINEA64US
DECFSZ LINE,F
GOTO NL3
BCF PORTA,0
CALL PAUSA4US
BSF PORTA,0
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL SYNCVERT
GOTO PANTALLA

;-----------------GENERACION DE UN CUADRO DE TV EN MODO 1----------------------

START_MODE1
MOVLW B'00100001'
MOVWF SSPCON
PANTALLA_MODE1
CLRF BYTECHAR
MOVLW CHARMAXY_MODE1
MOVWF NUMCOL
MOVLW LONGY_MODE1
MOVWF NUMCHAR
MOVLW INICPANT
MOVWF FSR
MOVLW .30
MOVWF LINE
NM1 CALL LINEA64US
DECFSZ LINE,F
GOTO NM1
CALL MODE1
MOVLW .18
MOVWF LINE
NM3 CALL LINEA64US
DECFSZ LINE,F
GOTO NM3
BCF PORTA,0
CALL PAUSA4US
BSF PORTA,0
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL PAUSA4US
CALL SYNCVERT
GOTO PANTALLA_MODE1


;------------------------------MODO DE VIDEO 1---------------------------------

MODE1
CLRF SSPCON
CLRF PORTC
BCF PORTA,0; INICIO DEL PULSO DE SINCRONISMO HORIZONTAL
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF PORTA,0; FIN DEL PULSO DE SINCRONISMO HORIZONTAL
CALL PAUSA4US
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVLW B'00100001'
MOVWF SSPCON
MOVF INDF,W; COMIENZO DE LOS 7 CARACTERES
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F; FIN DE LOS 7 CARACTERES
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLRF SSPBUF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
INCF BYTECHAR,F
NOP
NOP
NOP
MOVLW LONGX_MODE1
SUBWF FSR,F
DECF BYTECHAR,F
NOP
NOP
;REPITE LA LINEA
CLRF SSPCON
CLRF PORTC
BCF PORTA,0; INICIO DEL SINCRONISMO HORIZONTAL
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF PORTA,0; FIN DEL SINCRONISMO HORIZONTAL
CALL PAUSA4US
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVLW B'00100001'
MOVWF SSPCON
MOVF INDF,W; COMIENZO DE LOS 7 CARACTERES
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F; FIN DE LOS 7 CARACTERES
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLRF SSPBUF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
INCF BYTECHAR,F
NOP
NOP
NOP
MOVLW LONGX_MODE1
SUBWF FSR,F
DECF BYTECHAR,F
NOP
NOP
;REPITE LA LINEA
CLRF SSPCON
CLRF PORTC
BCF PORTA,0; INICIO DEL SINCRONISMO HORIZONTAL
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF PORTA,0; FIN DEL SINCRONISMO HORIZONTAL
CALL PAUSA4US
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVLW B'00100001'
MOVWF SSPCON
MOVF INDF,W; COMIENZO DE LOS 7 CARACTERES
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F
MOVF INDF,W
CALL BYTEPANT1
MOVWF SSPBUF
CALL DELAY_MODE1
INCF FSR,F; FIN DE LOS 7 CARACTERES
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLRF SSPBUF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
INCF BYTECHAR,F
DECFSZ NUMCHAR,F; CARACTERES 8*8 COMPLETOS?
GOTO NOCOMPLETOS_MODE1
CLRF BYTECHAR
MOVLW LONGY_MODE1
MOVWF NUMCHAR
DECFSZ NUMCOL,F;COLUMNA COMPLETA DE CARACTERES?
GOTO MODE1
RETURN

NOCOMPLETOS_MODE1
NOP
MOVLW LONGX_MODE1
SUBWF FSR,F
GOTO MODE1

DELAY_MODE1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETURN
;------------------------------------------------------------------------------

;PONE A "0" LOS REGISTROS DE MEMORIA DEL BANCO 0 Y 1 ,QUE UTILIZA
;EL PROGRAMA PARA REPRESENTAR LOS CARACTERES EN PANTALLA.
BORRAPANT
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW .80
MOVWF CONT
MOVLW INICPANT
MOVWF FSR
BORRA
MOVLW B'00000000'
MOVWF INDF
INCF FSR,F
DECFSZ CONT,F
GOTO BORRA
BORRAPANT2
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW .80
MOVWF CONT
MOVLW PANT2
MOVWF FSR
BORRA2
MOVLW B'00000000'
MOVWF INDF
INCF FSR,F
DECFSZ CONT,F
GOTO BORRA2
RETURN


;------------------------------------------------------------------------------

;CONVIERTE LOS CARACTERES ASCII DE LOS TEXTOS A CARÁCTERES PARA QUE PUEDAN SER UTILIZADOS POR EL PROGRAMA
CONV_CHAR
MOVLW .80; NUMERO DE CARACTERES A MOSTRAR EN EL BANCO0
MOVWF CONT
MOVLW INICPANT
MOVWF FSR
CLRF BYTECHAR; CONTIENE EL PUNTERO DE LA POSICION DE TEXTO
OTRAVEZ
CALL TEXTO
MOVWF INDF
MOVLW .96
MOVWF LINE
MOVF LINE,W
SUBWF INDF,F
BCF STATUS,C
RLF INDF
BCF STATUS,C
RLF INDF
BCF STATUS,C
RLF INDF
INCF BYTECHAR,F
INCF FSR,F
DECFSZ CONT,F
GOTO OTRAVEZ
CLRF PCLATH
RETURN

CONV_CHAR2
MOVLW .80; NUMERO DE CARACTERES A MOSTRAR EN EL BANCO1
MOVWF CONT
MOVLW PANT2
MOVWF FSR
CLRF BYTECHAR; CONTIENE EL PUNTERO DE LA POSICION DE TEXTO
OTRAVEZ2
CALL TEXTO2
MOVWF INDF
MOVLW .96
MOVWF LINE
MOVF LINE,W
SUBWF INDF,F
BCF STATUS,C
RLF INDF
BCF STATUS,C
RLF INDF
BCF STATUS,C
RLF INDF
INCF BYTECHAR,F
INCF FSR,F
DECFSZ CONT,F
GOTO OTRAVEZ2
CLRF PCLATH
RETURN

END
En línea
Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« Respuesta #10 : Abril 01, 2009, 09:31:06 »

Hola Meta!
Buen aporte  bang ¿Tienes el circuito? Supongo que se debe parecer al de más arriba, pero como de ASM no entiendo ni "J", no lo puedo deducir  Insultos

Si es un proyecto libre, me gustraria meterlo en el Wiki  rolleyes2
En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
Meta
PIC12F
**
Desconectado Desconectado

Mensajes: 426


« Respuesta #11 : Abril 01, 2009, 10:14:17 »

Hola de nuevo.

No se si es libre, pero es de una persona que no tengo nada que ver. Me olvidé poner su Web arriba.







Los códigos ASM y HEX lo puedes descargar en el enlace de abajo.

Espero que les pueda ayudar esa web, repito que no es mía, sólo doy información para ayudar a este tema.

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

Un cordial saludo.
En línea
ZeK005
Administrator
PIC18F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1552


http://www.GliderByte.com.ar


WWW
« Respuesta #12 : Abril 01, 2009, 12:26:44 »

yo tengo el proyecto de Richar Gungee para mostrar señales en un televisor. Sirve de algo?
En línea

http://www.GliderByte.com.ar - Security Information and Development Team
Ariel
Global Moderator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5207



WWW
« Respuesta #13 : Abril 01, 2009, 01:08:24 »

Todo sirve :)
Por lo pronto, acabo de desoldar un conecto ISA para finalmente (si puedo librarme de dos o tres placas que tengo que hacer "para ayer") probar el monitor Hercules conectado a un PIC.
En línea

Busco ordenadores antiguos: Commodore, Sinclair, Amstrad, Atari, etc. Si sabes de alguno....¿me avisas? Tongue
Meta
PIC12F
**
Desconectado Desconectado

Mensajes: 426


« Respuesta #14 : Abril 01, 2009, 06:16:11 »

No sabía que carecía de conocimientos del ASM al igual que yo desconozco el C del PIC.
En línea
Páginas: 1 2   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.9 | SMF © 2006-2009, Simple Machines LLC XHTML 1.0 válido! CSS válido!

Página creada en 0.381 segundos con 22 consultas. (Pretty URLs adds 0.026s, 2q)