TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cfg1970 en 17 de Septiembre de 2011, 18:53:08
-
En proteus funciona bien la conversion no asi en el protoboard escribo el bloque de codigo afectado en la conversion
org 0x00;
goto inicio;
;-----------------------------------------------------------------------------------------------------
;interrupcion puede ser probocada por el TMR0 o fin de la conversion ----------------------
;-----------------------------------------------------------------------------------------------------
org 0x05;
nop
MOVWF WAUX ;SALVO EL REGISTRO W
SWAPF STATUS,W
MOVWF STATUSAUX ;SALVO EL REGISTRO STATUS
CLRF STATUS ;TRABAJO EN BANK 0
MOVFW PCLATH ;SALVO EL REGISTRO PCLATH
MOVWF PCLATHAUX
CLRF PCLATH
bcf INTCON,GIE; deshabilito interrupciones
;haberiguar la INT a que fuente de origen corresponde
btfsc INTCON,T0IF; int corresponde a desborde del TMR0 ?
goto desbordeTMR0;
btfsc PIR1,ADIF
goto convfin ;conversion finalizada
;....
;....
;....
goto finINT ;
;**************************************************************************************************************************
;**************************************************************************************************************************
; interrupcion probocada por el conversor
;**************************************************************************************************************************
;**************************************************************************************************************************
convfin
movf ADRESH,w
movwf anHI
bsf STATUS,RP0
movf ADRESL,w
bcf STATUS,RP0
movwf anLO ;en anLO y anHI guardo el resultado de la conversion que luego lo muestro en 4 display
bcf PIR1,ADIF ;limpio bandera fin conversion
bsf STATUS,RP0
bsf ADCON1,ADFM; ;formato del resultado justificado derecha
bcf ADCON1,PCFG0; ;RA0 unico canal analogico
bsf ADCON1,PCFG1;
bsf ADCON1,PCFG2;
bsf ADCON1,PCFG3;
bcf STATUS,RP0
goto finINT
;**************************************************************************************************************************
; fin coversion ADC
;**************************************************************************************************************************
desbordeTMR0
;este bloque de codigo esta dentro del desborde del TMR0 que es cada 5ms
decf con50ms
btfss STATUS,Z
goto noson500ms
movlw d'100' ;d100 x 5ms=1/2segundo
movwf con50ms
bsf ADCON0,GO ;arranco conversion
bcf PIR1,ADIF
noson500ms
........................
.......................
.....................
finINT
inicio
bsf STATUS,RP0;
bsf ADCON1,ADFM; ;formato del resultado justificado derecha
bcf ADCON1,PCFG0; ;RA0 unico canal analogico vref interna
bsf ADCON1,PCFG1;
bsf ADCON1,PCFG2;
bsf ADCON1,PCFG3;
bsf INTCON,GIE; habilita interrupcion global bsf INTCON,GIE;
bsf INTCON,T0IE; habilita interrupcion del TMR0
bsf INTCON,PEIE; habilita interrupcion de perifericos
bsf PIE1,ADIE; ;HABILITO INTERRUPCION DELconversor A/D
bcf STATUS,RP0;
movlw b'10000001'; ;se activa el conversor Fosc/32 canal RA0(analogico)
movwf ADCON0;
bcf PIR1,ADIF ;limpio bandera interrupcion conversor
bsf ADCON0,GO; ;ARRANCO EL CONVERSOR y espero la interrupcion
adjunto imagen del conversor funcionando
(http://www.imagengratis.org/images/debuger.jpg)
-
MOdificando el ADCON0 los bits ADCS1:ADCS0=Fosc/8 solucione el inconveniente