# 16f627 comparadores analogicos



## pablomadoery (Nov 14, 2007)

tengo que hacer una caja termica que mantenga la temperatura entre 30 y 40 grados que cuando supere los 40 se encienda un cooler y cuando baje de 30 se prenda una lampara. la para ello uso el pic 16f627 que tiene comparadores analogicos. la señal a comparar la obtengo de un lm35 que entrega 10mv por grado centigrado. el problema a solucionar es que no se como configurar los registros para usar dos comparadores de esta forma. y no encontre mucha información sobre este pic que se esta empezando a usar ahora.
como se usan estos comparadores analogicos y como se pone las temperaturas de referencia.?
seria bueno tambien si me ayudan con el asembler referido a los comparadore. gracias


----------



## jorgeluiz (Nov 15, 2007)

Acho melhor voce usar dois comparadores de tensao como 741, e reles. Sai mais menos dispendioso. Com o lm35, voce devera usar fonte simetrica nos operacionais, porque a tensao e' muito baixa.


----------



## pablomadoery (Nov 21, 2007)

quiero agradecer a toda la comunidad del foro por la poca ayuda recibida, lo que me permitio sentir la frustracion de que las cosas no anden y el increible aire de victoria de que funcione. Al parecer no se sabe mucho del tema de los comparadores analógicos sobre todo de este pic 16f627, o quizas no di demasiado tiempo a respuestas o quizas se soluciona este problema generalmente con otro pìc y un conversor analogico digital. Mas alla de las ironias aca dejo el programa (ya probado que funciono) para que otros infelices como yo sepan mas o menos como se hace. quiero destacar que segun mi opinion microchip deberia poner en sus hojas de datos especificaciones basicas de como se conectan los pic a algunos dispositivos. por dar un ejemplo al principio que use una configuracion de los comparadores que tenia las salidas directamente conectadas al exterior del pic, en la hoja de datos decia que una de las salidas era open drain , es decir colector abierto,, eso que significa, solo dios lo sabe,,,,,,,,sale un uno ? sale un cero ?,,,,,, hay que conectar una resistencia a tension y medir de alli ?...... una de las salidas andaba bien pero la otra no sabia como conectarla por ejemplo a un buffer para desp activar un rele. En fin despues termine usando interrupciones ( en microchip ponen un solo ejemplo,,,,,,,,,,,,,,,,, uno........................con interrupciones).


aca esta el programa que anda con la explicacion:

Para configurar dos comparadores independientes cargamos en el CMCON con 0x04, es decir 1 0 0 en CM2 CM1 CM0 respectivamente. Conectamos la salida del LM35 a RA0 y RA1. En RA3 colocamos con los potenciómetros la mínima tensión de referencia y en RA2 la máxima. Leemos de C1OUT para comandar la lámpara y de C2OUT para el ventilador. Cuando se baja de la temperatura mínima de referencia se enciende la lámpara por RB0 y cuando se supera la maxima se apaga la lámpara y se enciende el ventilador por RB1 continuando con este ciclo indefinidamente. Para ello coloca tambien en el CMCON un cero en C1INV y un 1 en C2INV.
 El programa en assembler utilizando interrupciones es el siguiente:


                list        p=16f627
                include     p16f627.inc

    aux0        equ         0x30;          auxiliares para producir el retardo
    aux1        equ         0x31;
    aux2        equ         0x32;


     	         org         00
                    goto        start

    retardo     movlw       .26,           retardo
                    movwf       aux2
    retar         movlw       .249
                    movwf       aux1
    reta          movlw       .255
                    movwf       aux0
    ret           decfsz      aux0,1
                   goto        ret
                   decfsz      aux1,1
                   goto        reta
                   decfsz      aux2,1
                   goto        retar
                   RETURN


    lampara	bsf	    PORTB,0;  subrutina enciende lámpara 
		call	    retardo
		btfss	    CMCON,7; se fija si hay un uno en el comparador que	  
                                                          ;se encarga del ventilador


        		goto   	    lampara
		bcf	    PORTB,0 ;   si es asi apaga lampara
		goto	    vent ;            va a ventilador
		bcf	    PIR1,CMIF; limpia bandera de interrupcion

		retfie;                            restaura GIE (interrupciones)

    vent	            bsf	    PORTB,1;  subrutina enciende ventilador
		call	    retardo
		btfss	    CMCON,6; se fija si hay un uno en el comparador que 
                                                            se encarga de lámpara

		goto	    vent;             si no hay uno en lámpara sigue en vent
		bcf           PORTB,1;   si hay un uno apaga ventilador
		goto	    lampara;       y va a lámpara
		bcf	    PIR1,CMIF; limpia bandera de interrupcion

		retfie;                            habilita interrupciones (GIE) 

    start             movlw	    0x04;             configura los comparadores (ver explicación)
		movwf	    CMCON
		bsf	    CMCON,5
		bcf	    CMCON,4
		bsf	    STATUS,RP0
		movlw       0x0f;             RA0,1,2 Y 3   son estradas analógicas
		movwf	    TRISA


		movlw	    0X00	
		movwf	    TRISB;             RB0-RB7 salidas digitales
		bcf	    STATUS,RP0

		bcf	    PIR1,CMIF;      habilita interrupciones      
		bsf	    STATUS,RP0
		bcf	    PIE1,CMIE
		bcf	    STATUS,RP0
		bcf	    INTCON,PEIE
		bcf	    INTCON,GIE

		goto	    lampara; comienza el ciclo en lámpara


		end



