aide pour newbie :)

Bonjour et merci pour votre communauté.

Il y a quelques mois j'ai découvert l'arduino et ai réalisé et installé un projet d’éclairage ( plusieurs circuits led sont commandés avec un seul bouton poussoir selon des longueurs d'appui différentes validées par des bips différents, plus d'autres petites choses).

Je suis à l'aise en électronique faisant mes pcb j'ai donc programmé et branché directement sur mon pcb un 328 en 8 mhz. et le tout marche bien. ( après la surprise de voir mes leds s'allumer toutes seules au court d'un orage lol ... j'ai donc reprogrammé en temporisant ces fronts montants courts indésirables et le tout est rentré dans l'ordre :) )

J'ai une question de newbie côté programmation : suite à une coupure de courant suffisamment longue pour vider les condo d'alim du 328 j'aimerai le cas échéant qu'au reboot du 328 les circuits d'eclairage en marche avant la coupure se remettent à l'état de marche. je pensais donc inclure à chaque routine de mise en marche d'un circuit envoyer dans une mémoire non volatile cet état et dans le void setup lire cet état. donc ma question ... le 328 s'initialisant au reboot y-a-til une mémoire non volatile qui pourrait servir à cette petite donnée ou dois-je passer par un module mémoire flash ?

Merci d'avance, j'ai trouvé un début de réponse avec l'instruction PROGMEM

je vais m’intéresser un peu plus à l'architecture des 328 mais ça risque de prendre un peu de temps lol

bonjour ton probleme semble etre un relatif classique : - detection de manque d'alim "permanente" - soutient par alim residuelle ( supercap ou autres) - inscription des valeurs à sauvegarder en EEPROM - extinction pzr manque d'alim

  • au ON suivant , lecture des valeurs en EEPROM

edit : Progmem n'est pas la solution

bonjour ton probleme semble etre un relatif classique : - detection de manque d'alim "permanente" - soutient par alim residuelle ( supercap ou autres) - inscription des valeurs à sauvegarder en EEPROM - extinction pzr manque d'alim

  • au ON suivant , lecture des valeurs en EEPROM

edit : Progmem n'est pas la solution

[/quote]

Merci je peux partir maintenant sur la bonne voie et faire mes recherches :)

Encore merci Artouste pour le temps que ça m'a fait gagner ça marche nikel

problème ...

Je pensais utiliser une entrée ana pour surveiller le 5vdc pensant que le microcontrôleur aurait le temps d'envoyer sur l'eeprom mon info de coupure EDF mais même en retardant la chute de tension avec des gros condensateur 22mF il ne le fait pas ... curieux alors que sur l'echelle de 1024 j'ai réglé ça à 1000 en détection de seuil donc dès l'apparition de la chute de tension.

Si je laisse le microcontrôleur alimenté et baisse ou coupe l'entrée ana ça marche bien.

C'est donc mal parti pour la détection de coupure pour déclencher l'envoi d'une valeur en eeprom.

Après si je me passe de cette detection je peux envoyer les infos de marche ou d'arrêt de l'eclairage sur l'eprom à chaque allumage ou extinction, à une moyenne de 10 on et 10 off par jour ça fait à 100.000 écritures données pour l'eeprom 25 ans de bons et loyaux services

Bonjour

Y a aussi la possibilité d'utiliser un DS1307. Outre sa fonction RTC (pas forcément utile ici), ce circuit présente aussi l'intérêt d'avoir une RAM de 64 octets (dont 56 sont d'usage libre), sans limite de réécriture, qui reste sous tension en permanence grâce à une pile.

Tu peux par exemple y écrire l'état de ton système chaque seconde, et reprendre là où tu en étais au redémarrage.

Avec quelques précautions : 1) prévoir quelques octets de signature constante, pour détecter toute défaillance de la pile. 2) écrire les données en double, dans deux endroits distincts de la RAM, au cas où la coupure intervienne au moment de l'écriture. Cela garantit d'avoir toujours au moins un jeu de données valides en RAM, à exploiter au redémarrage.

C'est presque dommage d'utiliser un DS1307 rien que pour ça, mais vu le prix...

Merci encore pour le partage de ton savoir, j'ai un DS1302 dans les tiroirs qui en plus je crois gère la recharge pour un supercap par exemple; bon lui n'a presque rien en mémoire ... 31 mais ça suffit pour mes besoins.

J'aime bien comprendre et je pense avoir trouvé l'explication à mon problème de détection de coupure, ça détecte bien mais ça n'a plus la tension suffisante pour écrire sur l'eeprom

pour écrire dans l'EEPROM, il est nécessaire de disposer d'une tension d'alimentation minimale, supérieure à la tension requise pour faire tourner le µC

après je peux toujours enregistrer les valeurs au fur et à mesure sur l'eeprom en suivant par exemple cette méthode

Exemple d'enregistrement de valeurs comprises entre 0 et 254 (0xFE) :

1- Initialisation de l'EEPROM => mettre la valeur 0xFF à toutes les adresses

2- A chaque enregistrement d'une nouvelle valeur, l'enregistrer à l'adresse suivante (la valeur 0xFF étant interdites car elle représente la valeur de zone non utilisée)

=> donc pour détecter la dernière valeur, c'est la valeur qu'il y a juste avant la première valeur 0xFF

=> il faut diviser la mémoire au moins en deux zones pour gérer le cas où l'on arrive en fin de zone : quand la zone 2 est rempli, il faut effacer la zone 1

Avec cette méthode (pour une EEPROM de 1024 octets), tu pourras donc sauvegarder 1024x100 000/2 = 51.2 millions de fois un octet en aillant au moins les 1024/2=512 dernières valeurs encore en mémoire

mais toute chute de tension risque de génerer des problèmes d’écriture sur l'eeprom; imaginons que j'ai éteint mon éclairage avant de partir en vacance, et la tension n'était pas suffisante pour l’écriture en eeprom, une coupure EDF allumerait l'éclairage au retour car ma dernière position enregistrée serait allumé.

Donc c'est bien ta solution de ds1307 qui me semble la plus judicieuse, en y metant un supercap pour ne pas avoir à changer la pile au bout de qq années et des octets de signature pour vérifier l'état et signaler un défaut par une led.