Autor Tema: Entradas Comparadoras, MikroC y Proteus  (Leído 12966 veces)

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

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Entradas Comparadoras, MikroC y Proteus
« en: 27 de Septiembre de 2009, 02:34:31 »
Hola amigos, este es un pequeño tutorial acerca de como utilizar las entradas comparadoras de los microcontroladores de la familia 16 ya que aun lo logro hacerlo con la familia 18. Si alguien lo logra por favor relice alguna respuesta.

Para ello escogeremos el PIC16F876A, una vez hecho esto damos doble clic sobre el dispositivo y en las propiedades avanzadas (Advanced Properties) escogemos que el retardo de subida de los pines (Port Pin Low-High Delay) sea igual a 1n, lo mismo hacemos para el retardo de bajada (Port Pin High-Low Delay). Esto lo realizamos para que el simulador no asuma que el dispositivo es ideal y lograr activar las salidas de los comparadores, ya que si el cambio de las entradas ocurren antes que Q2 las salidas no se activaran.



Luego escogemos el archiv .hex que utilizaremos en el PIC y la frecuencia con la que trabajará.

Codigo de Ejemplo

A continuación se muestra un codigo de ejemplo hecho en MikroC que utiliza las entradas comparadoras del PIC

El ejemplo siguiente es un medidor del angulo de desfase entre 2 señales, util para medir factor de Potencia.

Código: [Seleccionar]
char signo,CMP,angulo;      //Declaramos las variables que utilizaremos en el programa.
//CMP guarda las banderas de utilización del comparador.
// F0=No. de entradas a la interrupcion
// F1=Signo del Angulo de desfase

 void interrupt(){
    if(CMCON.C2OUT)if(!CMCON.C1OUT)CMP.F1=1,CMP.F0=0;//CMCON es el registro para configurar los comp.
    if(CMP.F0) angulo=TMR0,CMP.F0=0;//Los Bits C1OUT y C2OUT guardan el estado de los comp.
    else TMR0=0,CMP.F0=1;//Para salir de la rutina es neceasrio leer o escribir estos bits
    PIR2.CMIF=0;}//Borramos el Flag del comparador para salir de la Interrupcion

void main(){
    OPTION_REG=0b000101;          //Preescaler Timer0=1:64
    INTCON=0b11000000;        //Habilita interrupciones Globales y Perifericas
    ADCON1 = 0B111;             //Configura AN0..5 como digitales
    CMCON= 0b110011;              //Configura 2 comparadores con salidas RA5 y RA6
    TRISA = 0b001111;       //configura RA0..3 como In y RA4,5 como salidas
    trisb=0;                //Configura Puerto B como salidas
    trisc=0;
    PIE2.CMIE=1;            //Habilita interrupcion Comparador
ciclo:
    PORTB=angulo;
    Delay_ms(1000);    //Este es un retardo opcional para visualizar el valor en pantalla.
    goto ciclo;

Aun estoy trabajando en el codigo por tal razon solo muestro este, que es un poco rustico pero creo que debería ser suficiente como ejemplo.

Circuito Final



Para obtener el angulo de desfase el valor mostrados en los display debe ser convertido a decimal, luego se debe dividir entre 3 (lo que me da el valor en microsegundos) y luego multiplicarlo por 360 y por 60 (la frecuencia de la red).

Las entradas positivas de los comparadores estan conectadas a fuentes de voltaje de 10mV.

El pin RA4 Necesita una resistencia de Pull-up debido a que es una salida de colector abierto. La resistencia debe ser configurada como digital en la propiedad model type.

Para visualizar las salidas de los comparadores se utilizan los pines RA5 y RA4.
« Última modificación: 27 de Septiembre de 2009, 02:42:51 por bigluis »
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 bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Entradas Comparadoras, MikroC y Proteus
« Respuesta #1 en: 27 de Septiembre de 2009, 20:14:10 »
Configuracion del Modulo Comparador

Para los que aun no dominan muy bien el tema de como utilizar las entradas comparadoras del PIC voy a explicarlo un poco con ayuda del datashet.

El modulo comparador contiene 2 comparadores analogicos. Las entradas de los comparadores son multiplexadas con los pines de I/O RA0 a RA3, mientras las salidas son multiplexadas en los pines RA4 y RA5. El voltaje de referencia interno tambien puede ser una entrada para los comparadores (lo que nos ahorra pines de entrada).
 
El primer paso es configurar el registro CMCON que es el encargado de manipular el funcionamiento de los comparadores. Este registro consta de los siguientes Bits:

R-0R-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0
C2OUTC1OUTC2INVC1INVCISCM2CM1CM0

A continuacion muestro la descripcion de cada registro:
C2OUT:Bit de salida del comparador 2.
Cuando C2INV=0:
1=C2 Vin+ > C2 Vin-
0=C2 Vin+ < C2 Vin-
Cuando C2INV=1:
1=C2 Vin+ < C2 Vin-
0=C2 Vin+ > C2 Vin-
C1OUT:Bit de salida del comparador 1.
Cuando C1INV=0:
1=C1 Vin+ > C1 Vin-
0=C1 Vin+ < C1 Vin-
Cuando C1INV=1:
1=C1 Vin+ < C1 Vin-
0=C1 Vin+ > C1 Vin-
C2INV:Bit de Inversion del Comparador 2
1=Salida invertida de C2
0=Salina no invetida de C2
C2INV:Bit de Inversion del Comparador 2
1=Salida invertida de C2
0=Salina no invetida de C2
CISBit del Switch de Entrada:
Cuando CM2:CM0=110:
1=C1 Vin- conectado a RA3/AN3
   C2 Vin- conectado a RA2/AN2
0=C1 Vin- conectado a RA0/AN0
   C2 Vin- conectado a RA1/AN1
CM2:CM0: Bits de los modos de comparador
Hay ocho modos de operacion para los comparadores a como muestra la siguiente figura.


Interrupciones del Comparador
El flag de interrupcion del comarador es seteado siempre que haya un cambio en los valores de salida de cualquier comparador. El Software no necesitara mantener informacion acerca del estado de los bits de salida para determinar el cambio ocurrido. El bit CMIF (Registro PIR) es le flag del comparador. Este debe ser Reseteado a cero. Ya que es posible escribir 1 a su registro, una interrupcion simulada podria ser iniciada.

El bit CMIE (registro PIE) y los bits PEIE y GIE (registro INTCON) deben setearse para habilitar la interrupcion. Si cualquiera de estos bits son limpiados, la interrupcion no se habilitara

Citar
Nota:
Si un cambio en CMCON (C1OUT o C2OUT) ocurre cuando una operacion de lectura esta siendo ejecutada (inicio del ciclo Q2), el CMIF podria no activarse.

En la Rutina de Interrupcion, el usuario puede limpierla de la siguiente manera:
  • Cualquier lectura o escritura de CMCON finalizara la condicion de error.
  • Limpiar el bit CMIF.

La mayoria de estos datos fueron sacados del datasheet por si necesitan mas informacion
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 Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Entradas Comparadoras, MikroC y Proteus
« Respuesta #2 en: 27 de Septiembre de 2009, 22:28:39 »
Saludos bigluis

Sigue adelante compañero estare atento a tus publicaciones. Y muchas gracias por compartir tu conocimiento.
Un saludo desde Pereira - Colombia

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Entradas Comparadoras, MikroC y Proteus
« Respuesta #3 en: 28 de Septiembre de 2009, 00:34:09 »
que buena explicación, buen aporte bigluis.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Modulo de Voltaje de Referencia Interno
« Respuesta #4 en: 10 de Octubre de 2009, 19:03:27 »
Modulo de Voltaje de Referencia Interna

Esta compuesto por una escalera de 16-pasos que provee una voltaje de referencia selecionable. Ademas su próposito primario es proveer una referencia a los comparadores.

Un diagrama en bloque es mostrado en la siguiente figura. La escalera de resistores es segmentada para proveer dos rangos de palores para CVref y tiene funcion de apagado para conservar potencia cuando la referencia no esta siendo usada. El suministro del modulo puede ser provisto tanto por Vdd/Vss o un voltaje de referencia externo multiplexado en RA2 y RA3.



Configuracion

El modulo es controlado por el registro CVRCON. El modulo provee dos rangos de salida de voltaje, cada cual con 16 niveles distintos. El rango a ser usado es seleccionado por el bit CVRR. La diferencia primaria entre los rangos es el tamaño de los pasos seleccionados por los bits de seleccion CVR3:CVR0.

La fuente de voltaje es seleccionada por el bit CVRRS.

a continuacion se mustra esto



lo anterior es sacado de la hoja de datos del PIC18F4550

Como mencione antes en proteus solo he logrado simular los PIC16, la diferencia en estos es que no puedes seleccionar el voltaje de suministro para el modulo.

En el PIC16F877 parece que hay un error ya que al poner CMCON.CIS=0 las entradas de los comparadores seran AN0 y AN2 y no como menciona el datasheet AN0 y AN1. y para CMCON.CIS=1 las entradas a los comparadores seran AN1 y AN3 y no como menciona el datasheet AN2 y AN3.
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 giff

  • PIC10
  • *
  • Mensajes: 31
    • Ignogantes
Re: Entradas Comparadoras, MikroC y Proteus
« Respuesta #5 en: 08 de Febrero de 2010, 02:40:39 »
Informo que, por lo menos en la versión 7.6 de Proteus no pude hacer funcionar los comparadores análogos para el pic18f2550. Intente lo tipico(utilicé el compilador CCS 4.104): usar setup_comparator en todos sus modos para el uC antes mencionado, también use #asm codigo #endasm para embeber el código en lenguaje maquina pero tampoco, no hubo caso.

Después de resignarme probé usar setup_comparator() en la realidad y funciona perfectamente, asi que por lo menos, para este modelo (no se que pase para el 18f4550); el proteus no simula bien el modo comparador análogo.

Mi blog sobre apuntes de electrónica: www.ignogantes.net

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Entradas Comparadoras, MikroC y Proteus
« Respuesta #6 en: 08 de Febrero de 2010, 16:38:43 »
Bigluis, gracias por este hilo. Sabía usar los comparadores del 16F628 y como tengo el datasheet del 16F87X no sabía que las versiones A de dichos microcontroladores tuvieran comparadores.

Así que ahora estoy cambiando unos archivos.h (headers) que estaba haciendo para poder usar el C de Hitech de una manera muy similar al C de CCS. En lo que respecta a como se configuraba un dispositivo (setup_timer1(x) por ejemplo...)
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado zonomo

  • PIC10
  • *
  • Mensajes: 1
Re: Entradas Comparadoras, MikroC y Proteus
« Respuesta #7 en: 10 de Julio de 2012, 16:56:10 »
Hola!

He estado trabajando en un proyecto como el tuyo, es decir, obtener el angulo de desfase entre dos señales para calcular el factor de potencia, claro, usando solamente el pic. Estuve revisando tu código para usarlo en un 18F4550, ya hice algunos cambios para que funcione en el 4550, pero me es complicado usar los comparadores para este pic, espero continúes con este proyecto, si hago algún avance se los comunicaré ;)