Autor Tema: Crear Comparadores Dentro de un PIC  (Leído 12108 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Crear Comparadores Dentro de un PIC
« en: 07 de Agosto de 2010, 14:37:46 »
Hola amigo tenia Mucho tiempo que no entraba en el foro.................vine a compartir una interesante experiencia con ustedes....han querido usar por ejemplo hacer un circuitos con varios comparadores de voltaje con operacionales y resulta uy voluminoso el diseño??

Han intentado programar un PIC para que realize comparaciones de voltaje??.................pues es mi caso hace casi 2 años se me ocurrio algo y tenis que usar 2 LM324 y me parecio engorroso..........y me parecio asombroso conseguir informacion de cualquier tema relacionado con los pic.

No consegui alguien que tocara el tema de como escribir prgramas para realizar comparadores de voltaje con PIC aunque paresca mentira.................me llevo casi los 2 años tener una manera efectiva de hacerlos he llegado a a crear 16 comparadores para crear 8 comparadores tipo verntana con sus respectivas histeresis poco a poco realisate entragas de informacion para como realizar comparadores, con los PIC.

Diran.........vaya este sujeto, es bien lento.....pero tenia que trabajar y otras ocupaciones, ademas tener que solventar problemas con que me toperen el camino, dios vendiga al PICKIT 2 adquieri una version clon hace 8 meses y fue asi que pude acelerar el proceso de investigacion respecto al tema, todavia preparo el material para ustedes........espero les interese el tema.
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Crear Comparadores Dentro de un PIC
« Respuesta #1 en: 07 de Agosto de 2010, 18:32:03 »
Comensando con el tema expuesto .........les recoendare algo, hagan todas las pruevas y ensayos en una targeta o PCB, no usen protoboard, pues como se trabajaron con un maximo de 5 voltios y la relativa alta impedancia de los ADC, se detecta el ruido presente el las conexiones presentes en el protoboard y el funcionamiento del pic como comparador deja que desear y se hace suceptibles hasta el simple encendido de una luz o licuadora, etc.

Por experiencia propia tengan un PICKIT2 o alguna herramienta que permita decirle como funcionan los programas dentro del PIC.

Usen una fuente de poder de bajo ruido, pueden usar el USB como fuente de poder.

La proximales explicare mas sobre los comparadores..................y la Histeresis..
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #2 en: 08 de Agosto de 2010, 17:35:00 »
Si se analiza el comparador de voltaje basicamente toma 2 valores y lo compara, por lo tanto se debe utilizar un ADC y una rutina comparadora, en cual puede usar las 2 Condiciones A > B, A = B, A < B y generar una salida apartir de la comparacion del valor obtenido de ADC y un valor previamente cargado en el Comparador, combinando 2 veces esta accion se obtiene un comparador de Ventana.

Para tener valores de voltajes variables para el ADC, uitilizo un potenciometro multi vuelta asi se obtiene un valor bastante fino para probar el programa.

Luego me di cuenta de la inestabilidad que se prensentaba en el proceso de cambio de estado de salida del comparador ( rutina comparadora ), esto sucede cuando el valor de referencia se va haciendo igual o proximoael valor obtenido del ADC.

Me di cuenta que hacia falta una HISTERESIS para hacer que el comparador sea insensible a los ruidos y al efecto de cambio erraticos de la salida poe la proximidad de los valores comparados ( el del ADC y el valor de Referencia ), crees una rutina en la cual la HISTERESIS depende del estado de la salida, luego les mostrare un programa basico para que funcione como comparador basico.
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Crear Comparadores Dentro de un PIC
« Respuesta #3 en: 08 de Agosto de 2010, 19:40:14 »
Hola Akira, sigo tus avances e instrucciones...  :mrgreen:

Saludos!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #4 en: 09 de Agosto de 2010, 08:32:29 »
Buenas mis panas Creo que todos sabemos como funciona el AO ( Amplificador Operacional ) por eso Obvio pa explicacion de su funcionamiento como comparador, lo que si es importante es tener claro de la Histeresis dentro del comparador pues cuando la tension a comparar se aproxima a valor a comparar, sobre esta puede existir una tension variable muy pequeña, que no es mas que ruido.

Este ruido puede ser generado por el medio ambiente, la alimentacion del circuito, el PCB, etc, y la Histeresis tiene una mision importante que cuando la tension a comparar, pasa de un determinado nivel ( aunque esta tenga algo de ruido ) este proboca un cambio en la salida del operacional............pero como funciona la histeresis???.

Pueden ir en esta direccion y explican con formulas como funciona y calcular esta histeresis
http://www.electronicafacil.net/tutoriales/COMPARADOR-TENSION.php

Pero de una manera simple se las explicare, de una manera simple con esta imagen, que es la empleo en mi programa en asm


« Última modificación: 11 de Agosto de 2010, 20:55:50 por un Moderador, Razón: Adjunté la imagen (Norberto) »
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #5 en: 09 de Agosto de 2010, 08:49:42 »
Si miran el diagrama Cuando el voltaje Ve,  se aproxima al valor Va' no sucede nada pero al ser menor a va la Vo o tension de salida del operacion sube, pero e aqui lo interesante cuando sucede este cambio la tension Va´ cambias a Va en donde Va es menor a Va´ pues asi el valor a comparar se hace mayor al de referencia o con quien se quiere comparar.

Esto proboca, que la unica manera de que cambie de estado la salida del comparador es bajando la tension del valor que se compara y cuando esto sucede Va cambiara de nuevo a Va´.

este cambio en la referencia de Va´a Va y viceversa es lo que genera la Histeresis que se ve en la figura y hace inmune al comparador al ruido que se encuentre presente en la Tension que sera comparado con el valor de referencia. con esto tenemos una idea somera de como funcionaria el programa en el PIC. enla proxina les coloco el codigo, las preguntas esta abiertas....
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Crear Comparadores Dentro de un PIC
« Respuesta #6 en: 09 de Agosto de 2010, 12:30:54 »
Hola akira_ve, tu tema esta muy interesante, pero quería decirte que los PIC traen internamente unos módulos comparadores, la mayoría trae 2 módulos pero algunos traen 3, con estos módulos podrías ahorrarte los IC extra de los que hablas, solamente tienes que programarlo.

A continuación puedes encontrar 2 links en los que se habla de este tema.

http://www.todopic.com.ar/foros/index.php?topic=27711.0
http://www.todopic.com.ar/foros/index.php?topic=27876.0
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #7 en: 09 de Agosto de 2010, 12:54:05 »
Sabes.......creo que no leiste lo que dije al comienzo.................necesitaba 2 LM324.............es mas, sustitui la eletronica de un protector de volteje de 1500 VA que usaba una eletronica elaborada con un simple 16F876, es bien sabido por todos lo que dices pero...repito......repito..,..necesitaba 2 LM324 osea................8 comparadores amigo y sabes que..........

Sabes lo mas interesante de la experiencia................no necesites resistencias de precision las de 5% funcionan de maravillas......y sabes que es lo mas asombroso de todo.............y no se lo cuentes a nadie.................fue que el ajuste de todos los valores fue por SOFTWARE asi que dime tu que te resulta mas economico.....montar de 2 LM324 con toda la circuiteria y los calculos que acarrea eso, aparte que ajustar o calibrar los 8 comparadores, o vaciar el programa en un 16F876 y con una simple rutina ajustar todos los valores?

Con todo respeto nunca subestimes....cualquier idea...nunca, las ciencias estan plagadas de ideas que en su momento se les considero absurdas.........nunca subestimes cualquier ides por absurda que hay...............hace 2 años algune en la red........logro que un simple 16F84A funcionara con USB, feliocite a la persona por que eso indica...........inventiva.............

Amigo BIGLUIS espero tu inquietud este satisfecha.........
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Crear Comparadores Dentro de un PIC
« Respuesta #8 en: 09 de Agosto de 2010, 15:36:14 »
:oops: Lo siento, lo que pasó es que no había entendido bien el post,  :( es mas aún no entiendo bien que es lo que estas haciendo, me gustaría que subieras algunas imagenes para que agregues más detalles a lo que estas diciendo.

En ningun momento desee ofenderte, más bien lo que deseo es ayudar.

:oops: Como dije antes no entiendo muy bien lo que estas haciendo, pero lo poco que entendí es que estas comparando 8 valores analógicos, y que usando los ADC del PIC no era bueno debido al ruido, si ese es el caso lo que se recomienda es utilizar un filtro digital, cosa que no manejo muy bien pero conozco un poco.

si deseas adjuntar imagenes usa esto

http://www.todopic.com.ar/foros/index.php?topic=8120.0
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #9 en: 10 de Agosto de 2010, 21:52:09 »
Gracias BIGLUIS.

abajo les muestro el Grafico de Histeresis que use para el operacion

http://img337.imageshack.us/img337/841/ao1008.gif

a 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
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #10 en: 10 de Agosto de 2010, 21:54:12 »
« Última modificación: 10 de Agosto de 2010, 22:40:40 por un Moderador, Razón: Imagen corregida »
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Crear Comparadores Dentro de un PIC
« Respuesta #11 en: 13 de Agosto de 2010, 00:33:57 »
Con el programa anterior, el valor de salida del compador AMB ( A mayor que B ) se hace 1 cuando el valor a comparar se hace mayor a la referencia sin embargo se siguen haciendo comparaciones osea AIB ( A igual que B ) y BMA ( B mayor que A ) pero estsad salidas no estan asociadas a ninguna Histeresis.

Pero como nota Curiosa BMA estaindirectamente relacionada con AMB, pero en mi caso la rutina del comparador de 16 BIT lo modifique para que el comparador de salida de valor 1 cuando A y B sean iguales o B mayor que B y la rutina quedo asi:

Comp:
   movf   ADC_Sup,W      ; Valor ADC Superior
      subwf   Sup,   W      ; Valor de Ref. Superior
   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      ; Valor ADC Inferior
      subwf   Inf,   W      ; Valor de Ref. Inferior
   btfsc   STATUS,   Z
   goto   A_IGU_B         ; A = B
               
      btfsc   STATUS,   C      ; A2 <> B2
   goto   A_MEN_B         
                     
A_MAY_B:
A_IGU_B:
   bsf   BComp,   AMIB
   Return

A_MEN_B:
   bcf   BComp,   AMIB
   Return

Para hacer que se tenga un comparador de ventana hay que tener 2 valores y comparar con estos valores asi se fija el valor maximo y minimo de la ventana y lo que se hace es lo siguiente:

1ero, usas el ADC y asi obtienes un equivalente digital del valor de voltaje.

2do, usas la rutima de la histeresis que revisa el estado de la salida para aplicar la histeresdis.

3ero, se compara con elvalor alto o bajo y se guarda el valor en un registro.

4to, usas la rutima de la histeresis que revisa el estado de la salida para aplicar la histeresdis.

5to, se compara con elvalor alto o bajo y se guarda el valor en un registro, es cuestion de gusto si comparan el valor alto y luego el bajo o al reves.

6to, luego usar una condicion logica que nos indica cuando el valor medido esta dentro o fuera de la ventana, estos valores son tomado del registro donde se duardaron los valores de salida.

el comparador que uso hace la salida igual a 1 cuando el valor medido es mayor o igual a la referencia por lo tanto, cuando el valor alto de valor 0 y el valor bajo de valor 1.

Se preguntaran por que guardo los valores en un registro?? pues muy simple cada comparacion es independiente uno del otro y como lo uno que cambia es la referencia y el valor de los 2 procesos u se arma una condicion logica que cuando valor alto valga 0 y el valor bajo valga 1 la salida del comparador de ventana dara 1  indicando que el valor medido esta entre los valores de la ventana abajo les muestro un programa para ilustrar lo explicado


    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   7
   #define TR6 6
   #define TR5 5
   #define TR4 4
   #define TR3 3
   #define TR2 2
   #define TR1 1
   #define TR0 0
; ***************************************************
; ******* 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   0x01         
      movwf   Vs_Sup
   movlw   0xB0   
      movwf   Vs_Inf

   movlw   0x01       
      movwf   Vi_Sup
   movlw   0xA0     
      movwf   Vi_Inf

   clrf   BComp
; ---------------------------------------------------
;    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

   btfsc   BComp,   AMB
   bcf      BComp,   TR0
   btfss   BComp,   AMB
   bsf      BComp,   TR0

   movf   Vi_Sup,   W
   movwf   Sup
   movf   Vi_Inf,   W
   movwf   Inf

   call   Ref_HB
   call   Comp

   btfsc   BComp,   AMB
   bsf   BComp,   TR1
   btfss   BComp,   AMB
   bcf   BComp,   TR1

        btfss   BComp,   TR0      ; Confirmacion del Estado de Comparador de
   btfss   BComp,     TR1      ; Ventana
   goto   Cero                 ; No Cumple Condicion ( Rele de Salida = 0 )
   bsf   BComp,      TR2         ; Si Cumple Condicion ( Rele de Salida = 1 )
        goto  $+2

Cero:
   bcf   BComp,TR2
        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:
A_IGU_B:
   bsf      BComp,   AMB
   Return

A_MEN_B:
   bcf      BComp,   AMB
   Return
; -----------------------------------------------------------------
;    Rut. de valores de Histeresis
; -----------------------------------------------------------------
Ref_HA:   
   btfss   BComp,   TR0      ;
   Call   Cam_Ref         ;
   Return

Ref_HB:   
   btfsc   BComp,   TR1      ;
   Call   Cam_Ref         ;
   Return

Cam_Ref:
   movlw   .15
   subwf   Inf,   F      
   btfss   STATUS,   C
   decf   Sup,   F
   Return
; -----------------------------------------------------------------
Temp:
   movlw   .20
   movwf   Tmro
   decfsz   Tmro,   F
   goto   $-1
   Return
   
   end

Bueno usenlo y me avisan que tal en la proxima hablare de hacer multiples comparadores.
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela


 

anything