Timer et sleep sur attiny85

Parlez nous de vos projets et de vos idées, imaginez des applications

Timer et sleep sur attiny85

Message non lude philou74 » Sam 3 Mar 2018 11:02

Bonjour,

Dans le petit bout de code ci-joint je voudrait savoir si il est possible de remplacer le "delay(450) par une mise en sommeil de durée équivalente en utilisant un timer ? Ceci afin de réduire au max la consommation de l'attiny85.
Merci
Philippe


Code: Tout sélectionner
// Test01   ATtiny85 - Freq = 1mHz
  #include <avr/sleep.h>
  #include <avr/interrupt.h>
  #define SORTIE 1           // Sortie sur PB1,  pin6
  #define INT PCINT4         // Interruption sur PB4,  pin3

//*****************************************************************
void setup(void)
{
      for (byte i=0; i<6; i++)        // Toutes les entrées avec pullups activées
      {       
       pinMode(i, INPUT);
       pinMode(i, INPUT_PULLUP);
      }

 pinMode(SORTIE, OUTPUT);         
 digitalWrite(SORTIE, LOW); 
}

 
//*****************************************************************
 void sleep()      // mise en veille de l'attiny85
    {
    GIMSK |= _BV(PCIE);                     // Autorise Pin Change Interrupts
    PCMSK |= _BV(INT);                      // Active PB4 comme pin interruption
    ADCSRA &= ~_BV(ADEN);                   // ADC off
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // type du mode sleep

    sleep_enable();                         // Positionne le bit Sleep Enable dans le registre MCUCR (SE BIT)
    sei();                                  // Active interruption
    sleep_cpu();                            // mise en sommeille sleep

    cli();                                  // Désactive interruption
    PCMSK &= ~_BV(INT);                     // Désactive PB4 comme pin interruption
    sleep_disable();                        // Efface SE bit
    //ADCSRA |= _BV(ADEN);                    // ADC on
    sei();                                  // Active interruption
    } 
   
  ISR(PCINT0_vect) {}                       // Nécessaire pour ne pas reseter le programme après PCINT
 
//*****************************************************************
 void loop()
 {
 sleep();
 digitalWrite(SORTIE, HIGH);
 delay(5);                                 
 digitalWrite(SORTIE, LOW);
 delay(450 );                             // A remplacer par un sleep réveillé par timer ???
 }
   
philou74
 
Messages: 1
Inscription: Sam 3 Mar 2018 10:54

Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités