Sari la conținut
ELFORUM - Forumul electronistilor

Extended EEPROM library for Arduino


Vizitator

Postări Recomandate

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 spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Zile populare

Top autori în acest subiect

Imagini postate

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.

Editat de Vizitator
Link spre comentariu

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 spre comentariu

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 spre comentariu

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.

Editat de Vizitator
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări