Go Down

Topic: Mise en mémoire d'étalonnage hors tension (Read 3114 times) previous topic - next topic

Rigolo

Bonjour,
j'aimerais savoir si il existe la possibilité de garder en mémoire une ou deux valeur d'étalonnage (eprom?) après une mise hors tension de l'arduino. par exemple un integer de 0 à 1023. Si oui combien au maxi.
merci.

Artouste


Bonjour,
j'aimerais savoir si il existe la possibilité de garder en mémoire une ou deux valeur d'étalonnage (eprom?) après une mise hors tension de l'arduino. par exemple un integer de 0 à 1023. Si oui combien au maxi.
merci.

bonjour
sur un uno il y a 1024 bytes d'eeprom dispo
un int tient sur 2 bytes

68tjs

Ben oui et en plus tu as donné la réponse à ta question .
Combien au maxi ?
Sans connaître le modèle de micro-controleur c'est difficile de répondre : il existe des bouteilles d'un demi litre, d'un litre, de 2 l, de 5l, de 10l  etc  
Pour les micros c'est pareil. Tu vas sur le site Arduino rubrique produit et en cliquant sur le modèle de ta carte tu auras tout les renseignements.
Tu vois c'est pas difficile de trouver de l'information.

Rigolo

#3
Sep 22, 2014, 06:34 pm Last Edit: Sep 22, 2014, 06:39 pm by Rigolo Reason: 1
Excusez moi je suis un peu neuneu  :D.  merci

Artouste


Excusez moi je suis un peu neuneu  :D. Donc seulement 2 octets pour un arduino uno?
c'est pas beaucoup. Et comment on y accede?

heu , t'a pas  tout du bien comprendre de ma reponse  :smiley-mr-green:

sur uno il y a 1024 bytes d'eeprom dispo

une valeur comme 1024 ça tient sur un INT , un INT occupe 2 bytes
tu peux disposer de 512 INT en 'eeprom sur UNO



68tjs


Excusez moi je suis un peu neuneu  :D.  merci

Excuse moi si je complique le débat mais c'est pour la bonne cause.  :smiley-mr-green:
C'est vrai qu'il y a 1204 octets disponibles (octet = byte en français ) mais on ne peut stoker  au maximum que 512 valeurs que ce soit des octets où des int (un "int" occupe deux octets).

Je n'ai pas compris la raison. Ce n'est pas une limitation de la classe EEPROM construite par Wiring/Arduino .
C'est déjà comme cela dans les fonctions de l'avr-libc.
J'avais trouvé une fois les sources des fonctions de l'avr-libc, je ne les retrouve plus. De toute façon je n'y avais strictement rien compris.

Artouste


...
Excuse moi si je complique le débat mais c'est pour la bonne cause.  :smiley-mr-green:
C'est vrai qu'il y a 1204 octets disponibles (octet = byte en français ) mais on ne peut stoker  au maximum que 512 valeurs que ce soit des octets où des int (un "int" occupe deux octets).



bonsoir 68tjs
Tiens  je ne connaissais pas cette "singularité" !  :smiley-mr-green:
c'est à avoir dans un coin de sa tete le cas echéant "devant le probleme"   8)

B@tto

Salut les gars,

J'ai jamais tenté de remplir toute une EEPROM mais c'est la première fois que j'entends parler de cette limite. Comment se traduit elle ? Blocage si adresse > 512 ?


Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

J'ai parlé de mémoire, je viens de revenir aux sources --> toujours la fameuse datasheet

C'est le registre d'adresse qui est limité à 512
voir pj (pour le 328p)

B@tto

T'as pas la bonne datasheet visiblement => http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet.pdf

Page 21 => 10 bits pour le 328p
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

Exact.  ]:D

C'est la version que j'avais téléchargé qu'en j'avais commandé une UNO.
Emmer**nt maximum c'était la révision D et la partie concernant l'EEPROM a été corrigée  dans la version juste après : la version E.

Donc je n'ai rien écrit, vous n'avez rien lu, et moi je me plonge dans les erratas.

elektrax

si on ne peut adresser que  512 octets  on ne peut ecrire que 256 INT ?

68tjs

Non erreur de ma part  je m'étais fié à une version de la datasheet  qui malheureusement avait été "mal mise à jour" par Atmel.

Batto à raison : sur la version corrigée de la datasheet il y a bien 10 bits pour les adresses : soit 1024 adresses.

Donc on revient au début : capacité de stockage 1024 "octets" ou 512 "integer" parce que dans l'avr-libc les "integer" sont  codés sur 2 octets.

jean-I


J'ai jamais tenté de remplir toute une EEPROM mais c'est la première fois que j'entends parler de cette limite. Comment se traduit elle ? Blocage si adresse > 512 ?



j'ai jeté un coup d'oeil aux librairie, il n'y a pas de verification du seuil limite.
EEPROM.write(4096, 55); compile et s'execute sans soucis (adresse sur 12 bits) sur UNO.
l'adressage des registres du datasheet laisse supposer qu'on masque les bits de poids forts inutilisé. ca revient donc a faire, sur UNO, 1K, 10 bits:
EEPROM.write(0, 55);

essaie:

Code: [Select]

#include <EEPROM.h>

int addr = 0;
byte val = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
 Serial.println("0, 1, 2 :");
 val = EEPROM.read(0);
 Serial.println(val);
 val = EEPROM.read(1);
 Serial.println(val);
 val = EEPROM.read(2);
 Serial.println(val);

 Serial.println("4096 et 4097 :");
 val = EEPROM.read(4096);
 Serial.println(val);
 val = EEPROM.read(4097);
 Serial.println(val);
 val = EEPROM.read(4098);
 Serial.println(val);

 Serial.println("suspens...");
 delay(500);

 EEPROM.write(4096, 55);
 EEPROM.write(4097, 56);
 EEPROM.write(2, 57);

 Serial.println("0, 1, 2 :");
 val = EEPROM.read(0);
 Serial.println(val);
 val = EEPROM.read(1);
 Serial.println(val);
 val = EEPROM.read(2);
 Serial.println(val);

 Serial.println("4096 et 4097 :");
 val = EEPROM.read(4096);
 Serial.println(val);
 val = EEPROM.read(4097);
 Serial.println(val);
 val = EEPROM.read(4098);
 Serial.println(val);

 while(true) {}
 
}


Go Up