I2C FRAM Breakout
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
I2C FRAM Breakout
Ahoj,
chtěl bych se zeptat, dlouho hledám nějakou příručku na programování paměti I2C FRAM Breakout 32 KB a to zápis a čtení dat. Nemohu však na Internetu nic smysluplného najít... Dále bych se chtěl zeptat, do FRAM paměti chci zapisovat čísla od 0 do 50 (tzn. vlezu se do osmibitového čísla). Je však nějak možné zapisovat do této paměti i delší číslo? např. 32 bit? Děkuji.
chtěl bych se zeptat, dlouho hledám nějakou příručku na programování paměti I2C FRAM Breakout 32 KB a to zápis a čtení dat. Nemohu však na Internetu nic smysluplného najít... Dále bych se chtěl zeptat, do FRAM paměti chci zapisovat čísla od 0 do 50 (tzn. vlezu se do osmibitového čísla). Je však nějak možné zapisovat do této paměti i delší číslo? např. 32 bit? Děkuji.
Re: I2C FRAM Breakout
Overview | Adafruit I2C FRAM Breakout | Adafruit Learning. Kliknutím na zelené tlačítko "Download Adafruit_FRAM_I2C Library" si stáhni knihovnu, kde máš příklady kódu k otestování paměti.
Re: I2C FRAM Breakout
Děkuji mockrát
Re: I2C FRAM Breakout
Chtěl jsem se zeptat, jelikož se do jedné paměťové buňky vejde číslo 0-255 je nějakým způsobem možné uložit číslo delší? Např. 1234567?? Děkuji.
Re: I2C FRAM Breakout
Zajiste - ulozit ho po jednotlivych bytech (idealne stejne jako to mas v pameti)
Kód: Vybrat vše
int START_IN_FRAM = 0x20; // nebo kam to chci ulozit
unsigned long long VeryLongVar = 0x12345678; // nebo libovolna jina promenna a hodnota
...
byte *p=(uint8_t *)VeryLongVar; // co chci psat
byte size=sizeof(VeryLongVar); // jak je to dlouhe
int addr=START_IN_FRAM; // kam to chci psat
for(int i=0; i<size; i++, p++) {fram.write8(addr+i,*p);}; // zapis po bytech
int next_addr=addr+size; // kam muzu psat neco dalsiho
Re: I2C FRAM Breakout
Děkuji za radu.. A jak to prosím tě přečíst? Už se o to snažím 2 hodiny a vždy mi to načte úplně jiné číslo... Chci uložit jen hodnotu integer. (bude tam číslo do 2000)
Re: I2C FRAM Breakout
Uplne stejne, jen misto zapisu cteni
Kód: Vybrat vše
int START_IN_FRAM = 0x20; // nebo kde to je
unsigned long long VeryLongVar = 0; // teoreticky nulovani neni potreba
...
byte *p=(uint8_t *)VeryLongVar; // co chci cist
byte size=sizeof(VeryLongVar); // jak je to dlouhe
int addr=START_IN_FRAM; // kam to chci psat
for(int i=0; i<size; i++, p++) {*p=fram.read8(addr+i);}; // cteni po bytech
Re: I2C FRAM Breakout
Děkuji za radu, pak vyzkouším... Moc nechápu ten ukazatel... Mohl bys mně prosím to nějak jednodušeji vysvětlit? A je možno místo unsigned long long použít int, když nechci ukládat větší číslo, než 65 tisíc?
Re: I2C FRAM Breakout
Muzes pouzit libovolny typ.
Trik je v tom, ze pamet je vlastne pole bytu (bunek o velikosti jeden byte) a do ni se vsechno uklada.
Takze kdyz si vezmes ukazatel na 1 byte, tak ukazuje prave na jednu bunku pameti (a to na co ukazuje je nutne cislo od 0 do 255). Kdyz ten ukazatel (nikoli to na co ukazuje) zvysis o jedna (p++), tak ukazuje na dalsi bunku v pameti.
Takze kdyz ho nechas ukazovat na zacatek nejake promenne a pak ho postupne zvysujes o jedna (posouvas na dalsi bunku) tolikrat, kolik bytu ta promenna zabira, tak postupne ukazuje na jeji jednotlive casti, jak jsou ulozeny v pameti.
A kdyz vezmes na co prave ukazuje (jeden byte), tak to muzes vzit a ulozit treba do nejake bunky v te FRAM. A kdyz to same udelas s dalsi a dalsi bunkou, tak tam postupne preneses celou tu promennou.
A prenos zpatky zase funguje tak, ze z FRAM vezmes 1. byte a das ho tam, kam ukazuje ten ukazatel, pak posunes ukazatel, vezmes dalsi byte a das ho na to dalsi misto, az postupne slozis cely obsah te puvodni promenne.
Idealne si to nakresli na kostickovany papir, nebo tak neco, je to vlastne velice jednoduche, primocare a intuitivni - kdyz si predstavis, ze mas z jednoho sloupecku prekopirovat obsah do druheho, ale smis naraz kopirovat jen jeden ctverecek, tak to budes delat presne stejne. A nazpatek taky.
Trik je v tom, ze pamet je vlastne pole bytu (bunek o velikosti jeden byte) a do ni se vsechno uklada.
Takze kdyz si vezmes ukazatel na 1 byte, tak ukazuje prave na jednu bunku pameti (a to na co ukazuje je nutne cislo od 0 do 255). Kdyz ten ukazatel (nikoli to na co ukazuje) zvysis o jedna (p++), tak ukazuje na dalsi bunku v pameti.
Takze kdyz ho nechas ukazovat na zacatek nejake promenne a pak ho postupne zvysujes o jedna (posouvas na dalsi bunku) tolikrat, kolik bytu ta promenna zabira, tak postupne ukazuje na jeji jednotlive casti, jak jsou ulozeny v pameti.
A kdyz vezmes na co prave ukazuje (jeden byte), tak to muzes vzit a ulozit treba do nejake bunky v te FRAM. A kdyz to same udelas s dalsi a dalsi bunkou, tak tam postupne preneses celou tu promennou.
A prenos zpatky zase funguje tak, ze z FRAM vezmes 1. byte a das ho tam, kam ukazuje ten ukazatel, pak posunes ukazatel, vezmes dalsi byte a das ho na to dalsi misto, az postupne slozis cely obsah te puvodni promenne.
Idealne si to nakresli na kostickovany papir, nebo tak neco, je to vlastne velice jednoduche, primocare a intuitivni - kdyz si predstavis, ze mas z jednoho sloupecku prekopirovat obsah do druheho, ale smis naraz kopirovat jen jeden ctverecek, tak to budes delat presne stejne. A nazpatek taky.
Re: I2C FRAM Breakout
Děkuji za rozsáhlý popis, budu si to muset nakreslit, pac to moc stále nechápu dnes jsem to zkusil zadat do programu a nějak mi to stále nefunguje.. Respektive po vypnutí napětí mi to čte úplně jiná data.. A neprepisuji si buňku, schválně jsem zvolil adresu kde jistě nezapisuji... Prostě mám číslo od 0 do 1500 a toto číslo zvyšují o 1 každou minutu a chtěl bych to číslo zapsat do FRAM a potom z té FRAM přečíst do proměnné.. Aha možná jsem přišel na chybu kterou jsem udělal ale nemám kontroler doma, tak to nemám možnost vyzkoušet... Ale jen bych to chtěl popsat a chtěl bych si být už jistý, že to bude fungovat a nejlépe bych to chtěl i pochopit... Prostě to číslo od 0 zvyšují každou minutu o 1 až do 1500 pak dojde v rámci cyklu k vynulovani a děje se tak pořád.. Tzn každou minutu musí být zápis do FRAM a po každé ztrátě napětí musí být nactena tato hodnota do proměnné minuty...
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 31 hostů