Aller au contenu


Photo
- - - - -

Mémoriser des données sur eeprom lors d'une coupure d'alimentation


  • Veuillez vous connecter pour répondre
13 réponses à ce sujet

#1 Romaric

Romaric

    Nouveau membre

  • Membres
  • 70 messages

Posté 07 novembre 2019 - 02:55

Je suis tombé sur un article (enfin j'ai beaucoup cherché après  :dash2: ) qui je pense peut intéresser du monde au vue de la rareté des articles traitant de sa problématique : la sauvegarde de données sur l'EEPROM d'un arduino au moment où son alimentation est coupée (volontairement ou non). Alors si tu souhaites utiliser judicieusement la mémoire morte de ton Arduino  ce lien peut te permettre d'améliorer ou de concrétiser ton projet  :Gigakach_01:

Je n'ai pas encore eu le temps d'essayer par moi même cette solution mais ça ne devrait pas tarder !

 

 

PS : Je ne sais pas où classer se sujet éléc/programmation si quelqu'un a une idée je suis preneur ;)



#2 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 621 messages
  • Gender:Male

Posté 07 novembre 2019 - 04:30

J'aurais dis en électronique ou en programmation. Par contre, il manque le lien dans ton message



#3 Romaric

Romaric

    Nouveau membre

  • Membres
  • 70 messages

Posté 07 novembre 2019 - 04:37

Oulah la boulette ! merci pour la remarque  ;)

 

http://riton-duino.blogspot.com/2019/03/arduino-sauvegarde-de-donnees-en-eeprom.html



#4 Romaric

Romaric

    Nouveau membre

  • Membres
  • 70 messages

Posté 20 novembre 2019 - 09:02

J'ai testé cette solution dans le cadre d'une application basique est elle fonctionne parfaitement  :yahoo: .

Voici le petit montage que j'ai réalisé pour tester cette solution, j'ai fait en sorte que mon exemple soit encore plus simple que celui de l'article :

Fichier joint  schéma_auto_detect_shut_down.PNG   33,38 Ko   0 téléchargement(s)

 

Et voici le programme arduino qui va avec : 

#include <EEPROM.h>
#include <rgb_lcd.h>

rgb_lcd ecranRGB;
int addr = 0;
int counter = 0;


void powerLoss()
{
  EEPROM.write(addr, counter);
}


void setup()
{
  attachInterrupt(digitalPinToInterrupt(2), powerLoss, FALLING);
  ecranRGB.begin(16,2, 0x00);
  ecranRGB.clear();
  ecranRGB.print("start");
  delay(1000);
  ecranRGB.clear();
  ecranRGB.print("data = ");
  delay(500);
  counter = EEPROM.read(addr);
  ecranRGB.print(counter);
  delay(1000);
}

void loop()
{
  ecranRGB.clear();
  counter += 1;
  ecranRGB.print(counter);
  delay(1000);
}

Procédure de test :

1. Réaliser le montage et brancher son alimentation 12V

2. Brancher votre carte arduino via USB et téléverser le programme

3. Débrancher l'USB

4. Vérifier que le compteur qui s'affiche sur l'écran fonctionne et couper l'alimentation 12V lorsque vous le souhaitez

5. Rebrancher l'alimentation, le compteur doit reprendre là où il se trouvait avant la coupure d'alimentation

 

J'espère que ça pourra aider certains d'entre nous, en tout cas pour moi ça change pas mal de choses  :thank_you:



#5 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 500 messages
  • Gender:Male
  • Location:Paris

Posté 20 novembre 2019 - 09:52

J'ai pas compris, tu lui balance du 7V dans pin 2. T'es sûr ? Pour le reste, ton arduino détecte un changement d'état vers le bas sur ce pin. À quoi sert le condensateur ?

Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 


#6 Romaric

Romaric

    Nouveau membre

  • Membres
  • 70 messages

Posté 20 novembre 2019 - 10:22

Je ne balance pas 7v mais plutôt 4.8V dans D2 ( 12V * 32 /(32+48) = 4.8V )

La coupure d'alimentation déclenche la fonction d'interruption loss_power liée à D2, et le condensateur sert à alimenter la carte le temps d'effectuer la routine d'interruption.



#7 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 671 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 20 novembre 2019 - 10:44

Je ne balance pas 7v mais plutôt 4.8V dans D2 ( 12V * 32 /(32+48) = 4.8V )

La coupure d'alimentation déclenche la fonction d'interruption loss_power liée à D2, et le condensateur sert à alimenter la carte le temps d'effectuer la routine d'interruption.

 

Pour compléter l'information fournie, 

Sur D2 on a :   bien  12V * R2 / ( R1 + R2 )    = 4.8V =) 

Ensuite le point important dans le montage c'est l'ensemble diode + condensateur. 

