VoyForums
[ Show ]
Support VoyForums
[ Shrink ]
VoyForums Announcement: Programming and providing support for this service has been a labor of love since 1997. We are one of the few services online who values our users' privacy, and have never sold your information. We have even fought hard to defend your privacy in legal cases; however, we've done it with almost no financial support -- paying out of pocket to continue providing the service. Due to the issues imposed on us by advertisers, we also stopped hosting most ads on the forums many years ago. We hope you appreciate our efforts.

Show your support by donating any amount. (Note: We are still technically a for-profit company, so your contribution is not tax-deductible.) PayPal Acct: Feedback:

Donate to VoyForums (PayPal):

Login ] [ Contact Forum Admin ] [ Main index ] [ Post a new message ] [ Search | Check update time | Archives: 12345[6]78910 ]


[ Next Thread | Previous Thread | Next Message | Previous Message ]

Date Posted: 06:13:49 08/06/02 Tue
Author: Decos
Subject: CODIGO DE PRUEBA
In reply to: Apolo 's message, "Deco digitalman" on 04:39:48 04/20/02 Sat

ALGUIEN LE COMENTO A TODOS LOS QUE TIENEN PROBLEMAS CON EL PROYECTO DE DIGITALMAN QUE EN EL DIAGRAMA HAY 2 CAPS CRUZADOS EN EL CLOCK??
ALGO QUE AYUDA MUCHO ES PONER UN CAP MAS GRANDE EN PARALELO AL XTAL. ESTO "ABLANDA" UN POCO AL XTAL Y PREMITE MODULAR MAS LA FRECUENCIA AL HACER EL PIN 17 SALIDA BAJANDO ASI LA FRECUENCIA. PRUEBEN ESTE COD PARA LA VERSION DE 10MHZ:

;**************************************************************************
; Este codigo es de prueba para MC, deberia hacer enganchar el
; video en horizontal y dejar el vert en una pos cualquiera.
; Si la imagen corre en hor, trimmea el clock hasta que se clave
; Si se engancha mal (en el burst) puede ser otra codificacion
; si no se apaga el led, proba otro xtal
; si no logras que el hor se clave, pone 10pf mas en paralelo con el xtal
; si aun asi no se clavo, pone 10pf mas en paralelo con el cap del pin17
;**************************************************************************

PROCESSOR 16F84A

#include "p16f84a.inc"

__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC
RADIX DEC

; Definicion de registros generales
VideoMode equ 20h
Loops equ 21h
LineaCnt equ 22h
SearchCnt equ 23h
CntSyncOk equ 24h
CntSyncErr equ 25h
DataSample equ 26h

; PORTB valores de salida para los diferentes modos
PASSVIDEO equ 00010011b
PASSINVER equ 00110010b
MAKEBLACK equ 10010000b
MAKESYNC equ 10000000b
PASSBURST equ 11010000b

; PORTB bits de entrada
NEG equ 2
POS equ 3

; VideoMode bits
DEC equ 0
INV equ 1
BLK equ 2
ERR equ 3
FIND equ 4

; PORTA osc control
OSCTRLON equ 00001000b
OSCTRLOFF equ 00001001b

ORG 0
goto MAIN


;***************************************************************************
; HORLINEA
;
; Crea una linea de video.
; Adjusta la frequencia VCXO.
; Valores de entrada en LineCnt desde MAIN
; Valores de salida en DataSample hacia MAIN
;***************************************************************************

HORLINEA ; t=-4.4
nop
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Portico delantero=2.4us
; t=-2.4
nop
nop
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana sync=4.4us
; t=0
nop
nop
nop
nop
nop
bcf PORTA,0
nop
movlw PASSBURST
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; t=4.4
; Ventana burst=5.6us

movf PORTB,W ;
movwf DataSample ; tomo muestra para re-sincronizacion
movlw OSCTRLON
btfsc DataSample,POS ; Si hay un flanco POS
movlw OSCTRLOFF ; subir frec.
tris PORTA ; habilitar osc. control

