AntiGuide: AtTiny85Sleep



PagePrincipale :: DerniersChangements :: ParametresUtilisateur :: Vous êtes 216.73.216.115 :: Signaler un abus :: le: 20250620 09:02:57
Tiny85

suggestion d'usage: commander une guirlande clignotante! ne disposant pas d'un mode veille pour la journée!
20170104 pour application à DigiSpark: DigiSparkLowPower

20161203
trouver le sleep :
c:\users\adminpo\desktop\attiny85\arduino-1.6.7\hardware\tools\avr\avr\include\avr\sleep.h:634:6: error: #error "No SLEEP mode defined for this device."

lire: https://enavarro.me/exploration-des-sleep-mode-du-attiny85.html
lu: http://forum.arduino.cc/index.php?topic=378740.0 propose 1.6.3, un autre 1.6.5r5

lu aussi mais pas exploité: http://www.technoblogy.com/show?KX0

0800: essai 1.6.13

GAFFE: la suite testé en alimentant la bête par asa prise Usb

au multimètre:
sans diode: delay: 23 mA, sleep: 11 mA
avec diode: delay 25mA, sleep: 13 mA
et avec le programme ci dessous: 7mA

pour le premier test delay sans sleep allumé/éteint):
16 mHz: 17.5/14.5
8 Mhz! : 12/9.1
1 mHz: 7.1/4.2

après avoir vu le schéma: http://blog.mister-bidouilles.fr/une-cle-usb-qui-saisit-votre-mot-de-passe-pour-moins-de-3-euros/
fait sauter la diode power
fait sauter le régulateur 78m05

1 mHz:(entre parenthèse après avoir sabordé la diode power et après le / le régulateur 78m05)
l
led on: 12.6 (9.7/6.5)
led Off: 9.7 (6.9/3.8)
sleep: 7.2 (4.3/1.3)


finalement (sans led power ni 7805)
à 16 mHz:
led on: 17.1
led Off: 14.3
sleep: (avec pull-upp externe 1 kOhm: oscille entre 0.50 et 0.02 mA)
(avec l'autre programme veille à 0.021 sur secteur et

à 8 Mhz
(avec l'autre programme veille à 0.021 sur secteur et 0.020 sur usb et pas mieux sur secteur)

plus lentement, on descend à:
1 mHz
led on: 6.5 / ou 5.40 / 5.17
led Off: 3.9 / ou 2.53 / 2.33
sleep: 1.3
sleep: (avec pull-upp externe 1 kOhm: oscille entre 0.50 et 0.02 mA)
((avec l'autre programme veille à 0.021 sur secteur et 0.020 sur usb et pas mieux sur secteur)

commandé un autre pour ce crime!
0.96 €:https://fr.aliexpress.com/item/Free-shipping-1PCS-LOT-GY-Digispark-kickstarter-miniature-minimal-development-board-ATTINY85-module-for-Arduino-usb/32673631021.html
reçu le 20170103 et aussitôt exécuté!

feuille de route:
essayer avec un AtTiny85 nu (cr pas possible de coupé la résistance de 1.5 kOhms qui met Dm à 5V!


20170104
essai d'un pas de plus: en supprimant la résistance pull-up sur D-,
pas mieux
mais pour le programmer je dois insérer un DongleUsbPullUpDMinus
donc onlaisse tomber cette piste

aprem:
programme mùodifié (8)*60, 1 mHz
sur powerbank: powerdoctor dir .13/5.22 V
sue vostro; 5.04

cordon simple 0.05 mA
cordon + resistance!: pareil
usb avecresistance! 0.02 mA
usb san résiatance: 0.02

0.02


si, 3.3 v en mA:
led on: 2.83
led off: 1.46
veille: 0.023
donc pas mieux sur la veille!

// selon https://enavarro.me/exploration-des-sleep-mode-du-attiny85.html
#include <avr/io.h>
#include <avr/wdt.h> 
#include <avr/sleep.h>

/* Turn off WDT */
void watchdog_stop() {
  WDTCR |= _BV(WDCE) | _BV(WDE);
  WDTCR = 0x00;
}


volatile uint8_t wdt_count = 0;

void watchdog_start_interrupt(uint8_t wd_prescaler) {
  if(wd_prescaler > 9) wd_prescaler = 9;
  byte _prescaler = wd_prescaler & 0x7;
  if (wd_prescaler > 7 ) _prescaler |= _BV(WDP3); 
  // ^ fourth bit of the prescaler is somewhere else in the register...
  // set new watchdog timer prescaler value
  WDTCR = _prescaler;
  // start timed sequence (and activate interrupt)
  WDTCR |= _BV(WDIE) | _BV(WDCE) | _BV(WDE);
}

// Watchdog Interrupt Service / is executed when watchdog timed out
ISR(WDT_vect) {
  wdt_count++;
  WDTCR |= _BV(WDIE);          // next watchdog will go to interrupt (not reset)
}


// Incremented by watchdog interrupt
// volatile uint8_t wdt_count;

int led = 1;

void blink(uint8_t flash){
  bool state = HIGH;
  for(int i = 0; i<2*flash; i++){
    digitalWrite(led, state);
    state = !state;
    delay(120);
  }
}

void setup() {
  ADCSRA &= ~_BV(ADEN);  // switch ADC OFF
  ACSR  |= _BV(ACD);     // switch Analog Compartaror OFF
  // Configure attiny85 sleep mode
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  // Reset watchdog interrupt counter
  wdt_count = 255; //max value
  // Configure pin modes
  pinMode(led, OUTPUT);
}


void loop() {
  blink(3);
  wdt_count = 0;
  watchdog_start_interrupt(6);      // prescale of 6 ~= 1sec
  while(wdt_count < 10){         // Wait 10 watchdog interupts (~10secs)
    sleep_mode();                   // Make CPU sleep until next WDT interrupt
  }
  watchdog_stop();
}


mini: http://blog.roguecode.co.za/make-dirt-cheap-electronics-with-attiny45-arduino-nano/