Reducción de consumo Attiny85

Hola a todos.

Estoy realmente atascado con un proyecto y la verdad es que no sé por donde tirar.

He hecho un programa que controla una tira de leds y los va encendiendo en función de los puertos de entrada. El programa en sí funciona correctamente pero presenta 2 problemas. El primero es que tarda unos 6 segundos en estar operativo desde que recibe alimentación y el segundo es el consumo de energía, va instalado en el coche y tiene que ir a la batería por lo que necesito reducir el consumo del Attiny85 en reposo al máximo y no sé como hacerlo.

Este es el código:

#include <Adafruit_NeoPixel.h>

// Pines totales tira
#define NUMPIXELS 15

// Puerto de datos tira
#define PIN 4

//    TIEMPO ALARMA
//        ENCENDIDO == 200ms
//        APAGADO   == 200ms
//
//    TIEMPOS SIN CONTACTO
//        ENCENDIDO == 300ms
//        APAGADO   == 500ms
//
//    TIEMPOS CON CONTACTO
//        ENCENDIDO == 400ms
//        APAGADO   == 400ms
//

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ400); //Define el objeto pixels que es la tira de leds

const int INTERMITENTE_SEC=1; // Entrada señal intermitentes
const int INTERMITENTE_LEG=3; // Entrada con + constante intermitente normal
const int MARCHA_ATRAS=2;     // Entrada señal + marcha atrás
const int POWER_LED=0;        // Salida +5 Relé alimentación LED´s
const int SALIDA=4;           // Salida datos LED´s

int ESTADO_INTERMITENTE;
int ESTADO_LEGAL;
int ESTADO_MARCHA;
int i = 15;
int flag = 1;
int Tiempo_Secuencia = 25;    // TIEMPO AJUSTABLE DE ENCENDIDO DE LED A LED
int Tiempo_Rele = 5;          // TIEMPO ACTIVACIÓN ANTES DE ENVIAR SEÑAL DE DATOS A LA TIRA DE LEDS

  unsigned long currentMillis = millis();
  unsigned long  previousMillis = millis();
  unsigned long  interval = 450;

//------ CAMBIAN SEGÚN LA TIRA DE LEDS-------------------  
// APAGADO  (000.000.000)
// PRIMEROS (255.000.000) 3 DÍGITOS SON AMARILLO 
// SEGUNDOS (000.255.000) 3 DÍGITOS SON BLANCO 

void Turn_OFF() // TODO APAGADO
{
  digitalWrite(POWER_LED, LOW);
  
  for(int i=0;i<NUMPIXELS;i++)
  {
   strip.setPixelColor(i, strip.Color(000,000,000)); // LED´s OFF
  }
  strip.show(); // Update LED´s.
}

void INTERMITENTE_SECUENCIAL() // INTERMITENTE DINÁMICO
{
  digitalWrite(POWER_LED, HIGH);
  delay(Tiempo_Rele);
  
  for(int i=0;i<NUMPIXELS;i++)
  {
    if (NUMPIXELS == 15) 
    {    
        strip.setPixelColor(14-i, strip.Color(000,000,255)); // LED´s Amarillos.
    }
     
   delay(Tiempo_Secuencia);
   strip.show(); // Update LED´s.
  }
}

void INTERMITENTE_LEGAL() // INTERMITENTE SIMULTÁNEO ////// !!!!!!!!!!!!!! Tienen que encender solo los 10 últimos !!!!!!!!!!!!!!!
{
  digitalWrite(POWER_LED, HIGH);
  delay(Tiempo_Rele);
  
  for(int i=0;i<NUMPIXELS;i++)
  {
   if (NUMPIXELS == 15) 
   {
        strip.setPixelColor(9-i, strip.Color(000,000,255)); // LED´s Amarillos.
   }
  }
  strip.show(); // Update LED´s.
}

void Rear_Gear_ON() // MARCHA ATRÁS ACTIVA
{
  digitalWrite(POWER_LED, HIGH);
  delay(Tiempo_Rele);
  
  for(int i=0;i<NUMPIXELS;i++)
  {
    if (NUMPIXELS == 15) 
    {
         strip.setPixelColor(i, strip.Color(000,255,000)); // LED´s White
    }
  }
  strip.show(); // Update LED´s.
}