movlw PASSVIDEO
btfsc VideoMode,INV ; control de inversion
movlw PASSVIDEO ; PARA MC SIEMPRE ES DIRECTO
;movlw PASSINVER
btfsc VideoMode,BLK
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; comienzo de la linea de video

nop
movf PORTB,W ; tomo muestras al inicio de la
iorwf PORTB,W ; linea 23 y 622 para determinar
iorwf PORTB,W ; si el video esta invertido o no.
iorwf PORTB,W ; NO SIRVE DE NADA, MC NO CODIFICA ASI

btfss DataSample,POS ; Si no hay un flanco POS (seccion de BURST)
bsf PORTA,4 ; test port on

movwf DataSample ; guarda en DataSample info de inversion

movlw 33 ; delay
movwf Loops
L1 ; t=14.0
decfsz Loops,f ; 32*1.2+0.8=39.2
goto L1

nop
nop
movlw OSCTRLOFF
tris PORTA ; deshabilitar osc. control
bcf PORTA,4 ; test port off


decf LineaCnt,f
btfsc STATUS,Z ; Si LineaCnt=0
; t=56
retlw 1 ; retornar a MAIN
nop ; delay antes de recomenzar otra linea
nop
nop
nop
nop
nop
goto HORLINEA ; crear otra linea


;*************************************************************************
; SEARCH
;
; Busca linea 3, para sincronizarse.
; Retorna hacia el final de la linea 6.
;*************************************************************************

SEARCH
movlw 3
movwf SearchCnt
S1
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS ; Detecta ausencia de flancos
goto SEARCH ; en VBI (nivel bajo)
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS
goto SEARCH
btfsc PORTB,POS
goto SEARCH
decfsz SearchCnt,1 ; 2*6.0+5.6=17.6
goto S1
S2
btfss PORTB,POS ; Espera flanco POS (t=0)
goto S2
nop
movf PORTB,W ; Detecta ausencia de flancos
iorwf PORTB,W
iorwf PORTB,W ; en VBI (nivel alto)
movwf DataSample
btfsc DataSample,NEG ; si hay un flanco POS
goto SEARCH ; recomenzar
btfsc DataSample,POS ; si hay un flanco NEG
goto SEARCH ; recomenzar
movf PORTB,W ; Detecta si hay un flanco NEG (+4.4)
movwf DataSample
btfss DataSample,NEG ; si no es NEG
goto SEARCH ; recomenzar
nop
nop
movf PORTB,W ; Detecta si hay un flanco POS (+2.4)
movwf DataSample ; (inicio de pos-eq)
btfss DataSample,POS ; si no es POS
goto SEARCH ; recomenzar
movlw 49 ; delay
movwf Loops
S3
decfsz Loops,1 ; 48*1.2+0.8=58.4
goto S3
nop
nop
movf PORTB,W ; Detecta si hay un flanco NEG (+61.6)
movwf DataSample ; (Linea 4,5)
btfss DataSample,NEG ; si no es NEG
goto SEARCH ; recomenzar
movlw 78 ; delay
movwf Loops
S4
decfsz Loops,1 ; 77*1.2+0.8=93.2
goto S4
nop
movf PORTB,W ; Detecta si hay un flanco NEG (+96)
movwf DataSample ; (fin linea 5)
btfss DataSample,NEG ; si no es NEG
goto SEARCH ; recomenzar

movlw 46 ; delay
movwf Loops
S5
decfsz Loops,1 ; 45*1.2+0.8=54.8
goto S5
bcf VideoMode,FIND ; Linea 3 encontrada
retlw 1

;*************************************************************************
; MODE
;
; Determina el modo de funcionamiento.
; Valores de entrada en VideoMode,ERR desde VBI
; Valores de salida en VideoMode,FIND hacia MAIN
;*************************************************************************

