Bonjour,
je travaille sur un attiny85 (sur une pile CR2032 3V) qui consomme 4.4uA au repos pendant 500ms avec "snore" mais un peu plus de 1mA au travail. Malgrès la période de travail très courte, la pile ne tient que quelques semaines.
Je cherche un exemple simple à comprendre pour utiliser le Watchdog, et reveiller le programme uniquement lorsqu'une valeur analogique est atteinte.
Voici mon programme (simplifié) : un relevé de valeur analogique, une comparaison, une condition d'action sur pin0 :
int valeurrelevee=0; // valeur relevee dans la boucle. avec resistance de tirage 1k entre entree analog et GND
int valeurprecedente=0; // valeur Precedente
int differencevaleurs=0; // difference entre 2 valeurs
#include "tinysnore.h"
void setup() {
pinMode(0,OUTPUT);pinMode(4,OUTPUT);
digitalWrite(0,LOW);digitalWrite(1,LOW);digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);
ADCSRA = 0; // ADC disabled
}
void loop() {
digitalWrite(4,LOW); // tire le A3 vers 0 avec une résistance de 1k entre A3 et pin4
valeurrelevee=analogRead(3);
digitalWrite(4,HIGH); // remonte le + vers le A3 pour annuler l'effet de consommation via la résistance
differencevaleurs=(valeurrelevee-valeurprecedente);
if(differencevaleurs>=20){digitalWrite(0,HIGH);snore(50);digitalWrite(0,LOW);snore(2000);valeurprecedente=valeurrelevee;return 18;}
valeurprecedente=valeurrelevee;
snore(500);
}
Quelqu'un pourrait il me dire q'uil faut modifier pour faire fonctionner cela avec le watchdog et descendre ainsi la consommation tant que la valeur analogique de 20 n'est pas atteinte ?
(Tout les exemples que je trouve sur le net sont très compliqués et j'en perd mon latin ) :
Merci !
le watchdog ne sert généralement pas à cela (son rôle principal est de surveiller le fonctionnement du microcontrôleur et de le réinitialiser en cas de blocage ou de dysfonctionnement du programme) même si on peut l'utiliser pour sortir de deep sleep aussi (est-ce ce que vous voulez ?)
On dirait que vous voulez une interruption si la tension sur une pin d'entrée est supérieure à une certaine valeur. c'est possible avec le analog compare mais il faut mettre la tension de référence sur une pin
snore désactive l'ADC donc vous ne pourrez pas vous réveiller sur le dépassement de tension
bonjour, merci pour votre réponse,
en fait ma recherche initiale est de diminuer la conso pendant la lecture analogique du tiny, sachant que je dois lire environ toutes les 500ms.
je pensait que l'on pouvait agir avec le watchdog mais peut etre n'est ce possible que pour une interruption digitale avec une entrée en 0/1 ?
en effet , j'ai simplifié mont programme avant de poster , du coup le return va vers la ligne : "digitalWrite(4,LOW); // tire le A3 vers 0 avec une résistance de 1k entre A3 et pin4"