y aca esta el programa que hice al principio que no sabia como conectar el open drain:


list        p=16f627
                include     p16f627.inc

    aux0        equ         0x30
    aux1        equ         0x31
    aux2        equ         0x32

     		  org         00
                    goto        start

    retardo     movlw       .6
                    movwf       aux2
    retar         movlw       .217
                    movwf       aux1
    reta          movlw       .255
                    movwf        aux0
    ret            decfsz        aux0,1
                    goto            ret
                    decfsz        aux1,1
                    goto           reta
                    decfsz        aux2,1
                    goto           retar
                    RETURN



    start       movlw	     0x06
		movwf	     CMCON
		bsf	              CMCON,4
		bcf	              CMCON,5
		bsf	              STATUS,RP0
		movlw              0x07
		movwf	     TRISA
		bcf	              STATUS,RP0

    aca 	movf	              CMCON,F
		call                  retardo
		goto	              aca
		end

( este es sin interrupciones , el programa se queda haciendo nada en "aca" y se conectan las salidas directamente del pic)


aca hay mas datos del proyecto y de las hojas de datos:

 Descripción general: 

 El presente proyecto consiste en la realización de un sistema para el control de temperatura. Para llevarlo a cabo se hará uso de un microcontrolador 16f627. El sistema consiste básicamente en una pequeña caja que aloja en su interior un sensor de temperatura, un ventilador (cooler) y una lámpara. Además se utiliza un buffer para obtener corriente a la salida del pic. El mismo va acoplado a otro buffer que suministra la potencia para levantar los 5v a 12v y controlar el ventilador  y el relé que maneja la lámpara.
El sensor de temperatura es un LM35. Éste se encarga de entregar 10mv / ºC, los cuales son recibidos por el pic. El pic utiliza los comparadores analógicos y de acuerdo a los valores recibidos y los de referencia, manda la señal para encender el ventilador o la lampara. Los valores de referencia son introducidos desde el exterior mediante potenciometros, de esta forma con solo variar las referencias se puede conseguir que la camara se mantenga entre las temperaturas deseadas.








El circuito básicamente es el siguiente:



 En lo que respecta a las alimentaciones, se requieren 220v para la lámpara y 12v para alimentar al buffer ULN2308. Gracias al regulador de 5v se consigue la tensión para el PIC.
El ULN2308, además de estar conectado al ventilador, también lo está a un relé de 12v que controla la lámpara de la siguiente forma:
(se usa un solo relé)


Programación del pic 16f627:

Para programar los comparadores analógicos del pic, se debe recurrir a la hoja de datos. dejo adjuntos todos los archivos


----------



## pepechip (Ago 19, 2008)

pablomadoery dijo:
			
		

> quiero agradecer a toda la comunidad del foro por la poca ayuda recibida, lo que me permitio sentir la frustracion de que las cosas no anden y el increible aire de victoria de que funcione. Al parecer no se sabe mucho del tema de los comparadores analógicos sobre todo de este pic 16f627, o quizas no di demasiado tiempo a respuestas o quizas se soluciona este problema generalmente con otro pìc y un conversor analogico digital. Mas alla de las ironias aca dejo el programa (ya probado que funciono) para que otros infelices como yo sepan mas o menos como se hace.



Yo te quiero agradecer a ti el aporte realizado, estaba buscando como utilizar los comparadores y localice su post.

Saludos

P.D. deveriamos de tomar ejemplo de Pablomadoery y postear como resolvimos nuestra duda.


----------



## cele vane (May 8, 2012)

MMM soy nueva en estoo alguien me puede decir para que sirve cmon???


----------



## D@rkbytes (May 8, 2012)

cele vane dijo:


> MMM soy nueva en estoo alguien me puede decir para que sirve cmon???


¿Te refieres a CMCON? Si es así, CMCON es el registro donde se configuran los comparadores analógicos.
Toda la información sobre cada PIC esta en las hojas de datos (Data Sheets)
que se ofrecen gratuitamente desde la pagina oficial de Microchip

PIC16F627/28 Data Sheet Busca esa información en la pagina 55 de la hoja de datos.

Saludos.


----------