MODE ; t=-4.4
btfss PORTA,3 ; habilitacion manual
bsf VideoMode,ERR ; si RA3=1
btfss VideoMode,ERR ; si no hay error de Vsync
clrf CntSyncErr ; borrar contador de cuadros malos
incf CntSyncErr,f ; incrementar contador de cuadros malos
btfsc CntSyncErr,2 ; si hay 4 cuadros malos consecutivos
bcf VideoMode,DEC ; dejar de decodificar
btfsc CntSyncErr,2 ; si hay 4 cuadros malos consecutivos
bsf VideoMode,FIND ; buscar Linea 3
btfsc CntSyncErr,2 ; si hay 4 cuadros malos consecutivos
clrf CntSyncErr ; recomenzar la cuenta de cuadros malos
incf CntSyncOk,f ; incrementar cuadros buenos
btfsc VideoMode,ERR ; si hay error de Vsync
clrf CntSyncOk ; recomenzar la cuenta de cuadros buenos
btfsc CntSyncOk,2 ; si hay 4 cuadros buenos consecutivos
bsf VideoMode,DEC ; comenzar la decodificasion
bcf VideoMode,ERR
bsf PORTA,1 ; prender LED
btfsc VideoMode,DEC ; si se habilita la decodificacion
bcf PORTA,1 ; apagar LED
bsf PORTA,2 ; deshabilitar deco de audio
btfsc VideoMode,DEC ; si se habilita la decodificacion
bcf PORTA,2 ; habilitar deco de audio
nop
nop
movlw 15 ; delay
movwf Loops
LOOPM ;
decfsz Loops,f ; 14*1.2+0.8=17.6
goto LOOPM

retlw 1

;*************************************************************************
; MEDLINEA
;
; Crea media linea de video (1ra. mitad de 623).
;*************************************************************************

MEDLINEA ; t=-4.4
movlw 2 ; delay
movwf Loops
ML1 ; t=-3.6
decfsz Loops,f ; 1*1.2+0.8=2
goto ML1
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana sync=4.4us
; t=0.0
movlw 2 ; delay
movwf Loops
ML2 ; t=0.8
decfsz Loops,f ; 1*1.2+0.8=2
goto ML2
movlw PASSBURST
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana burst=5.6us
; t=4.4
movlw 3 ; delay
movwf Loops
ML3 ; t=5.2
decfsz Loops,f ; 2*1.2+0.8=3.2
goto ML3
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video
nop
movlw 11 ; delay
movwf Loops
ML4 ; t=11.2
decfsz Loops,f ; 10*1.2+0.8=12.8
goto ML4
retlw 1


;*************************************************************************
; VBI
;
; Crea retroceso vertical y pulsos de pre/pos-ecualizacion.
; Verifica si se esta correctamente sincronizado.
; Valores de entrada en LineaCnt desde MAIN
; Valores de salida en VideoMode,ERR hacia MODE
;*************************************************************************

; Comienzo con 5 pulsos de pre-equaliz.(PAL Lineas 623.5 a 1)

VBI ; t=-4.4
movlw 2 ; delay
movwf Loops
V1
decfsz Loops,f ; 1*1.2+0.8=2
goto V1
PREEQ
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana SYNC=2.4us
; t=0
nop
nop
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video=29.6us
nop
nop
movlw 21
movwf Loops
V2 ; t=4
decfsz Loops,f ; 20*1.2+0.8=24.8
goto V2
movlw 5 ; cantidad de pulsos proximos
decfsz LineaCnt,f
goto PREEQ
movwf LineaCnt

; Proximos 5 pulsos de sync vertical (PAL Lineas 1 a 3.5)
; Durante estos 5 pulsos se muestrea para determinar si se esta en Vsync.

VSYNC
movlw MAKESYNC
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Ventana SYNC=27.2us
movf PORTB,W
iorwf PORTB,W
nop
movwf DataSample
btfss DataSample,NEG ; si no es NEG
; bsf VideoMode,ERR ; error de sincronismo **deshabilitado p/prueba
bcf VideoMode,ERR ; error de sincronismo
movlw 19 ; delay
movwf Loops
V3
decfsz Loops,f ; 18*1.2+0.8=22.4
goto V3

movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video=4.8us
nop
nop
nop
nop
movlw 5 ; cantidad de pulsos proximos
decfsz LineaCnt,f
goto VSYNC
movwf LineaCnt

; Ultimos 5 pulsos de post-equaliz. (PAL Lineas 3,5 a 6)

POSEQ
movlw MAKESYNC
btfss VideoMode, DEC
movlw PASSVIDEO
movwf PORTB ; Ventana SYNC=2.4us
; t=0
nop
nop
movlw MAKEBLACK
btfss VideoMode,DEC
movlw PASSVIDEO
movwf PORTB ; Black video=29.6us
movlw 17 ; delay
movwf Loops
V4 ;
decfsz Loops,f ; 16*1.2+0.8=20
goto V4

decf LineaCnt,f
btfsc STATUS,Z
retlw 1 ; sale de VBI
movlw 4 ; delay
movwf Loops
V5
decfsz Loops,f ; 3*1.2+0.8=4.4
goto V5

goto POSEQ

;***************************************************************************
; MAIN
;
; Inicializacion de los puertos
; o Port B como : oooo iioo
; o Port A como : oooo iooi
;***************************************************************************

MAIN
movlw 00001001b
tris PORTA ; Def. port A
movlw 00001100b
tris PORTB ; Def. port B

movlw PASSVIDEO ;
movwf PORTB ; Video normal
bsf PORTA,1
clrf VideoMode

bsf VideoMode,DEC
bsf VideoMode,FIND

movlw 1
goto START


;***************************************************************************
; LOOP principal
;
; Valores de entrada en DataSample desde HORLINEA
; Valores de salida en VideoMode y LineaCnt
;***************************************************************************

LOOP1
nop
movlw 5 ; 5 pulsos de pre,sync y pos-equaliz.
movwf LineaCnt
call VBI ; comienzo de CAMPO 2, Lineas 311 a 318,5

nop
nop
nop
nop
nop
call MODE ; seleccion de MODO, Linea 318,5 a 319

nop
nop
nop
movlw 17
movwf LineaCnt
call HORLINEA ; Lineas 319 a 335

nop
nop
bcf VideoMode,BLK ; deshabilito black video
movlw 200
movwf LineaCnt
call HORLINEA ; Lineas 336 a 535

nop
nop
nop
movlw 82
movwf LineaCnt
call HORLINEA ; Lineas 536 a 617

nop
nop
bsf VideoMode,BLK ; habilito black video
movlw 5
movwf LineaCnt
call HORLINEA ; Lineas 618 a 622

nop
nop
nop
btfsc DataSample,NEG ; si se detecto flanco NEG (inico linea 622)
bcf VideoMode,INV ; no invertir video
call MEDLINEA ; Linea 623 a 623,5

nop
nop
nop
movlw 5
movwf LineaCnt
call VBI ; comienzo CAMPO 1, Lineas 623,5 a 5

nop
nop
nop
nop
movwf LineaCnt
call HORLINEA ; Linea 6

START nop
nop
nop
; btfsc VideoMode,FIND ; si hay error de sync
; call SEARCH ; re-sync
movlw 16
movwf LineaCnt
call HORLINEA ; Lineas 7 a 22

nop
nop
nop
bcf VideoMode,BLK ; deshabilito black video
movwf LineaCnt
call HORLINEA ; Linea 23

bcf VideoMode,INV ; no invertir video
btfsc DataSample,POS ; Auto-inversion (inico linea 23)
bsf VideoMode,INV ; si hay flanco POS=>invertir video
movlw 200
movwf LineaCnt
call HORLINEA ; Lineas 24 a 223

nop
nop
nop
movlw 82
movwf LineaCnt
call HORLINEA ; Lineas 224 a 305

nop
nop
bsf VideoMode,BLK ; habilito black video
movlw 5
movwf LineaCnt
call HORLINEA ; Lineas 306 a 310

goto LOOP1 ; al CAMPO 2

END

[ Next Thread | Previous Thread | Next Message | Previous Message ]


Replies:


[ Contact Forum Admin ]


Forum timezone: GMT-8
VF Version: 3.00b, ConfDB:
Before posting please read our privacy policy.
VoyForums(tm) is a Free Service from Voyager Info-Systems.
Copyright © 1998-2019 Voyager Info-Systems. All Rights Reserved.