void setup() 
{
strip.begin();
pinMode(INTERMITENTE_SEC,INPUT);
pinMode(INTERMITENTE_LEG,INPUT);
pinMode(MARCHA_ATRAS,INPUT);
pinMode(SALIDA,OUTPUT);
pinMode(POWER_LED,OUTPUT);
}

void loop() 
{

  ESTADO_INTERMITENTE = digitalRead(INTERMITENTE_SEC);
  ESTADO_LEGAL = digitalRead(INTERMITENTE_LEG);
  ESTADO_MARCHA = digitalRead(MARCHA_ATRAS);
  
  if (ESTADO_INTERMITENTE == LOW) 
  { 
    flag = 1; 
  } 
  if (ESTADO_INTERMITENTE == LOW && ESTADO_MARCHA == LOW && ESTADO_LEGAL == LOW) 
  { 
    // LED´s OFF
    Turn_OFF();
  } 
  if (ESTADO_INTERMITENTE == LOW && ESTADO_MARCHA == LOW && ESTADO_LEGAL == HIGH) 
  { 
    // LED´s OFF
    Turn_OFF();
  } 
  else if (ESTADO_INTERMITENTE == HIGH && ESTADO_MARCHA == LOW && ESTADO_LEGAL == LOW)
  { 
    // LED´s en amarillo secuencial
    if (flag == 1){
      INTERMITENTE_SECUENCIAL();
      delay(Tiempo_Secuencia);
      flag = 0;  
    }else{
      Turn_OFF();} 
  } 
  else if (ESTADO_INTERMITENTE == HIGH && ESTADO_MARCHA == LOW && ESTADO_LEGAL == HIGH) 
  { 
    // LED´s en amarillo simultáneo
    INTERMITENTE_LEGAL();
  }
  else if (ESTADO_INTERMITENTE == LOW && ESTADO_MARCHA == HIGH && ESTADO_LEGAL == LOW) 
  { 
    currentMillis = millis();
    if (currentMillis - previousMillis >= interval) {
      // LED´s en blanco
      Rear_Gear_ON();
    }else{
      // LED´s OFF
    Turn_OFF();
    }   
  } 
  else if (ESTADO_INTERMITENTE == LOW && ESTADO_MARCHA == HIGH && ESTADO_LEGAL == HIGH) 
  { 
    // LED´s OFF
    Turn_OFF();
  }
    else if (ESTADO_INTERMITENTE == HIGH && ESTADO_MARCHA == HIGH && ESTADO_LEGAL == HIGH)
  { 
    // LED´s en amarillo simultáneo
    INTERMITENTE_LEGAL();
    previousMillis = millis();
  } 
  else if (ESTADO_INTERMITENTE == HIGH && ESTADO_MARCHA == HIGH && ESTADO_LEGAL == LOW) 
  { 
    // LED´s en amarillo secuencial
    if (flag == 1){
      INTERMITENTE_SECUENCIAL();
      delay(Tiempo_Secuencia);
      flag = 0;  
    }else{
      Turn_OFF();} 
    previousMillis = millis();
  }  
}

Agradezco cualquier ayuda, gracias !!!

va instalado en el coche y tiene que ir a la batería por lo que necesito reducir su consumo al máximo y no sé como hacerlo.

El consumo de que quieres reducir?
La tira led consume 60mA por Led eso no lo puedes reducir por nada, a menos que controles el brillo, es tu prerrogativa.

Moderador
Tu pregunta entonces no es para esta sección sino para Hardware.
Movido a dicha sección

El consumo que quiero reducir es el del Attiny85 en reposo, la tira led la controlo mediante la variable "Tiempo relé" ya que tengo un relé que le corta la alimentación y se la activa 5ms antes de enviar la señal de encendido a los led´s por lo que el consumo de la tira es 0 en reposo.

Por eso yo creo que es un tema de software, creo que la sección donde la publiqué era la adecuada ya que los dos problemas que presenta mi proyecto son de programación (reduciendo tiempo de inicio y durmiendo el Attiny85)

busca ATtiny85 sleep

(https://learn.adafruit.com/low-power-wifi-datalogging/power-down-sleep?gclid=Cj0KCQiA3smABhCjARIsAKtrg6IKFsy52x93mm2Q5SX2GomG1u4EsZVkiHDQXKB09zQILaoR9Yf0UxIaAmZUEALw_wcB)]Attiny sleep

Sleep Modes on ATTiny85

hay muchos mas

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.