Bonsoir,
je teste en ce moment en vue d’intégration de la sauvegarde sur une EEPROM
j'ai récupéré un sketch ICI
je l'ai adapté à mon cas et lorsque je le lance
en lecture il me donne comme valeur enregistrée pour tout les octets de 255!
pourtant en théorie, j'enregistre des nombres aléatoires
pourriez vous m'aider ?
voici le code que j'ai modifié: j'ai gardé la structure d’écriture et de lecture
/*
* sketch test lecture ecriture EEPROM externe en adresse 0x58
*
* 08/08/19 23h
* ne fonctionne pas pourquoi? en lecture = toujours 255!!
*/
#include <Wire.h>
#define disk1 0x58 //Address of 24LC256 eeprom chip
byte b;
unsigned int i ;
byte valeur;
void setup(void)
{
Serial.begin(9600);
Wire.begin();
unsigned int address = 0;
randomSeed(analogRead(0));
Serial.print(" debut ecriture sur l eeprom");
for ( i = 0; i < 56; i++)
{ b=random(0, 250);
Serial.print(" Ecriture du Byte ");
Serial.print(i);
Serial.print(" = ");
Serial.print(b);
writeEEPROM(disk1, i, b);
Serial.print(" valeur ecrite: ");
Serial.println(readEEPROM(disk1, i));
delay(100);
}
for (i = 0; i < 56; i++)
{
Serial.print("lecture : ");
Serial.print(i);
Serial.print(" = ");
Serial.println(readEEPROM(disk1, i));
delay(100);
}
}
void loop()
{
}
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
{
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(data);
Wire.endTransmission();
delay(5);
}
byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.read()) rdata = Wire.read();
return rdata;
}
merci elektrax,
mais l'adresse m'a été trouvée par le sketch ICI
et si je modifie physiquement l'adresse sur mon EEPROM, le testeur le retrouve bien.
par contre je ne suis pas certain que ce soit une 24LC256.. c'est une puce sur un petit CI acheté chez ali
Les modules DS1302; DS1307; DS3231 contiennent très souvent deux boîtiers noir.
Le premier boîtier est celui de la RTC.
Le deuxième boîtier est une EEPROM : la référence est gravée sur le boîtier, avec la référence on peut trouver sa capacité.
Cette EEPROM devait, je pense, servir à enregistrer les dates de remise à l'heure.
Force est de constater qu'elle est completement ignorée des auteurs de bibliothèques.
Arzou:
Ha bon? Le sketch ne le Voit pas. Il utilise La meme adresse? Sinon, comment on l'utilise ?
Le sketch ne le Voit pas.
Ben c'est parce que les auteurs d'exemple n'ont jamais vu son utilité.
Il utilise La meme adresse?
Évidement non. En I2C il ne peut y avoir 2 composants avec la même adresse.
Pour trouver l'adresse le plus simple est d'utiliser un programme scanner I2C.
Sur un même réseau I2C on peut mettre 8 boîtiers EEPROM : 3 bits de l'adresse sont configurables (A0 A1 A2).
Rappel : on ne peut mettre qu'une seule RTC, toutes les RTC ont la même adresse unique.
Sinon, comment on l'utilise ?
Je ne sais pas s'il existe des bibliothèques pour gérer une EEPROM I2C, il faudrait faire une recherche sur la référence, je n'ai pas de modules RTC actuellement sous la main donc je ne connais pas la référence..
Sinon c'est expliqué dans les datasheets,
C'est une histoire de sélection de numéro de registre et d'écriture ou de lecture dans le registre sélectionné.
Lire ou écrire ne doit pas être difficile, savoir retrouver une information particulière au milieu des autres demande de mettre en place une gestion.
68tjs: Il utilise La meme adresse?
Évidement non. En I2C il ne peut y avoir 2 composants avec la même adresse.
Pour trouver l'adresse le plus simple est d'utiliser un programme scanner I2C.
apparemment non, sur mon module rtc, il n'y a pas d'EEPROM.