Gracias BIGLUIS.
abajo les muestro el Grafico de Histeresis que use para el operacion
http://img337.imageshack.us/img337/841/ao1008.gifa continuacion les doy el codigo que el comparador basico que use
; ******************************
list p=16F876A
#include "P16F876A.inc"
errorlevel -302
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC &
_LVP_OFF & _CPD_OFF & _DEBUG_OFF
; ******************************
; Definiciones
; ******************************
#define AMB 0
#define AIB 1
#define BMA 2
#define TR1 3
#define TR2 4
#define TR3 5
; ******************************
; Variables
; ******************************
CBLOCK 0x20
ADC_Sup
ADC_Inf
BComp
Vs_Sup
Vs_Inf
Vi_Sup
Vi_Inf
Sup
Inf
Tmro
ENDC
org 0
goto Inicio
org 5
; ******************************
; Initialisacion
; ******************************
Inicio:
clrf PORTC
clrf PORTB
clrf PORTA
bsf STATUS, RP0
movlw B'01000000'
movwf ADCON0
movlw B'10001110'
movwf ADCON1
movlw B'00000000' ; PORTB D0-D3 S y D4-D7 E
movwf TRISB
MOVLW 0X00 ; PORTC COMO SALIDAS
MOVWF TRISC
MOVLW B'11111111' ; PORTA COMO ENTRADAS
MOVLW TRISA
bcf STATUS, RP0
; *****************************
; CONFIGURACION
; *****************************
movlw 0x02
movwf Vs_Sup
movlw 0xA0
movwf Vs_Inf
movlw 0x00
movwf Vi_Sup
movlw 0xEA
movwf Vi_Inf
; ******************************
; PROG. PRINCIPAL
; ******************************
Ciclo:
call Leer_ADC ; Leer ADC
movf Vs_Sup, W
movwf Sup
movf Vs_Inf, W
movwf Inf
call Ref_HA
call Comp
; El Bcomp esta configurado asi
; 0 Salida del comparador A > B ( AMB )
; 1 Salida del comparador A = B ( AIB )
; 2 Salida del Comparador A < B ( BMA )
; 3 a 7 Bits de uso general ( TR1-TR5 )
movf BComp, W
movwf PORTB
goto Ciclo
; ******************************
; Captura de valores analogicos con el ADC de 10 BIT
; ******************************
Leer_ADC:
movlw B'01000001'
movwf ADCON0
call Temp
bsf ADCON0, GO_DONE
btfsc ADCON0, GO_DONE
goto $-1
movf ADRESH, W
movwf ADC_Sup
bsf STATUS, RP0
movf ADRESL, W
bcf STATUS, RP0
movwf ADC_Inf
bcf ADCON0, 0
return
; ******************************
; Comparador de 16 Bit
; ******************************
Comp:
movf ADC_Sup, W
subwf Sup, W
btfsc STATUS, Z
goto A1_IGU_B1
btfsc STATUS, C ; A1 <> B1
goto A_MEN_B
goto A_MAY_B
A1_IGU_B1:
movf ADC_Inf, W
subwf Inf, W
btfsc STATUS, Z
goto A_IGU_B ; A = B
btfsc STATUS, C ; A2 <> B2
goto A_MEN_B
A_MAY_B:
bsf BComp, AMB
bcf BComp, AIB
bcf BComp, BMA
goto Salir
A_IGU_B:
bcf BComp, AMB
bsf BComp, AIB
bcf BComp, BMA
goto Salir
A_MEN_B:
bcf BComp, AMB
bcf BComp, AIB
bsf BComp, BMA
Salir:
return
; ******************************
; Rut. de valores de Histeresis
; ******************************
Ref_HA:
btfsc BComp, AMB ;
Call Cam_Ref ;
Return
Cam_Ref:
movlw .10
subwf Inf, F
btfss STATUS, C
decf Sup, F
Return
; ******************************
Temp:
movlw .10
movwf Tmro
decfsz Tmro, F
goto $-1
Return
end
Si ven el codigo es bastante simple, el programa lo confeccione de una manera que aplico en todos los programas que he hecho y utilicen comparadores de la manera siguente :
1ero, se lee el valor a comparar con el ADC ( se guardan en las Variables ADC_Sup y ADC_Inf ).
2do, Se carga el valor a comparar y la de referencia ( Que son las Variables ADC_Sup, ADC_Inf Valores del ADC y Sup, Inf que son Valores De Referencia).
3ro, llamada de la rutina de Histeresis, que revisa el estado del BIT de salida de la rutina del Comparador que se almacena en el BYTE BComp, lo que hace la rituna es restar 1o pasos al la referencia, y asi se logra la histeresis
4to, Se llama la rutina de comparacion, esta rutina trabaja con 16 BIT para trabajar con un margen mayor de valores, alli se muestra A > B A = B y B > A `pero con el tiempo solo uso A > B por rasones de comodidad que explicare luego.
5to, el resutado se guarda el BComp pero en este caso se guardan los valores de salida del comparador, pero yo use solo la salida A > B por que la rutina de histeresis hace la resta de 10 solo cuando el BIT de Salida es 1.
Si se usa Solamente A > B la rutina de Hiteresis se usa para mas comparadores asi se ahorra mas codigo..............en la proxima entrega veran como se hacen mas comparadores y un comparador de Ventana con el BYTE BComp, se aceptan sujerencias