Ir ao conteúdo
  • Cadastre-se

Ler e escrever em EEPROM interna


cezar.opaleiro

Posts recomendados

Olá amigos!

Como eu nunca fiz isso, gostaria da ajuda de vocês. Eu precisava guardar um valor para poder recupera-lo depois, creio que EEPROM seja o ideal! O que eu precisava era guardar uma variável INT na EEPROM e lê-la depois, por exemplo:

Temperatura = 38;
MaxTemp = Temperatura;

if(MaxTemp < Temperatura){
MaxTemp = Temperatura;
[B]Gravar na EEPROM MaxTemp;[/B]
}
LCD_out(1,1,"Temperatura");
LCD_out(1,10,Temperatura);
[B]Lê na EEPROM MaxTemp;[/B]
converte MaxTemp pra STRING
LCD_out(2,1,"Máx");
LCD_out(2,5,MaxTemp);

Alguém pode me dar algum exemplo ou alguma dica, não sei como funciona o mecanismo de gravar e ler em EEPROM :rolleyes:

Valeu!

Abrs!!

Link para o comentário
Compartilhar em outros sites

voc usa mikroc? se sim vai la em help -> help.

ai vai abri uma janela.

no lado esquerdo tem varias pastinhas. clica no + do Mikroc libraries

ai embaixo tem lá EEPROM library.

ai tem tudo lá. como fazer,exemplos e tudo mais.

caso não use mikroc aguarde mais respostas

atualização: o codigo tambem ta errado. pois se temperatura for 30 por exemplo,maxtemp tera 30. então nunca maxtemp tera menos que temperatura

MaxTemp = Temperatura;

if(MaxTemp < Temperatura)

abraço

Link para o comentário
Compartilhar em outros sites

voc usa mikroc? se sim vai la em help -> help.

ai vai abri uma janela.

no lado esquerdo tem varias pastinhas. clica no + do Mikroc libraries

ai embaixo tem lá EEPROM library.

ai tem tudo lá. como fazer,exemplos e tudo mais.

caso não use mikroc aguarde mais respostas

atualização: o codigo tambem ta errado. pois se temperatura for 30 por exemplo,maxtemp tera 30. então nunca maxtemp tera menos que temperatura

MaxTemp = Temperatura;

if(MaxTemp < Temperatura)

abraço

valeu Angelo!

Deixa eu ver se entendi...o lance é escrever passando o endereço?

o primeiro paramentro é 2 e o segundo seria o dado, certo? Como eu passo um numero inteiro?

EEPROM_Write(0x02,0xAA); 

O que corresponde o valor 0xAA??

Quero saber como escrever um INT...

E nesse caso lê no endereço 2.

EEPROM_Read(0x02); 

corrigindo...se o próximo valor de Temperatura for menor que MaxTemp, MaxTemp não recebe Temperatura, ou seja, só recebe os valores máximos.


int MaxTemp = 0;
...
...
...
if(MaxTemp < Temperatura){
MaxTemp = Temperatura;
Gravar na EEPROM MaxTemp;
}
LCD_out(1,1,"Temperatura");
LCD_out(1,10,Temperatura);
Lê na EEPROM MaxTemp;
converte MaxTemp pra STRING
LCD_out(2,1,"Máx");
LCD_out(2,5,MaxTemp);

Link para o comentário
Compartilhar em outros sites

Tem várias formas. Dá pra usar UNIONs, p.ex. Não é o mais prático, mas pode ser usado. O ideal, seria salvar byte por byte através dos ponteiros das suas variáveis.

Usando UNION, experimenta esse código:


{
int meu_inteiro;
char meu_char [2];
} union1;

void main (void)
{
union1.meu_inteiro = 0x0A0A;

escreve_EEPROM (endereco, union1.meu_char [0]); // salva LSB do inteiro
escreve_EEPROM (endereco+1, union1.meu_char [1]); // salva MSB do inteiro
while (1);
}
union minha_union

Espero que ajude, e principalmente, que o código esteja certo! :D

[]´s

Link para o comentário
Compartilhar em outros sites

Tem várias formas. Dá pra usar UNIONs, p.ex. Não é o mais prático, mas pode ser usado. O ideal, seria salvar byte por byte através dos ponteiros das suas variáveis.

Usando UNION, experimenta esse código:


{
int meu_inteiro;
char meu_char [2];
} union1;

void main (void)
{
union1.meu_inteiro = 0x0A0A;

escreve_EEPROM (endereco, union1.meu_char [0]); // salva LSB do inteiro
escreve_EEPROM (endereco+1, union1.meu_char [1]); // salva MSB do inteiro
while (1);
}
union minha_union

Espero que ajude, e principalmente, que o código esteja certo! :D

[]´s

valeu Maurício!

Entendi o raciocínio...

Deixe me ver então, da pra fazer escrevendo caracter a caracter de um vetor?

escreve_EEPROM (endereco, union1.meu_char [0]); 

tipo assim:



//passo o inteiro pra char
vetor[0] = char1;
vetor[1] = char2;

escreve_EEPROM (endereco, vetor[0]);
escreve_EEPROM (endereco+1, vetor[1]);

var1 = le_EEPROM (endereco, vetor[0]);
var2 = le_EEPROM (endereco+1, vetor[1]);

LCD_out(1,1,var1);
LCD_out(1,2,var2);

Abrs!

Link para o comentário
Compartilhar em outros sites

Essa parte aqui, não é necessária:

//passo o inteiro pra char
vetor[0] = char1;
vetor[1] = char2;

Quando você usa UNION, deve ter em mente que TODAS as variáveis daquela UNION, ocupam o mesmo endereço físico da memória.

Se você quer atribuir um valor pra variável inteira da UNION, você faz simplesmente isso:

union1.meu_inteiro = 0x0102;

Depois, salva o inteiro através do vetor char, que usa o mesmo endereço de memória.

escreve_EEPROM (endereco, union1.meu_char [0]);    // salva LSB do inteiro
escreve_EEPROM (endereco+1, union1.meu_char [1]); // salva MSB do inteiro

Boa sorte!

[]´s

Link para o comentário
Compartilhar em outros sites

Essa parte aqui, não é necessária:

//passo o inteiro pra char
vetor[0] = char1;
vetor[1] = char2;

Quando você usa UNION, deve ter em mente que TODAS as variáveis daquela UNION, ocupam o mesmo endereço físico da memória.

Se você quer atribuir um valor pra variável inteira da UNION, você faz simplesmente isso:

union1.meu_inteiro = 0x0102;

Depois, salva o inteiro através do vetor char, que usa o mesmo endereço de memória.

escreve_EEPROM (endereco, union1.meu_char [0]);    // salva LSB do inteiro
escreve_EEPROM (endereco+1, union1.meu_char [1]); // salva MSB do inteiro

Boa sorte!

[]´s

Valeu Manoooo!!

Fiz de um outro jeito com base na sua dica! Como eu já tinha os valores em um vetor, não precisei fazer uma estrutura union.


if(MaximaTemp < Temper){
MaximaTemp = Temper;
MaxTemp[0] = tempera[0];
MaxTemp[1] = tempera[1];
MaxTemp[2] = tempera[2];
EEPROM_Write(0x01,MaxTemp[0]);
EEPROM_Write(0x02,MaxTemp[1]);
EEPROM_Write(0x03,MaxTemp[2]);
}

Lcd_out(1,2,"Temp. do Motor");
Lcd_out(2,1,tempera);
CustomCharGRAU(2,4);
Lcd_out(2,5,"C");
Lcd_out(2,7,"(Max.");
Lcd_chr_cp(EEPROM_Read(0x01));
Lcd_chr_cp(EEPROM_Read(0x02));
Lcd_chr_cp(EEPROM_Read(0x03));
Lcd_out(2,16,")");

Valeu brother funcionando redondo!!

Abrs!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...