Vai al contenuto
PLC Forum


16f877a salvataggio dati


matmor

Messaggi consigliati

Salve a tutti

ho progettato dei piccoli sistemini contatori con dei pic 16f877a

programmati in linguaccio c

ma ho un problema, vorrei salvare dei dati (numeri) in memoria, quando tolgo tensione al circuito

solo che questi numeri sono superiori a 255 ; c'è un sistema che mi permetta di salvare ad esempio "9500" nei registri della eeprom e poi successivamente naturalmente ripescare questi numeri?

qualuno mi ha consigliato di mettere in sleep il micro ed usare una batteria tampone , solo che dovrei spegnere il display lcd e quindi modificare il circuito

cosa che non vorrei fare

c'è qualcuno che puo darmi un esempio??

Link al commento
Condividi su altri siti


Lo 877 ha 255 bytes di memoria EEprom. Questa memoria può essere letta e scritta e mantiene i dati anche in assenza di alimentazione. Il fatto che sia organizzata in byte non preclude che si possano scrivere dati in interi di 16 o di 32 bits. Se usi il "C" dovresti avere delle "built in function" per la EEPROM o, al limite , dei programmi di esempio. OCnsulta l'help in linea del tuo compilatore.

Link al commento
Condividi su altri siti

Hi,

Il chip che stai utilizzando ha una DATA EEPROM da 256 bytes per cui potresti NON avere bisogno di dispositivi esterni.

Devi valutare attentamente la frequenza di conteggio. Se questa e' elevata non ti puoi permettere di aggiornare la EEPROM ad ogni cambio di valore perche' rischieresti di "usurare" la memoria. Controlla bene il numero di cicli di scrittura ammissibili.

In caso la frequenza di aggiornamento inizia a diventare critica ti consiglio di utilizzare una FRAM/MRAM (Memoria non volatile ferro-elettrica) che non necessita di batterie tampone.

In commercio trovi dispositivi FRAM/mram SPI/I2C o paralleli. Questi dispositivi hanno praticamente un numero di cicli di scrittura indefinito.

Per la scrittura in memoria dei dati non ci sono problemi, devi semplicemente organizzare i bytes nella memoria come meglio credi. Se hai bisogno di parole a 16 bits

puoi semplicemente disporre la parte bassa e la parte alta della tua word in due celle consecutive (Big Endian)

Furno Gianluca

Link al commento
Condividi su altri siti

Come compilatore uso il mikroc ma da quello che ho visto

posso scrivere un valore con questa formula

Eeprom_Write(unsigned int address, unsigned short data);

ma data è sempre short

come divido un integer in più short

e poi come iprendo gli short divisi per ottenere di nuovo il mio integer??

Link al commento
Condividi su altri siti

Puoi crearti delle macro per ricavare la parte alta e bassa di una word e per ricostruire il tutto

typedef unsigned char BYTE;

typedef unsigned int WORD;

#define LOWORD(n) (BYTE)(n&0xFF) /* Preleva la parte bassa di una word LSB */

#define HIWORD(n) (BYTE)(n>>8) /* Preleva la parte alta di una word MSB */

#define MAKEWORD(L,H) (WORD)((WORD)L | (H<<8)) /* Ricostruisce una WORD partendo da due bytes */

nella mia funzione ....

void LaMiaFunzione(void)

{

WORD a;

WORD Address;

BYTE L,H;

a=1000;

Address=0x1234;

/* Scrivo parte bassa */

Eeprom_Write(Address+0, LOWORD(a));

/* Scrivo parte alta */

Eeprom_Write(Address+1, HIWORD(a));

/* Adesso rileggo il tutto *(

L=Eeprom_Reade(Address+0);

H=Eeprom_Read(Address+1);

/* Ricostruisce la word */

a=MAKEWORD(L,H);

}

Link al commento
Condividi su altri siti

Grazieeeee

adesso me la studio un po ma credo di aver capito

con>> mi sposto i bit a destra per avere solo i bit della parte alta

grazie ancora

Link al commento
Condividi su altri siti

Diciamo che diventa difficile caratterizzare un chip che permette decine o centinaia di miliardi di accessi in scrittura (con molta probabilita' si puo' incorrere nella rottura del chip stesso prima di esaurire questo limite)

Nel passato mi e' successo di trovare EEPROM malfunzionanti (ovviamente dopo anni di glorioso funzionamento) per via dell'usura delle celle stesse ma questo limite sta per essere abbattuto.

Questo e' parte di un testo relativo ad una recente news di RAMTRON riguardante le tecnologie FRAM/MRAM

“Grazie ai brevi tempi di accesso, al basso consumo, alle ridotte dimensioni della cella e ai ragionevoli costi di fabbricazione, le FRAM si prestano a una vasta gamma di applicazioni,” continua il dott. Moise. “Tutti i sistemi che richiedono memoria non volatile a basso consumo, una veloce protezione dei dati prima di interrompere l’alimentazione o un numero di cicli di scrittura illimitato, trarranno grandi vantaggi dalle prestazioni delle FRAM.”

Ciao

Gianluca

Link al commento
Condividi su altri siti

Questo e' per esempio lo "Short Summary" della FM25L256B, ne ho una su una board che sto utilizzando per "loggare" dati provenienti da una comunicazione seriale (una specie di sniffer)

256K bit Ferroelectric Nonvolatile RAM

• Organized as 32,768 x 8 bits

• Unlimited Read/Write Cycles

• 10 Year Data Retention

• NoDelay™ Writes

• Advanced High-Reliability Ferroelectric Process

Ciao

Gianluca

Link al commento
Condividi su altri siti

A solo titolo informativo, senza intenzioni polemiche. smile.gif

Questi sono i dati delle 25AA160A/B,

25LC160A/B Microchip (seriali SPI) dal primo data sheet che avevo sottomano

come puoi vedere i il numero di cicli di scrittura è elevato ma non è infinito. Tutti i produttori più affidabili danno un numero massimio di cicli di scrittura garantito. Purtroppo è la tecnologia costruttiva che lo impone.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Aspetta Livio ...

Io sto parlando di FRAM e non di EEPROM !!!

E' chiaro che le EEPROM per la loro natura non possono avere un numero di cicli infinito.

La tecnologia FRAM/MRAM e' una tecnologia emergente che mandera' in pensione le E2PROM e tecnologie derivate.

Il mio suggerimento e' stato:

Quindi:

- Se il conteggio e' lento e' possibile eliminare un chip esterno ed utilizzare la EEPROM interna

- Se la frequenza e' piuttosto elevata suggerisco un chip FRAM/MRAM esterno

Ciao

Gianluca

:-)

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...