Go Down

Topic: Utilisation d'une mémoire externe (Read 5998 times) previous topic - next topic

john_lenfr

Ouaip, je commande plus du tout chez Farnell donc je verrais si j'en ai réellement l'utilité dans mes projets.

Petrus6248

Bonjour,
Concernant l'Eeprom interne, j'ai lu qu'on ne peut écrire environs que 100.000 et vu que j'écris environs toute les minutes, ça risque d'être court. Je fais cela afin de prévenir une perte de données due à  une  coupure d'alimentation.Sinon j'ai sous la main une Eeprom 24LC512 qui elle permet d'ecrire plus d'1 million de fois (un peu mieux, c'est déjà ça). Sinon j'ai lu sur des datasheet que les cartes SD mettaient du temps à être lue. Et en regardant les bibliothèques dans référence je n'ai pas trouvé comment relire une données bien précise sur la carte donc j'ai un peu cherché ailleurs. 

B@tto: j'ai calculé que la FRAM pourrait travailler 1902587 années ( normalement ça serait assez) mais question, est il facile de lire et d'écrire au même endroit pour ensuite transmettre la données avant de l'effacer ( condensé de mon procédé).

Un grand merci pour vos conseils.

B@tto

Avec ma lib l'utilisation est quasi identique qu'avec la lib EEPROM, donc très facile. La seule différence fondamentale c'est que la mémoire est organisée en deux page de 512 bytes, donc quand on écrit un byte il faut la page, l'adresse du byte et la valeur à y écrire. Idem en lecture sauf évidemment la donnée à écrire qui elle est retournée par la fonction
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Petrus6248

La valeur que je vais écrire sera un float  surement. Je vais un peu regarder ta librairie, ça à l'air plutot interessant. Et en même temps je vais regarder pour programmer une Eeprom extérieure 24LC512 que j'ai sous a main pour voir ce que ça raconte aussi. Si vous avez une libraire pour ce composant ça m'intéresse.

Un grand merci.

haifger

Vu la façon dont tu décris les choses (mesure toutes les minutes, envois réguliers), y'aurait pas déjà une RTC type DS1307 dans ton système auquel cas elle contiendrait assez de NVRAM pour faire ce que tu souhaites ?

Sinon, bien que l'ajout d'une mémoire externe soit sans doute la solution la plus « facile », elle n'est sans doute pas nécessaire ici. Tu pourrais utiliser un double buffer circulaire[1] dans l'EEPROM. Si on suppose que ton EEPROM fait 1024 octets, en en réservant 512 pour le buffer de données (qui font 4 octets, donc 128 données possibles), et 128 octets pour le buffer de statut, cela te permettrait d'allonger la durée de vie de la mémoire à 100000x128=12,8 millions de cycles d'écriture, soit environ 24 ans en écrivant une fois par minute. Et il te reste encore 384 octets disponibles en EEPROM pour écrire autre chose.

Y'a même une note d'application d'Atmel pour expliquer ce genre de choses : http://www.atmel.com/Images/doc2526.pdf


[1] : http://fr.wikipedia.org/wiki/Buffer_circulaire

john_lenfr

C'est à dire si j'ai bien compris qu'au lieu d'écrire à la même adresse on se réserve par exemple 128 adresses différentes ce qui fait qu"on écrit 128 fois moins sur une, ce qui donne 24ans de longévité.
J'ai bien compris?  :smiley-mr-green:

haifger


C'est à dire si j'ai bien compris qu'au lieu d'écrire à la même adresse on se réserve par exemple 128 adresses différentes ce qui fait qu"on écrit 128 fois moins sur une, ce qui donne 24ans de longévité.
J'ai bien compris?  :smiley-mr-green:

Tout à fait :)

B@tto


La valeur que je vais écrire sera un float  surement. Je vais un peu regarder ta librairie, ça à l'air plutot interessant. Et en même temps je vais regarder pour programmer une Eeprom extérieure 24LC512 que j'ai sous a main pour voir ce que ça raconte aussi. Si vous avez une libraire pour ce composant ça m'intéresse.

Un grand merci.


Pour les float il va falloir grujer par contre ... Comme les float ne ressemble pas aux entiers c'est beaucoup plus compliqué à mettre en mémoire, et je n'ai pas créer de fonction directement. Cepandant rien n'empêche par exemple de faire des multiplication/division par multiple de 10 ;) tout dépend du nombre de chiffres significatifs que tu veux
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

XavierMiller

même pas : tu alloues sizeof(float) et tu utilises memcpy()

Petrus6248

Bonjour et désolé pour ma réponse tardive mais il est difficile de gérer plusieurs choses en même temps, je peux maintenant me consacre pleinement à la programmation de la mémoire. Voila un résumé de ce que doit être capable de faire mon programme:
mon programme mesure et quantifie une consommation de courant qui doit être enregistrée au fur et à mesure ( les données doivent être écrasée à chaque nouvel enregistrement). Une fois la consommation atteinte, on stocke la valeur finale. On répète l'ensemble jusqu'à avoir 5 données enregistrées que l'on envoi dans un sms grâce à un module sim900. une fois le sms envoyé, on efface les 5 valeurs et on recommence tout depuis le début. tout le programme est déjà fait, il n'y à plus qu'a ajouter l'enregistrement et la lecture de données. par un souci de temps j'aimerai utilisé l'eeprom 24lc512 que j'ai sous la main ( je verrai ensuite si je dois le remplacer ou non). est ce qu'il existe des programmes fait pour ce composant qui me permettrait de stocker et lire des valeurs??? merci à vous

Go Up