Jump to content
ELFORUM - Forumul electronistilor
Guest

Extended EEPROM library for Arduino

Recommended Posts

Salut!

A folosit cineva o memorie externa EEPROM, pt extinderea librariei?

De exemplu:

Am un Arduino NANO, si vreau sa incarc in memoria externa, EEPROM I2C,  anumite caractere, texte,... pt a fi afisate pe un display (LCD2004, OLED,...).

S-au, vreau sa am unele pagini de meniu, care acestea nu trebuie sa stea in NANO. De fapt nu este loc.

Am cautat pe net, dar nu am gasit un exemplu concret: cum incarc EEPROM-ul de exemplu!!!

Exista o libraie EEPROMex library, dar nu am inteles mai nimic.

 Am si Arduino Mega, dar nu imi incape in cutiuta montajului.

Daca nu gasesc, o solutie ar fi cu STM32n. Dar cu acesta, nu am lucrat deloc.

 

P.S.: Doar pentru cei care au experimentat, sau care cunosc.

 

Link to comment
Share on other sites

Imi cer scuze, am uitat sa mentionez si memoria care vreau sa o folosesc (desi, avem dreptul sa reeditam oricand vrem, dar nui frumos): 24LC32,...24LC256, 24LC512, sau din seria 93LCxx.

Edited by Guest
Link to comment
Share on other sites

ceea ce vrei tu sa faci are 2 ramuri:

partea "simpla" e sa citesti eeprom-ul

#include <Wire.h>
#include <extEEPROM.h>
#define memAddr 0x50
#define pageSize 32
#define refreshPeriod 1000

const uint32_t totalKBytes = 32;         //for read and write test functions
extEEPROM eep(kbits_32, 1, 32);         //device size, number of devices, page size
uint8_t eepData[pageSize];


void eeReadPage(int pageNo) {
  uint32_t addr = (uint32_t)pageNo * pageSize;
  eep.read(addr, eepData, pageSize);
}

void eeWritePage(int pageNo) {
  uint32_t addr = (uint32_t)pageNo * pageSize;
  eep.write(addr, eepData, pageSize);
}

char* getMsgText(int cardinal) {
  eeReadPage(cardinal);
  return (char*)eepData;
}

void setMsgText(int cardinal, String newMessage) {
  int i = 0;
  while ((i < pageSize - 1) && (newMessage[i] != 0x00)) {
    eepData[i] = newMessage[i];
    i++;
  }
  while (i < pageSize) {
    eepData[i] = 0x00;
    i++;
  }
  eeWritePage(cardinal);
}

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

  uint8_t eepStatus = eep.begin();//eep.twiClock400kHz);   //go fast!
  if (eepStatus) {
    Serial.print(F("extEEPROM.begin() failed, status = "));
    Serial.println(eepStatus);
  }
}

void loop() {
  unsigned long ticksNow = millis();
  static long ticks = 0;
 
  if (ticksNow > (ticks + refreshPeriod)) {
    ticks = ticksNow;
    Serial.println(getMsgText(0));
  }

}

de scris in eeprom, ori folosesti functiile din sketch,

//setMsgText(int cardinal, String newMessage);
setMsgText(0, "Hello World!");

ori il scrii altfel (extern)

Link to comment
Share on other sites

Poti folosi ceea ce a scris userul deejay2k1, insa tine cont de faptul ca, functie de aplicatie, vei intampina probleme (ti se va bloca programul).

STM32 nu are EEPROM si daca vei folosi stm32arduino vei ajunge foarte repede la limita memoriei flash (depinde de librariile folosite).

Link to comment
Share on other sites

Da, se pare un pic cam complicat.

Proiectul pe care vreau sa il fac, este un releu de timp multifunctional dar cu 4 relee, nu cum sunt acestea

zr5mf011~2101193.jpg

Deocamdata proiectul este demo https://www.youtube.com/watch?v=15fQBlMZ8Yk.

Am vrut sa am mai multe functii, numarator invers (cum este in fisierul video), numarator ore de functionare pompe, si inversarea acestora dupa n ore de functionare pentru intalatiile hidrofor cu mai multe pompe, comutarea alternativa a doua motoare pe un singur convertizor de frecventa (schema realizata cu relee de timp pt delay accelerare/decelerare motor, care este functionala si a costat destul de mult, fata de un releu de timp realizat cu arduino),..

Cred ca pana la urma, ca sa nu ma complic, o sa fac programul doar pentru aplicatia curenta, si o sa am doar librarii pe care o sa le atasez in cod, in functie de aplicatie. Asa cred ca o sa scap de probleme - blocare microcontroler sau display -,  meniu complex,...

Am vrut sa folosesc memoria EEPROM I2C pentru a avea librariile cu functii a releului de timp, si ele sa fie accesate in functie de setarile utilizatorului.

Daca fac releul de timp dedicat "aplicatiei", releul nu mai poate fi refolosit decat pentru acel scop sau mod de utilizare.

Multumesc mult de ajutor deejay2k1 si nico_2010.

Edited by Guest
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines