Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Entre para seguir isso  
cezar.opaleiro

[Resolvido] Ler e escrever em EEPROM interna

Recommended Posts

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!!

Editado por cezar.opaleiro

Compartilhar este post


Link para o post
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

Editado por Bcpetronzio
Unir Post seguidos em menos de 24 horas, use a opção Editar

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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);

    Compartilhar este post


    Link para o post
    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

    Editado por Maurício2006

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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!

    Editado por cezar.opaleiro

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.
    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×