Autor Tema: Generador de video VGA con PIC 16F84A  (Leído 9523 veces)

IAO

  • PIC10F
  • *
  • Mensajes: 3
Re: Generador de video VGA con PIC 16F84A
« Respuesta #15 en: Mayo 02, 2016, 04:09:57 pm »
Okis gracias por la información sr. HJ.

Si estoy claro que armaste ese proyecto hace años.
Lo que pretendo es sin tener que reinventar todo, aprovechar lo que está hecho y continuar desde allí.

En realidad más que para una reparación lo requiero para comprobación rápida de monitores.
Muchas de esos otros modos grilla, damero, etc. son de poca o ninguna utilidad para mi objetivo.
No le estoy quitando su valor como herramienta, solo digo que para mis propositos no me es util.

Bueno ya vere el link que me aportas y cuando tenga algo más lindo lo comparto aquí o en un nuevo
post haciendo referencia a este post que de aquí es donde se origina esta derivación tu proyecto.

Un mega abrazo y un hiper saludo para todos.




 

IAO

  • PIC10F
  • *
  • Mensajes: 3
Re: Generador de video VGA con PIC 16F84A
« Respuesta #16 en: Mayo 09, 2016, 10:30:58 am »
Quiero decir que armé el circuito del sr. HJ con un PIC 16F84A-20P
con cristal 12Mhz hace como 30 dias atrás. Y de verdad funciona perfecto.
Siempre supe que a una velocidad de 20Mhz sería mejor.
Entiendo que para el momento era lo que se conseguía.

Solo pretendo enriquecer el hilo con algunos datos actuales, porque hay
mucho material para adicionar a este hilo.

Todo este trabajo y creditos son del sr. HJ, (Javier). No pretendo quitarle
creditos a su trabajo. Solo quiero adicionar más datos.

En esta página (en ingles) vi un interesante proyecto a 20Mhz.
Citar
http://www.pyroelectro.com/projects/audio_video_tester/index.html
Haciendo unas pequeñas modificaciones al programa original con el circuito aportado por
el sr. Javier, funciona perfecto. De verdad verdad.

Primero modifiqué el programa para que trabajara a 12Mhz con el circuito de HJ y funcionó bien.
Código: [Seleccionar]

list      p=16F84A, f=INHX32   ; list directive to define processor
#include <p16F84A.inc>         ; processor specific variable definitions

__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC

;BLUE  is PORTA bit 0
;RED   is PORTA bit 1
;GREEN is PORTA bit 2
;HSYNC is PORTB bit 0
;VSYNC is PORTB bit 1
;Cristal 12Mhz.

;Delay Counters For Delay Functions And
;For Red, Green and Blue Color Routines
delay_cnt EQU 0x3F
counter1 EQU 0x2F
counter2 EQU 0x1F
counter3 EQU 0x0F

ORG     0x000
GOTO    start


;************************************************
;This macro alows you to set the data color to be
;displayed for the whole horizontal line
;;************************************************
Delay20mkS_X MACRO Color
BSF PORTA, Color ;1
CALL Delay10mkS  ;33 son 32 instruciones
CALL Delay1mkS ;38 son 5 instruciones
NOP ;39 una instrucion 
NOP ;40
BCF PORTA, Color    ;41 ;--  41*0,33=[13,53]
ENDM    ;
;*************************************

;************************************************
;This is the horizontal SYNC routine. It uses the
;Delay20mks macro to output color for the current
;horizontal line
;************************************************
HSYNC_short_X MACRO Color_Val
Delay20mkS_X Color_Val ;[13.53uS]

;;;Front porch es antes de imprimir las barras. El espacio negro en este caso.
CALL Delay1mkS ;1.65uS -- Front porch 4.95uS
CALL Delay1mkS ;3.35uS
CALL Delay1mkS ;4.95uS --  Subtotal [4.95uS]

BCF PORTB,0 ;0.33uS -- End Front porch
CALL Delay1mkS ;1.98uS -- Sync pulse lenght 3.2uS
CALL Delay1mkS ;3.63uS
NOP ;3.96 []
NOP ;4.29 []
NOP ;4.62 []
NOP ;4.95
BSF PORTB,0 ;5.28 [] --  Subtotal [5.28uS]

CALL Delay1mkS ;1.65uS -- Back Porch 2.2 uS
NOP ;1.98uS
NOP ;2.31uS  --  Subtotal [2.31uS]

ENDM ;__Total uS:13.53+4.95+5.28+2.31=[26.07]
;*************************************

;;;===================================
Delay1mkS:  ;1,2 cycles  a 0,33 me esta dando 1,65uS no 1seg
NOP ;3
RETLW 0x00  ;4,5      5*0,33=1,65 

;;;===================================
Delay10mkS:  ;1,2 cycles   a 0,33 me esta dando 10.56uS
MOVLW D'5' ;10 ;3
MOVWF delay_cnt ;4

Dly1: NOP ;5
DECFSZ delay_cnt, 1 ;6....
GOTO Dly1 ;....25  43-6=37   37/2=18.5+6=25

NOP ;26
NOP ;27
NOP ;28
NOP ;29
NOP ;30
retlw 0x00  ;31,32 [32]   32*0,33=10.56

;;;===================================
;;;===================================
HSYNC:;1,2
CALL Delay10mkS ;10.56uS ;Active video time [21.12uS]
CALL Delay10mkS ;21.12uS

;;;Front porch es antes de imprimir las barras. El espacio negro en este caso.
CALL Delay1mkS ;1.65uS -- Front porch 4.95uS
CALL Delay1mkS ;3.35uS
CALL Delay1mkS ;4.95uS --  Subtotal [4.95us]

BCF PORTB,0 ;0.33uS -- End Front porch
CALL Delay1mkS ;1.98uS -- Sync pulse lenght 3.2uS
NOP ;2.64uS
NOP ;2.97uS
NOP ;3.30uS
BSF PORTB,0 ;3.63uS -- Subtotal [3.3uS]

NOP ;0.33uS -- Back Porch 2.2 uS
NOP ;0.66uS
NOP ;0.99uS
NOP ;1.32uS
NOP ;1.65uS

RETLW 0x00 ;2.31uS -- Tiene un Subtotal de [2,31uS]
;__Total uS:[21.12+4.95+3.3+2.31= 31.68]
;;;***********************************

;;;===================================
;;;===================================
start:
MOVLW 0x00
TRIS PORTA
MOVLW 0x00 ;
MOVWF PORTA

MOVLW 0x00
TRIS PORTB
MOVLW 0x00
MOVWF PORTB

Top:
MOVLW D'200'
MOVWF counter1 ;0x2F
MOVLW D'200'
MOVWF counter2 ;0x1F
MOVLW D'200'
MOVWF counter3 ;0x0F

;;;200 Horizontal Lines
HSync1:
HSYNC_short_X 1 ;Para el Rojo 1
DECFSZ counter1,1 ;[2.97]
GOTO HSync1 ;[3.63]
NOP ;[3.96] Si le quito estos NOP se me corre una linea en los colores.

;;;200 Horizontal Lines
HSync2:
HSYNC_short_X 2 ;Para el verde 2
DECFSZ counter2,1 ;
GOTO HSync2 ;
NOP

;;;200 Horizontal Lines
HSync3:
HSYNC_short_X 0 ;Para el Azul 0
DECFSZ counter3,1 ;
GOTO HSync3 ;
NOP

;;;Vertical Front porch
NOP ;0.33uS -- Back Porch 0.66uS
BSF PORTB,1 ;0.66uS
;;;_____End Vertical Front porch

;;;VERTIcal Sync
CALL HSYNC ;1
CALL HSYNC ;2
CALL HSYNC ;3

NOP ;0.33uS -- Back Porch 0.66uS
BCF PORTB,1 ;0.66uS
;;;_____End Vertical Sync

GOTO Top

END                       ; directive 'End of program'



Luego cambiaré el cristal a 20Mhz, hice algunos cambios al programa ORIGINAL para los 20Mhz.
Código: [Seleccionar]

list      p=16F84A, f=INHX32   ; list directive to define processor
#include <p16F84A.inc>         ; processor specific variable definitions

__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC

;BLUE  is PORTA bit 0
;RED   is PORTA bit 1
;GREEN is PORTA bit 2
;HSYNC is PORTB bit 0
;VSYNC is PORTB bit 1
;Cristal 20Mhz.

;Delay Counters For Delay Functions And
;For Red, Green and Blue Color Routines
delay_cnt EQU 0x3F
counter1 EQU 0x2F
counter2 EQU 0x1F
counter3 EQU 0x0F

ORG     0x000
GOTO    start

HSYNC_10 MACRO
CALL HSYNC  ;1
CALL HSYNC  ;2
CALL HSYNC  ;3
CALL HSYNC  ;4
CALL HSYNC  ;5
CALL HSYNC  ;6
CALL HSYNC  ;7
CALL HSYNC  ;8
CALL HSYNC  ;9
CALL HSYNC  ;10
ENDM

;*************************************************
;This macro alows you to set the data color to be
;displayed for the whole horizontal line
;;************************************************
Delay20mkS_X MACRO Color
BSF PORTA, Color ;1
NOP ;2
NOP ;3
NOP ;4
NOP ;5
NOP ;6
NOP ;7
CALL Delay10mkS  ;57
CALL Delay1mkS ;62
CALL Delay1mkS ;67
CALL Delay1mkS ;72
CALL Delay1mkS ;77
CALL Delay1mkS ;82
CALL Delay1mkS ;87
CALL Delay1mkS ;92
NOP ;93
NOP ;94
NOP ;95
NOP ;96
NOP ;97
NOP ;98
NOP ;99
BCF PORTA, Color ;100
ENDM ;[100 * 0.2uS = 20uS]
;************************************************

;************************************************
;This is the horizontal SYNC routine. It uses the
;Delay20mks macro to output color for the current
;horizontal line
;************************************************
HSYNC_short_X MACRO Color_Val
Delay20mkS_X Color_Val ;20us

NOP ;0.2uS --Front porch 1.00uS
NOP ;0.4uS
NOP ;0.6uS
NOP ;0.8
NOP ;1.0uS

BCF PORTB,0 ;0.2uS --End Front porch
CALL Delay1mkS ;1.2uS --Sync pulse lenght 3.2uS
CALL Delay1mkS ;2.2uS
NOP ;2.4uS
NOP ;2.6uS
NOP ;2.8uS
NOP ;3.0uS
BSF PORTB,0 ;3.2uS

CALL Delay1mkS ;1uS -- Back Porch 2.2 uS
NOP ;1.2uS
NOP ;1.4uS [Total 20+1+3.2+2.2 = 26.4uS]
ENDM
;*************************************

;;;===================================
Delay1mkS:  ;1,2 cycles
NOP ;3
RETLW 0x00  ;4,5 [Total 5 * 0.2 = 1uS]

;;;===================================
Delay10mkS:  ;1,2 cycles
MOVLW D'10' ;3
MOVWF delay_cnt ;4

Dly1: NOP ;5
DECFSZ delay_cnt, 1 ;6....
GOTO Dly1 ;.....43

NOP ;44
NOP ;45
NOP ;46
NOP ;47
NOP ;48

retlw 0x00  ;49,50        [Total en uS: 50 x 0.2 = 10uS]

;;;===================================
; Delay20mkS:    ;1,2 cycles
; MOVLW D'22' ;3
; MOVWF delay_cnt ;4

; Dly2: NOP ;5
; DECFSZ delay_cnt, 1 ;6....
; GOTO Dly2 ;...91

; NOP ;92
; NOP ;93
; NOP ;94
; NOP ;95
; NOP ;96
; NOP ;97
; NOP ;98

; RETLW 0x00  ;99,100

;;;===================================
HSYNC: ;1,2
CALL Delay10mkS ;10uS ;Active video time 20uS
CALL Delay10mkS ;20uS

;;;;Calling Hsync Took: ;0.4uS
NOP ;0.6uS -- Front porch 1.00uS
NOP ;0.8uS
NOP ;1.0uS

BCF PORTB,0 ;0.2uS -- End Front porch
CALL Delay1mkS ;1.2uS -- Sync pulse lenght 3.2uS
CALL Delay1mkS ;2.2uS
NOP ;2.4uS
NOP ;2.6uS
NOP ;2.8uS
NOP ;3.0uS
BSF PORTB,0 ;3.2uS

CALL Delay1mkS ;1.0uS -- Back Porch 2.2 uS
NOP ;1.2us
NOP ;1.4us
NOP ;1.6us
RETLW 0x00 ;2.0us
;*************************************

;;;===================================
start:
MOVLW 0x00
TRIS PORTA
MOVLW 0x00 ;
MOVWF PORTA

MOVLW 0x00
TRIS PORTB
MOVLW 0x00
MOVWF PORTB

MOVLW D'200'
MOVWF counter1
MOVLW D'200'
MOVWF counter2
MOVLW D'200'
MOVWF counter3
MOVLW D'200'
MOVWF delay_cnt

Top:

;;;200 Horizontal Lines
HSync1:
HSYNC_short_X 1 ;Para el Rojo 1
DECFSZ counter1,1 ;1.8uS
GOTO HSync1 ;2.2uS
NOP

;;;200 Horizontal Lines
HSync2:
HSYNC_short_X 2 ;Para el verde 2
DECFSZ counter2,1 ;1.8uS
GOTO HSync2 ;2.2uS
NOP

;;;200 Horizontal Lines
HSync3:
HSYNC_short_X 0 ;Para el Azul 0
DECFSZ counter3,1 ;1.8uS
GOTO HSync3 ;2.2uS
NOP

;;;Vertical Front porch
CALL Delay10mkS ;10uS ;Active video time 20uS
CALL Delay10mkS ;20uS

NOP ;0.2uS -- Front porch 1.00uS
NOP ;0.4uS
NOP ;0.6uS
NOP ;0.8
NOP ;1.0uS

BCF PORTB,0 ;0.2uS -- End Front porch
CALL Delay1mkS ;1.2uS -- Sync pulse lenght 3.2uS
CALL Delay1mkS ;2.2uS
NOP ;2.4uS
NOP ;2.6uS
NOP ;2.8uS
NOP ;3.0uS
BSF PORTB,0 ;3.2uS

CALL Delay1mkS ;1uS -- Back Porch 2.2 uS
NOP ;1.2uS
NOP ;1.4uS
NOP ;1.6uS
NOP ;1.8uS
NOP ;2.0uS
BSF PORTB,1 ;2.2uS
;;;_____End Vertical Front porch

;;;VERTIcal Sync
CALL HSYNC ;1
CALL HSYNC ;2
CALL HSYNC ;3
CALL Delay10mkS ;10uS ;Active video time 20uS
CALL Delay10mkS ;20uS

NOP ;0.2uS -- Front porch 1.00uS
NOP ;0.4uS
NOP ;0.6uS
NOP ;0.8
NOP ;1.0uS

BCF PORTB,0 ;0.2uS -- End Front porch
CALL Delay1mkS ;1.2uS -- Sync pulse lenght 3.2uS
CALL Delay1mkS ;2.2uS
NOP ;2.4uS
NOP ;2.6uS
NOP ;2.8uS
NOP ;3.0uS
BSF PORTB,0 ;3.2uS

CALL Delay1mkS ;1uS -- Back Porch 2.2 uS
NOP ;1.2uS
NOP ;1.4uS
NOP ;1.6uS
NOP ;1.8uS
NOP ;2.0uS
BCF PORTB,1 ;2.2uS
;;;_____End Vertical Sync

;;;Vertical Back porch
HSYNC_10  ;10
HSYNC_10  ;20
CALL HSYNC  ;21
CALL HSYNC  ;22

CALL Delay10mkS ;10uS ;Active video time 20uS
CALL Delay10mkS ;20uS

NOP ;0.2uS -- Front porch 1.00uS
NOP ;0.4uS
NOP ;0.6uS
NOP ;0.8
NOP ;1.0uS

BCF PORTB,0 ;0.2uS -- End Front porch
CALL Delay1mkS ;1.2uS -- Sync pulse lenght 3.2uS
CALL Delay1mkS ;2.2uS
NOP ;2.4uS
NOP ;2.6uS
NOP ;2.8uS
NOP ;3.0uS
BSF PORTB,0 ;3.2uS

NOP ;0.2uS
NOP ;0.4uS
MOVLW D'200' ;0.8uS --Not Necessary But Used To Correct Timing
MOVWF counter1 ;1.0uS
MOVLW D'200' ;1.2uS
MOVWF counter2 ;1.4uS
MOVLW D'200' ;1.6uS
MOVWF counter3 ;1.8uS
;;;___End Vertical Back porch

GOTO Top

END                       ; directive 'end of program'




Cambié el cristal de 12Mhz a 20Mhz del circuito de HJ y funcionó perfecto.
Tres franjas gruesas de color Rojo, Verde Y Azul a 800x600 en pantalla sin el parpadeo de los 12Mhz.
Solo espero que si alguien lo quiere probar este más claro como hacer.


Mega saludos para todos.


« Última modificación: Mayo 09, 2016, 10:42:55 am por IAO »

jota

  • PIC10F
  • *
  • Mensajes: 2
Re: Generador de video VGA con PIC 16F84A
« Respuesta #17 en: Julio 18, 2016, 02:39:38 pm »
hola amigo me gustaria  que por favor de enviarme el codigo hex por que no lo deja mostrar la pagina gracias

HJ

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5703
Re: Generador de video VGA con PIC 16F84A
« Respuesta #18 en: Julio 18, 2016, 03:55:20 pm »
hola amigo me gustaria  que por favor de enviarme el codigo hex por que no lo deja mostrar la pagina gracias
Hola Jota.
Como te mencioné antes, el archivo se puede bajar sin problema del foro, pero por las dudas lo acavo de subir a 4sharted cmo segunda opción, te dejo el enlace de descarga:
http://www.4shared.com/file/GkB-uUb9ce/TestVGA.html

Saludos
HJ
"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]