Pages: [1] 2 3   Go Down
Author Topic: Valeur compteur stocker en eeprom  (Read 3116 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour a tous,

Mon petit compteur fonctionne desormais parfaitement, mais j'aimerais stocker ce compteur en mémoire eeprom lorsque j'actionne un interrupteur (interrupteur qui arrête le processus) afin de récuperer le compteur au redemarrage du processus même en cas de coupure de l'alimentation.

Une fois le redemarrage aprés coupure de l'alimentation lorsque l'arduino redémarre il irait lire la dernière valeur sauvegardé.

Je bute surtout sur l'adresse où stocker ce compteur...

Et inversement pour aller le relire...


Merci pour votre aide
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1650
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
un peu de lecture
http://arduino.cc/en/Reference/EEPROM
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 110
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Petit rappel une adresse de l'eeprom est constituer de 8 bits d'information ce qui constitue un nombre ne dépassent pas 255 donc si tu veut un compteur qui va au delà il te faudra décomposer ton nombre en plusieurs fois 8 bits pour ensuite les enregistrés, et a la prochaine lecture les ré-assembler pour obtenir le nombre que tu avais enregistré,

voici un lien qui ma beaucoup aider lors d'un projet similaire au tien http://arduino.cc/en/Reference/Bitshift.
bonne chance.
Logged

www.hatokuro.comuf.com site consacrer au rétrogaming

Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mon nombre va augmenter de 1 jusqu'a 15 000 000 (maximum que je me suis fixé).

En gros je divise le chiffre maximum par 255 pour obtenir le nombre de bits ?


Le probleme c'est que je ne sais pasqu'elle sera la valeur du compteur a un instant T
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 110
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

le nombre de bit doit être fixer dé le départ en fonction du type de variable que tu souhaite manipuler

long 32 bit
int   16 bit /dans le cas de l'Arduino
char 8 bit

Dans le cadre de mon projet j'ai choisi long ( +2 147 483 647)
tu aura besoin décrire deux fonction une pour (dé-assemblage enregistrée) qui recevra ta variable et une pour (assemblage lecture) qui renverra une variable,

il va te falloir utiliser les opérateurs bitshift left et right qui serve retirée des bits ou ajouter des bits
par exemple si tu a le nombre 30 qui vaut en binaire 11110 et que tu utilise les opérateur suivant
11110<< 3 = 11110000 en décimal vaut 240
11110>> 3 = 11           en décimal vaut 3

En résumer les opérateurs te servirons a couper ta variable si tu en fais bonne usage et que tu trouve les bon calcule tu devrais obtenir des tranche de 8 bit qui une fois mi lun a coter de l'autre dans le bonne ordre recréera ta variable d'origine.

Pour les deux fonction je n'ai utiliser que l'opérateur bitshift la soustraction pour le dé-assemblage et l'addiction et l'opérateur bitshift pour l'assemblage.
« Last Edit: April 06, 2013, 05:22:22 pm by lacolombenoir » Logged

www.hatokuro.comuf.com site consacrer au rétrogaming

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1904
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si tu compte utiliser l'eeprom interne au micro-controleur sache que le nombre d'écritures garanties est plus faible qu'avec une Eeprom externe.

Si tu veux continuer à utiliser l'Eeprom interne sache qu'il n'y a pas que la librairie Wiring/Arduino dans la vie.
Il faut de temps en temps retourner aux sources : l'avr-libC
http://www.nongnu.org/avr-libc/
et en ce concerne ton besoin
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

La librairie Wiring/Arduino ne fait rien de plus qu'appeler une seule des fonctions fournies par Atmel et te cache l’existence des autres qui peuvent te simplifier la vie.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je n'ai plus qu'une sortie de libre sur la carte Arduino Uno... est-ce que ça suffit pour ajouter une eeprom externe ?


Mais de toute façon, je n'ai que 3 à 5 écritures par jours à faire, même à 50 écritures par semaine, la carte devrait durer 38 ans.


Donc pas de soucis pour écrire dans l'Eeprom interne. J'aimerais de toute façon conserver ma sortie libre pour éventuellement ajouter un voyant.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 110
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec une seul sortie la seul solution qu'il te reste est l'eeprom interne, et comme tu le dit toi même si peu d'enregistrement reste acceptable.
Logged

www.hatokuro.comuf.com site consacrer au rétrogaming

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Voila de quoi occuper ton dimanche smiley-wink
http://playground.arduino.cc/Code/EEPROMWriteAnything
http://playground.arduino.cc/Code/EEPROMLoadAndSaveSettings

Et un peu de doc sur le bitwise :
http://skyduino.wordpress.com/2013/04/05/tuto-le-bitwise-pour-les-nuls/
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je vais éplucher ça cette après midi, je vous donnerais le code en fin de journée.


Merci pour vos idées !


Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon j'ai lu relu et éplucher une la plupart des liens qui m'ont été donnés et j'ai pas mal googolé cette après midi.


ça rentre, petit à petit.

Je dois lire la valeur de l'eeprom dans le setup et l'écrire dans le void loop. Je peux donc incrémenter mon compteur avec la fonction compteur ++ (qui actuellement fonctionne parfaitement) et avec la fonction :


EEPROM.write (adresse, compteur);


je suis normalement capable d'écrire la valeur du compteur en mémoire morte afin de pouvoir la relire après extinction puis rallumage de l'arduino.


Tout ce complique avec l'adresse...


Si j'écris EEprom.write (0.compteur);

Et que mon compteur affiché sur l'écran LCD est = à : 520 000, la valeur stockée dans l'Eeprom sera bien 520 000 et non "compteur" ?


Et lorsque je vais redémarré l'Arduino, il ira bien lire à l'adresse "0" la valeur 520 000 ?



Voilà une fois que j'aurais ces précisions je commencerai à coder... mais il me reste encore une ou deux questions... mais j'attends un peu, je ne veux pas vous faire peur  smiley

Merci de m'éclairer.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 110
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Une adresse ne dépasse pas 8 bits donc 255 en décimal, du moins avec les fonctions fournit par Arduino,
Pour répondre a ta question si tu enregistre 520 000 (1111110111101000000) tu obtiendra a la lecture  64 (01000000).
Si ta variable ce nomme compteur ce sera ce quelle contiendra qui sera enregistrée et non compteur

Pour ce qui est de la solution avr qui ta été proposer par "68tjs" je ne peux pas te répondre car je programme exclusivement via l'ide de l'Arduino.
« Last Edit: April 07, 2013, 01:56:26 pm by lacolombenoir » Logged

www.hatokuro.comuf.com site consacrer au rétrogaming

Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc la solution n'est pas à regarder du coté de l'Eeprom mais plutôt du coté de la mémoire flash ?


Parce que 520 000 c'est juste un exemple. L'arduino est branché pour contrôler un appareil de production sur lequel on doit intervenir à environ 10 000 000 de cycle pour une grande révision. Faire la révision avant est inutile est couteuse et passer le cap faire encourir des risques.

D'où l'intérêt de compter electroniquement et de prévenir lorsque le compteur arrive au chiffre indiqué. Stocker en Eeprom était donc la solution facile, maintenant en flash peut-être ?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 110
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

l'eeprom à l'avantage de conserver ce chiffre en mémoire ses donc très pratique pour le consulté même après une panne de courent,
Couper ta variable en 4 comme je te l'ai proposer n'est pas très compliquer pour exemple je peu te montrer mes deux fonctions sauf si tu préfère tenter de le faire par tes propre code ?
Logged

www.hatokuro.comuf.com site consacrer au rétrogaming

Offline Offline
Sr. Member
****
Karma: 0
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A je veux bien si ça ne te gêne pas, car je suis loin d'être un expert....

Je me débrouille au prix de dizaine d'heure de surf....

D'ailleurs quelqu'un connait un bon livre pour programmer en C qui serait utile pour l'arduino ?
Logged

Pages: [1] 2 3   Go Up
Jump to: