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/