En effet quand on va couper l'alimentation on va avoir la chute de tension tout de suite sur D2. Par contre le condensateur C1 il a eu le temps de se charger, il va continuer d'alimenter l'arduino sans intérférer sur D2 qui doit être à 0V grâce à la diode qui agit comme un clapet anti retour pour le courant =) 

C'est le système qui est utilisé sur les imprimantes pour la reprise après coupures d'alimentation par exemple =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#8 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 500 messages
  • Gender:Male
  • Location:Paris

Posté 20 novembre 2019 - 01:16

Ha oui pardon jai pas pris la bonne résistance.
Merci pour vos explications. Je comprends si on coupe le courant brusquement. Mais si la tension de la batterie baisse à vitesse normale, le tension aux bornes du condensateur va aussi baisser. La diode n'est jamais 100% imperméable. Non ?

Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 


#9 Romaric

Romaric

    Nouveau membre

  • Membres
  • 70 messages

Posté 20 novembre 2019 - 01:59

Ha oui pardon jai pas pris la bonne résistance.
Merci pour vos explications. Je comprends si on coupe le courant brusquement. Mais si la tension de la batterie baisse à vitesse normale, le tension aux bornes du condensateur va aussi baisser. La diode n'est jamais 100% imperméable. Non ?

 

Le contexte d'utilisation ici est une coupure d'alimentation brutale (voulue ou non) donc je ne me suis pas posé cette question, le but de cette manip est simplement de se donner le temps de sauvegarder des données importantes tout en protégeant l'EEPROM arduino de sauvegardes inutiles (on sauvegarde ainsi son capital d'écriture/lecture).

Tu te places dans le cadre d'une alimentation par batterie si je comprends bien ?



#10 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 621 messages
  • Gender:Male

Posté 20 novembre 2019 - 06:04

Pour une baisse de tension du à une batterie qui se vide, je pense que ça passera pas :

- d'après https://www.radishlo...voltage-levels/ , le passage du niveau haut au niveau bas se fait à 2.2V (2.6V dans l'autre sens, du à une hystérésis).

- 2.2V sur les pin d'entrée numérique, correspond à 5.5V pour l'alim. A cause de la diode, la pin Vin recevra donc autour de 4.9V, ce qui je pense est insuffisant.

 

La solution la plus simple est probablement de connecter le même pont diviseur à une pin analogique et à la lire régulièrement grâce à un timer (la batterie ne vas pas descendre brutalement en tension).

Sinon, il est aussi possible d'ajuster le diviseur de tension pour que la pin passe à l'état bas avant que la tension ne soit trop basse (nb : ce n'est pas forcément possible pour toutes les tensions d'alimentation, car il faut aussi garantir que la tension ne dépassera pas les 5V)



#11 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 500 messages
  • Gender:Male
  • Location:Paris

Posté 20 novembre 2019 - 06:38

Oui je pensais à une batterie qui se décharge. Merci pour toutes ces infos. Je comprends tout maintenant 😃

Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 


#12 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 20 novembre 2019 - 08:36

Le plus simple à la place du pont diviseur, c'est resistance + diode zener. Peu importe la tension de la batterie, D2 gardera des bons niveaux logiques. :)

#13 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 5 029 messages
  • Gender:Male

Posté 20 novembre 2019 - 08:56

Le plus simple à la place du pont diviseur, c'est resistance + diode zener. Peu importe la tension de la batterie, D2 gardera des bons niveaux logiques. :)

Une diode Zener laissant passer 5V. C'est une bonne idée.
La résistance serait donc en série avec la diode, le tout connecté à la pin 2.
Mais, alors, quel serait l'intérêt de la résistance ? Limiter le courant ?

#14 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 621 messages
  • Gender:Male

Posté 20 novembre 2019 - 09:10

Oui, la résistance sert à limiter le courant (qui sinon, avec des composants idéalisés, serait infini).

 

Si tu met une diode zener 5V sans résistance, alors tu as 2 gros problèmes:

1) tu te retrouve avec du 12V sur ton entrée D2 de l'arduino : tu viens de cramer ton arduino

2) aux bornes d'une diode Zener 5V, tu as au plus 5V (si la diode est idéale, elle bloque le courant entre 0 et 5V, et correspond à une source de tension (en recepteur) de 5V avec une résistance interne nulle). Donc en gros, tu crée un "court circuit" entre le 12V et le 5V créé par la diode Zener : tu vas donc avoir 7V aux bornes de la résistance interne de ta source de tension et de la résistance interne de la diode Zener : comme les deux sont très faibles, tu vas beaucoup chauffer, et probablement cramer la diode zener ou l'alim (ou faire exploser ta lipo, ou vider ta pile 9V).

 

Bref, sans la résistance, tu vas détruire au moins un élément (alim, arduino ou zener).






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users