Autor Tema: 16f628a - comparador analógico, problemas con el vref [SOLUCIONADO]  (Leído 2480 veces)

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

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
hola, buenas tardes,

tengo este circuito


* sens-tens-diodo.png
(51.02 kB, 1340x690 - visto 1222 veces)


el objetivo es determinar cuando el voltaje de la batería se acerca al límite de entrada del 7805 que anda en 7v aprox y en ese momento, apagar el led verde y encender el rojo,

en el proteus anda perfecto pero en el protoboard no, en el proto, cuando mido la tensión de salida del zener en vacío me marca unos 2,6~2,7v, pero cuando lo conecto al pin de VREF me marca unos 0,24v,

el voltaje de AN0 funciona relativamente bien, cae un poco la tensión pero no tanto como con el zener,

el código de configuración del comparador
Código: C
  1. void configurar_comparador(void)
  2. {
  3.     /*
  4.      * C2OUT: Comparator 2 Output bit
  5.      *  When C2INV = 0:
  6.      *      1 = C2 VIN+ > C2 VIN-
  7.      *      0 = C2 VIN+ < C2 VIN-
  8.      *  When C2INV = 1:
  9.      *      1 = C2 VIN+ < C2 VIN-
  10.      *      0 = C2 VIN+ > C2 VIN-
  11.      *
  12.      * C2OUT = 1 ( C2 VIN + < C2 VIN- )
  13.      *  Cuando el voltaje de referencia sea mayor que la tensión de entrada
  14.      *  salta la interrupción
  15.      *      VIN+ = VREF/RA2 Pin 1
  16.      *      VIN- = AN1/RA1  Pin 18
  17.      */
  18.     CMCONbits.C2OUT = 1;
  19.     CMCONbits.C1OUT = 1;
  20.     /*
  21.      * C2INV: Comparator 2 Output Inversion bit
  22.      *  1 = C2 Output inverted
  23.      *  0 = C2 Output not inverted
  24.      */
  25.     CMCONbits.C2INV = 1;
  26.     CMCONbits.C1INV = 1;
  27.     /*
  28.      * Un solo comparador
  29.      * CM<2:0> = 101
  30.      *
  31.      * Pin 17   RA0/AN0         Entrada digital
  32.      * Pin 2    RA3/AN3/CMP1    Entrada digital
  33.      *
  34.      * Pin 18   RA1/AN1         VIN-
  35.      * Pin 1    RA2/AN2/VREF    VIN+
  36.      */
  37.     CMCONbits.CM2 = 1;
  38.     CMCONbits.CM1 = 0;
  39.     CMCONbits.CM0 = 1;
  40.    
  41.     /*
  42.      * VREN: VREF Enable bit
  43.      *  1 = VREF circuit powered on
  44.      *  0 = VREF circuit powered down, no IDD drain
  45.      */
  46.     VRCONbits.VREN = 1;
  47.     /*
  48.      * VROE: VREF Output Enable bit
  49.      *  1 = VREF is output on RA2 pin
  50.      *  0 = VREF is disconnected from RA2 pin
  51.      */
  52.     VRCONbits.VROE = 0;
  53.     /*
  54.      * VRR: V REF Range Selection bit
  55.      *  1 = Low range
  56.      *  0 = High range
  57.      */
  58.     VRCONbits.VRR = 0;
  59.     /*
  60.      * VR<3:0>: VREF Value Selection bits 0 ? VR <3:0> ? 15
  61.      *  When VRR = 1: VREF = (VR<3:0>/ 24) * VDD
  62.      *  When VRR = 0: VREF = 1/4 * VDD + (VR<3:0>/ 32) * VDD
  63.      *
  64.      * VRR = 0
  65.      * VREF = ( 0,25 x 4,8v ) + ( ( 8 / 32 ) x 4,8v ) = 2,4v
  66.      */
  67.     VRCONbits.VR3 = 1; // VR<3:0> - 8 - 1000
  68.     VRCONbits.VR2 = 0; // VDD ~ 4,8v
  69.     VRCONbits.VR1 = 0; // VREF = 2,4v
  70.     VRCONbits.VR0 = 0; // VBAT = 7,1v
  71. }
en esta función configuré el vref a 2,4v pero no tengo claro como usarlo como voltaje de referencia interno, agradecería cualquier ayuda con respecto a esto para descartar el zener y usar solamente el pin 17 AN0,

con esta función verifico el estado del comparador
Código: C
  1. void verificar_estado_bateria(void)
  2. {
  3.     if ( CMCONbits.C2OUT == 1 )
  4.     {
  5.         PORTAbits.RA0 = 0;
  6.         PORTAbits.RA3 = 1;
  7.     }
  8.     else if ( CMCONbits.C2OUT == 0 )
  9.     {
  10.         PORTAbits.RA0 = 1;
  11.         PORTAbits.RA3 = 0;
  12.     }
  13. }
la uso en el arranque y en la interrupción del comparador

Código: C
  1. if ( PIR1bits.CMIF == 1 )
  2.     {
  3.         uint8_t resetINTcmp = CMCON;
  4.        
  5.         verificar_estado_bateria();
  6.        
  7.         PIR1bits.CMIF = 0;
  8.     }

por qué el voltaje del zener cae tanto? que estoy haciendo mal?

alguna ayuda?

muchas gracias,

saludos,
« Última modificación: 11 de Marzo de 2017, 15:17:41 por LucasBols »
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:16f628a - comparador analógico, problemas con el vref
« Respuesta #1 en: 10 de Marzo de 2017, 17:25:17 »
Código: C
  1. por qué el voltaje del zener cae tanto? que estoy haciendo mal?

