Bonjour,
Je travaille actuellement sur un projet de récolte de données à envoyer par sms( via arduino avec un module SIM900). Je dois pouvoir enregistrer ces données avant de les regrouper et les envoyer par SMS. Par exemple je dois mesurer un courant avec un capteur adéquat, je dois enregistrer la valeur obtenue et genre une minute après je dois lire cette valeur, y additionner une autre valeur et ensuite la réenregister ( au même emplacement je suppose afin de garder de la place) et ainsi de suite chaque minute jusqu'à arriver à une valeur désirée. Par la suite je dois pouvoir envoyer la valeur qui a été quantifiée. J'ai lu sur le forum que l'eeprom interne de l'arduino n'était pas prévue pour faire beaucoup d'enregistrement donc avec mon système je risque de rapidement la mettre à genoux. Une solution serait l'utilisation d'une eeprom externe ( une carte SD serait un peu gros ) mais je ne sais pas si elle est facilement programmable avec mon cahier des charges. Avez vous des conseils sur ce composant et sa programmation?
La mémoire vive de l'Arduino ne suffit pas, vu que tu réutilises le même emplacement mémoire ?
Ou c'est pour faire face aux coupures de courant de la carte ?
A te lire tu n'as besoin d'aucune mémoire supplémentaire, la RAM fait très bien l'affaire. Si maintenant il s'agit de maintenir ces données même si le courant vient à être coupé, il faut une mémoire morte. Vu que tu ne parles que d'une variable, et à raison d'un enregistrement par minute, effectivement le secteur d'EEPROM concerné sera statistiquement mort au bout de 70 jours.
Deux solutions :
flash : une bête carte mémoire mais un peu le char pour écraser la mouche
Moi je bosse avec une Carte SD ( et carte MEGA2560 ), et je ne touve pas cela tres rapid !
Qui a deja observé ceci ?
Avantage de la SD est que l'on peut lire les donner sur un PC, et en stock quand meme un sacré paquet ( 2giga, pour ma carte )
Sinon, qu'elle alternative en cas de gros besoin de stockage ?
Mise a part balancer cela sur internet et de stocker cela sous forme de fichier ou base de données mySQL ( mais ca fait du dev dans l'arduino et sur le server internet ).
Moi je bosse avec une Carte SD ( et carte MEGA2560 ), et je ne touve pas cela tres rapid !
Qui a deja observé ceci ?
...
Bonjour Nomman
la "rapidité" etant une notion tres et particulirement relative, tu t'es trouvé coinçé par cette notion dans quel(s) contexte(s) ?
sous arduino ?
bha rien que le temp de d'ouvrir un fichier, de lire un simple Int ou Int[8], de refermer, ca doit bien prendre dans les 3secondes !
pour ecrire, je n'ai pas l'impression que cela aille plus vite !
Donc, j'en arrive a la conclusion, c'est l'ouverture des fichier qui est longue !
Pour le moment je n'utilise la SD que pour aller lire des valeurs pour l'init de mes programmes ( un genre de param.ini quoi )
Par la suite je vais datalogguer des infos, sous forme CSV.
Bon, ok j'ai du monde sur ma carte ( 6 capteurs de temparature DS18B20, 1 Servo, Un shield 2 ligne + bouton, une carte ethernet + SD, 2 sortie sur relais, et un RTC DS1307 ), c'est p'tre que j'ai deja trop chargé la mulle !
Nommam:
bha rien que le temp de d'ouvrir un fichier, de lire un simple Int ou Int[8], de refermer, ca doit bien prendre dans les 3secondes !
pour ecrire, je n'ai pas l'impression que cela aille plus vite !
Donc, j'en arrive a la conclusion, c'est l'ouverture des fichier qui est longue !
Pour le moment je n'utilise la SD que pour aller lire des valeurs pour l'init de mes programmes ( un genre de param.ini quoi )
Par la suite je vais datalogguer des infos, sous forme CSV.
Bon, ok j'ai du monde sur ma carte ( 6 capteurs de temparature DS18B20, 1 Servo, Un shield 2 ligne + bouton, une carte ethernet + SD, 2 sortie sur relais, et un RTC DS1307 ), c'est p'tre que j'ai deja trop chargé la mulle !
Il faudrait que je retrouve (et avec quelle lib) , mais une fois la phase d'init (ouverture) passée
il me semble que l'ecriture sequentielle d'une simple valeur (et la lecture) etait acceptable dans l'environnement arduino .
evidemment si pour logger un simple byte acquis, tu "pisse" une ligne de 100 "ascii" ça peut coincer
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é).
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
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.
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.