Autor Tema: Alto consumo corriente en Sleep  (Leído 197 veces)

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

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 61
Alto consumo corriente en Sleep
« en: 13 de Abril de 2018, 16:24:46 »
Hola!

Tengo mi proyecto practicamente desarrollado al 100%, pero al validarlo y comprobar el consumo en sleep, estoy viendo que es de 1.55 mA.

He chequeado registro por registro y he desactivado previamente o justo antes del sleep todo lo posible, y no sé ya qué puede ser.

El micro controlador es el 12F1840. Os dejo un resumen de las declaraciones:

Código: [Seleccionar]
#device PIC12F1840   // Definición PIC
#include <12F1840.h> // Incluir especificaciones PIC
#device ADC = 10     // Analog output data with 10bits length

// CONFIG1
#fuses INTRC_IO      // Internal Oscillator
#fuses NOWDT         // Watch Dog Timer Disabled
#fuses NOPUT         // Power-Up Timer Disabled
#fuses NOMCLR        // Master Clear Reset pin disabled
#fuses NOPROTECT     // Code not protected
#fuses NOCPD         // Data Code not protected
#fuses BROWNOUT_NOSL // BrownOut reset enabled and disabled during sleep
#fuses NOCLKOUT      // Clock Out is disabled. Enable to tune OSC frequency.
#fuses NOIESO        // Internal/external switchover disabled
#fuses FCMEN         // Fail safe clock monitor enabled

// CONFIG2
#fuses NOLVP         // Low Voltage Programming disabled
//#fuses NODEBUG     // Debug disabled
#fuses BORV19        // BrownOut reset 2.4V
#fuses NOSTVREN      // Stack Overflow/Underflow Reset disabled
#FUSES PLL_SW        //4X HW PLL disabled
#fuses NOWRT         // Write protection disabled

#use delay(clock = 4MHZ)                     // Velocidad reloj PIC

void main (void) {
   VREGPM = 1;                // Enable Low-Power Sleep Mode
   WPUA   = 0;                // Deactivate Weak pull-up resistor on every pin to avoid current consumption

   T1GSEL = 1;                // Select RA3 as Timer 1 Gate pin
   TXCKSEL= 0;                // Deactivated - Select RA4 as Tx pin for Rs232

   // TIMER1 CONFIGURATION
   //  00 = Timer1 clock source (Fosc/4)
   //  11 = 1:8 Prescaler value
   //   0 = Dedicated Timer1 oscillator circuit disabled (LP osc)
   //   1 = Do not synchronize asynchronous clock input to Fosc
   //   0 - Unimplemented
   //   1 = Enable Timer1
   T1CON = 0b00110101;   // TIMER1 CONFIGURATION

   // TIMER2 CONFIGURATION
   //    0 - Unimplemented
   // 1111 = 1:16 Postscaler
   //    1 = Timer is ON
   //   11 = Prescaler is 1:64
   T2CON = 0b01111111;   // TIMER2 CONFIGURATION

   // INTERRUPT CONFIGURATION
   GIE     = 1;      // Enable General interrupts
   PEIE    = 1;      // Enable Peripheral Interrupts (TIMER1 uses it)
   IOCAN3  = 1;      // Enable IOC falling edge on pin RA3
   TMR1GIE = 0;      // Disable TMR1 Gate Acquisition interrupt. Code doesn't flow properly (too many interrupts)
   TMR1IE  = 1;      // Enable TMR1 Overflow interrupt
   TMR2IE  = 1;      // Enable TMR2 PR2 match flag


   // Set inputs and outputs
   // Inputs:  RA3 RA4
   // Outputs: RA0 RA1 RA2 RA5
   TRISA = 0b00011000;
   
   // Set analog or digital I/O
   // Analog:  RA4
   // Digital I/O: RA0 RA1 RA2 RA3 RA5
   ANSELA = 0b00010000;

   // Configure Fixed Voltage Reference module
   // FVR 1.024V and FVR ADC enabled, Temperature indicator disabled, and Comparator and DAC FVR disabled
   FVRCON = 0b11000001;

   // Set inputs and outputs
   // Inputs:  RA3 RA4
   // Outputs: RA0 RA1 RA2 RA5
   TRISA = 0b00011000;
   
   // Set analog or digital I/O
   // Analog:  RA4
   // Digital I/O: RA0 RA1 RA2 RA3 RA5
   ANSELA = 0b00010000;

   // Configure Fixed Voltage Reference module
   // FVR 1.024V and FVR ADC enabled, Temperature indicator disabled, and Comparator and DAC FVR disabled
   FVRCON = 0b11000001;   // Set inputs and outputs
   
while (1) {

     // ---------------------------------------------------
     // ----- En este espacio van las condiciones para entrar en el sleep. No las pongo para resumir.  ----------------------
     // ---------------------------------------------------

         GIE    = OFF;              // Global interrupt should be disabled before SLEEP to avoid entering in ISR
         IOCAF3 = 0;                // Clear flag
         IOCIE  = ON;               // Activate IOC and deactivate timers
         TMR1ON = OFF;
         TMR2ON = OFF;
         ANSELA = 0x00;             // Disable Anagolic module on every pin to avoid current consumption during sleep
         TRISA  = 0b00001000;       // Put pins to Output to minimize current consumption. RA3 can only be input
         
         sleep();                   // Go to sleep mode. Use capacitor to avoid bounce and undesired weak-up
         
         IOCIE  = OFF;              // Go back to normal functioning and activate the timers
         IOCAF3 = 0;                // Clear flag
         TMR1ON = ON;
         TMR2ON = ON;
         TRISA  = 0b00011000;       // Restore pin configuration after weak-up
         ANSELA = 0b00010000;       // Enable again Anagolic module on pin RA4
         GIE    = ON;

     // ---------------------------------------------------
     // ----- Continúa la ejecución del programa  ----------------------
     // ---------------------------------------------------

}
}



Alguien tiene alguna idea de qué puede ser?

He medido los voltajes de los pines con el polímetro y todos están a 0, excepto 2, que están a 0.5V (uno es el del botón y el otro es de un sensor resistivo).

¿Es posible que el consumo no me lo esté produciendo el PIC sino el sensor resistivo?

Gracias de antemano!

Saludos

Desconectado Eduardo2

  • PIC10
  • *
  • Mensajes: 25
Re:Alto consumo corriente en Sleep
« Respuesta #1 en: 13 de Abril de 2018, 17:05:57 »
En principio si, aunque sería mejor ver el circuito.

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 132
Re:Alto consumo corriente en Sleep
« Respuesta #2 en: 13 de Abril de 2018, 18:50:48 »
¿Es el consumo del PIC solamente o hay mas componentes como resistencias de pull-up?

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 61
Re:Alto consumo corriente en Sleep
« Respuesta #3 en: 14 de Abril de 2018, 12:39:59 »
Consumiendo corriente está el PIC, el circuito pull-up del botón, y el sensor resistivo + resistencia de linealización.

En un rato intento subir el esquema.

*Editado: Aquí os lo subo.

Gracias!!

Saludos
« Última modificación: 15 de Abril de 2018, 06:27:25 por tito melli »

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 61
Re:Alto consumo corriente en Sleep
« Respuesta #4 en: 19 de Abril de 2018, 12:56:47 »
Hola,

Este fin de semana probé  desconectando el sensor y efectivamente el consumo se reduce drásticamente.

Voy a darle la corriente a través de uno de los pines del PIC para poder controlar el consumo, pues no excede los 20mA.

Por otro lado, hice los cálculos y el exceso de consumo medido coincide a la perfección con el teórico.

Gracias por vuestras respuestas!

Saludos

Desconectado Eduardo2

  • PIC10
  • *
  • Mensajes: 25
Re:Alto consumo corriente en Sleep
« Respuesta #5 en: 19 de Abril de 2018, 15:56:18 »
Consumiendo corriente está el PIC, el circuito pull-up del botón, y el sensor resistivo + resistencia de linealización.

En un rato intento subir el esquema.

*Editado: Aquí os lo subo.

Gracias!!

Saludos

¿Pero cual es la resistencia del sensor?   ¿O era una adivinanza?

Basta que sea de 3K para que drene los  5/(3000+220) = 1.55mA    en sleep.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4682
    • Picuino
Re:Alto consumo corriente en Sleep
« Respuesta #6 en: 19 de Abril de 2018, 16:49:43 »
Voy a darle la corriente a través de uno de los pines del PIC para poder controlar el consumo, pues no excede los 20mA.

Eso va a añadir mucho error. Mejor utiliza un mosfet N con baja tensión de base para conectar a tierra al divisor de tensión.

También puedes conectar a tierra mediante un pin del PIC y medir la tensión del pin para corregir su error.

Saludos.
« Última modificación: 19 de Abril de 2018, 16:51:44 por Picuino »

Desconectado nico

  • PIC16
  • ***
  • Mensajes: 174
Re:Alto consumo corriente en Sleep
« Respuesta #7 en: 19 de Abril de 2018, 20:05:44 »
Me sumo a lo que dice Eduardo, cual es la resitencia del sensor?, sino la conoces, es tan simple como retirar el pic y medir el consumo sin el micro, seguramente es lo que se "va" por el sensor.
Salutes.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4682
    • Picuino
Re:Alto consumo corriente en Sleep
« Respuesta #8 en: 20 de Abril de 2018, 03:32:18 »
Parece que la resistencia del sensor es de 3000 ohmios.
En ese caso la resistencia que le acompaña es demasiado baja. Debería ser también de 3k.

Un saludo.