No veo nada malo, los TRISx estan correctamente configurados?
Probaste apagar el modulo de referencia de tension?

Citar
en esta función configuré el vref a 2,4v pero no tengo claro como usarlo como voltaje de referencia interno, agradecería cualquier ayuda con respecto a esto para descartar el zener y usar solamente el pin 17 AN0,

lo podes hacer pero creo que estarias desperdicienado 2 entradas, si eso no te importa, entonces podes seguir con eso, seria el caso del comparador en modo CM = 010

O... Podrias perder solo 1 pin que es el de Vref. Habilitar la salida de modulo de referencia de voltaje y no conectarlo Asi el pin de Vref es quien hace de puente hacia el comparador. siguiendo en el modo de CM = 101.

Citar
con esta función verifico el estado del comparador

tenes un if de mas en esa funcion

Código: C
  1. if ( CMCONbits.C2OUT == 1 )
  2.     {
  3.         PORTAbits.RA0 = 0;
  4.         PORTAbits.RA3 = 1;
  5.     }
  6.     else
  7.     {
  8.         PORTAbits.RA0 = 1;
  9.         PORTAbits.RA3 = 0;
  10.     }

ya que si no es 1, es 0.. no hace falta que pregunte si es 0 porque no queda otra opcion.

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
Re:16f628a - comparador analógico, problemas con el vref [SOLUCIONADO]
« Respuesta #2 en: 11 de Marzo de 2017, 15:17:17 »
Hola KILLERJC, buenas tardes,

Citar
por qué el voltaje del zener cae tanto? que estoy haciendo mal?

No veo nada malo, los TRISx estan correctamente configurados?
Probaste apagar el modulo de referencia de tension?


fue mi error, tenía TRSA2 como salida, lo configuré como entrada y funciona correctamente,

con el comparador funcionando, hice unas modificaciones, con la resistencia de 1k del diodo, la salida era de 2,72v y el led rojo prendía a los 8v, la reemplacé por una de 2k2 y ahora el diodo entrega 2,43v, y el pic enciende la luz roja a los 7,20v de la batería, el voltaje justo para el límite de entrada del 7805, debería buscar en ggl los cálculos para la resistencia y el diodo, pero voy medio atrasado con este proyecto,

posiblemente, después de la entrega, juegue un poco con resistencias con porcentaje de error más bajo, y con un transistor corte la alimentación del pic a los 7v,

Muchas gracias KILLERJC,

Saludos,
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
Re:16f628a - comparador analógico, problemas con el vref
« Respuesta #3 en: 12 de Marzo de 2017, 15:43:56 »
Hola KILLERJC, de nuevo con el VRef del comparador...

Citar
en esta función configuré el vref a 2,4v pero no tengo claro como usarlo como voltaje de referencia interno, agradecería cualquier ayuda con respecto a esto para descartar el zener y usar solamente el pin 17 AN0,

[...]

O... Podrias perder solo 1 pin que es el de Vref. Habilitar la salida de modulo de referencia de voltaje y no conectarlo Asi el pin de Vref es quien hace de puente hacia el comparador. siguiendo en el modo de CM = 101.

sin embargo, en el dtsh del 628a, pag 63 (10.0 COMPARATOR MODULE) dice:
Citar
The comparator module contains two analog comparators. The inputs to the comparators are multiplexed with the RA0 through RA3 pins. The on-chip Voltage Reference (Section 11.0 “Voltage Reference Module”) can also be an input to the comparators.

y en la pag 65 (10.3.2 INTERNAL REFERENCE SIGNAL) dice:
Citar
The Comparator module also allows the selection of an internally generated voltage reference for the comparators. Section 11.0 “Voltage Reference Module”, contains a detailed description of the Voltage Reference module that provides this signal. The internal reference signal is used when the comparators are in mode CM<2:0> = 010 (Figure 10-1). In this mode, the internal voltage reference is applied to the VIN+ pin of both comparators.

* comp_628A.png
(31.24 kB, 537x309 - visto 721 veces)


entonces el VRef generado por el pic solamente se puede utilizar como entrada para otro comparador, no para usarlo como VRef de un único comparador, es así?

muchas gracias por la ayuda,

saludos,

Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:16f628a - comparador analógico, problemas con el vref [SOLUCIONADO]
« Respuesta #4 en: 12 de Marzo de 2017, 16:24:38 »
Como el diagrama lo muestra, la entrada del Vref generado internamente ( por el modulo VR ) entra a los Vin+ de ambos comparadores. Esto es de forma INTERNA, sin llegar al pin!!, es decir en el pin no tendrias ninguna salida de tension. Aclaro nuevamente, siempre y cuando se use en ese modo.

El problema es que las 4 entradas (RA0 a RA3) quedan como analogicas.

Para tu caso te serviria, pero desperdiciarias 3 entradas. Recuerdo que es el modo 010

------------

Yo te decia que podrias desperdiciari 1 pin si usabas el modo 101 (el que estas usando). El pin que no deberias conectar externamente o podrias poner un capacitor de forma externa es el pin Vref.

En el modo 101 solo esta activo el comparador de abajo y los demas son digitales. Las entradas son los pines RA1 y RA2/Vref
Lo que podes hacer es que el modulo VR tenga salida al pin Vref, y desde ese pin tome el Comparador.
Esto imagino que es posible. Por lo que podes observar en la parte de los puertos y el diagrama que posee la entrada RA2/Vref.

Es decir el pin RA2/Vref te quedaria configurado como salida del modulo de referencia de tension. Y al no poder conectarle nada se desperdiciaria este pin, para aprovechar los otros 2 como digitales ( RA0 y RA3 )
« Última modificación: 12 de Marzo de 2017, 16:33:30 por KILLERJC »


 

anything