attiny_atmega_verylowpower
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| attiny_atmega_verylowpower [2019/11/18 21:05] – [1 an avec un ATtiny / ATmega avec des piles ?] joseph | attiny_atmega_verylowpower [2020/04/06 16:10] (Version actuelle) – serge | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== |
| - | Un ATtiny45/85 consomme à peu près **1mA** à 1Mhz (et 5mA à 8Mhz), voir https:// | + | Pour rappel, ATmega = le chip d'un Arduino |
| - | En un an, cela fait 8760 mAh ; ce qui dépasse largement la capacité de piles 1.5V. | + | Un ATtiny45/85 en marche consomme à peu près **1mA** à 1Mhz (et 5mA à 8Mhz), voir https:// |
| - | Il est possible d' | + | En un an, cela consommerait 8760 mAh ; ce qui dépasse largement la capacité de piles 1.5V. |
| - | ====== Comment faire ? ====== | + | |
| + | Mais il est possible d' | ||
| + | |||
| + | **Conclusion**: | ||
| + | |||
| + | ===== Méthode 1 : TinySnore | ||
| Il suffit d' | Il suffit d' | ||
| Ligne 19: | Ligne 24: | ||
| void loop() { | void loop() { | ||
| - | digitalWrite(4, | + | digitalWrite(4, |
| - | | + | snore(1000); // puis on dort profondément pendant 1 seconde |
| - | | + | |
| - | snore(5000); | + | |
| } | } | ||
| </ | </ | ||
| + | |||
| + | On descend à une très faible consommation de 4.7 µA pendant la période de sommeil ! | ||
| + | Mais 1 seconde de sommeil peut être beaucoup pour certaines applications. Exemple avec 20ms de sommeil: | ||
| + | |||
| + | < | ||
| + | void loop() { | ||
| + | ... | ||
| + | snore(20); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | J'ai obtenu 0.82 mA à 8mhz, et 0.24 mA à 1mhz avec des périodes de 20ms de sommeil profond. | ||
| + | |||
| + | Mais on peut faire encore mieux, voir le paragraphe suivant. | ||
| + | |||
| + | ===== Méthode 2 : utiliser des interruptions ===== | ||
| + | |||
| + | On peut mettre l' | ||
| + | |||
| + | Exemple avec trois "Pin Change INTerrupt" | ||
| + | |||
| + | < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | ISR(PCINT0_vect) { | ||
| + | if (digitalRead(0) == LOW) # PB0 = pin 5 enfoncé => on allume la LED | ||
| + | digitalWrite(4, | ||
| + | else if (digitalRead(1) == LOW) # PB1 = pin 6 enfoncé => on éteint la LED | ||
| + | digitalWrite(4, | ||
| + | else if (digitalRead(2) == LOW) # PB2 = pin 6 enfoncé => on allume la LED | ||
| + | digitalWrite(4, | ||
| + | } | ||
| + | |||
| + | void setup() { | ||
| + | pinMode(4, | ||
| + | pinMode(0, | ||
| + | pinMode(1, | ||
| + | pinMode(2, | ||
| + | ADCSRA = 0; // ADC disabled | ||
| + | GIMSK = 0b00100000; | ||
| + | PCMSK = 0b00000111; | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | sleep_enable(); | ||
| + | set_sleep_mode(SLEEP_MODE_PWR_DOWN); | ||
| + | sleep_cpu(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Consommation : | ||
| + | |||
| + | * 0.2 µA en temps normal 8-) | ||
| + | * 0.11 ma = 110 uA quand un bouton est enfoncé (c'est la résistance PullUp interne à l' | ||
| + | * 5.43 mA quand la LED est allumée (normal) | ||
| + | |||
| + | |||
| + | ===== Références intéressantes ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| {{tag> | {{tag> | ||
attiny_atmega_verylowpower.1574111154.txt.gz · Dernière modification : de joseph
