Ir ao conteúdo
  • Cadastre-se

PIC Gravar um Dado Float na EEPROM PIc


Posts recomendados

Então mu povo, estou precisando gravar um dado na EEPROM do 4550, mas esse dado é um numero flutuante, e to querendo saber como eu gravo ele na eeprom, ja que ela tem a  limitação de 1 byte por endereço e estou querendo gravar 4 byts, que no caso é a leitura de uma bateria, tipo 14.89 e salva ele na eeprom 

adicionado 26 minutos depois
13 minutos atrás, Luan Borges disse:

Então mu povo, estou precisando gravar um dado na EEPROM do 4550, mas esse dado é um numero flutuante, e to querendo saber como eu gravo ele na eeprom, ja que ela tem a  limitação de 1 byte por endereço e estou querendo gravar 4 byts, que no caso é a leitura de uma bateria, tipo 14.89 e salva ele na eeprom 

Ou se não, eu to querendo fazer o seguinte, tenho lá minha leitura sendo mostrada no lcd e pá, só que eu quero poder ajusta ela, tipo, caso pegar um multímetro e ver que a leitura está errada, em vez de eu ter que po um trimpot pra ajusta ela até bate com a do multímetro, eu simplesmente vou em um nemeu que ja criei e ajusto a leitura por lá. Eu estou fazendo assim:

 

....

           q1 = (media/8);
            p1 =(q1*5)/1023.0;
            q2 = p1*7.6;
            q2 = q2+Ajust; 

.....

 

//BATERIA CONFIGURAÇÕES//
      else if(BatConfig){
        lm       = 0x01;
        Ajust+=00.01;
      } 

....

 

no caso eu tenho que colocar esses zeros, porque se não ele muda a casa dos Milhares, e eu quero só mudar a casa das Unidades, Eu poderia salva só o valor de Ajust (1,2,3,4,5...)Sem os zeros(00.0(Ajust)) e soma ele na casa das unidades de Q2, mas não sei como fazer isso também. E preciso que Ajust seja salvo na EEPROM pelo simples fato de que, se o sistema desligar por algum motivo ele manter o ajuste que foi feito.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
int main( void )
{
float float0;
float *ponteiro;
  
ponteiro = &float0; 
  
float0=3.141592;

//grava os pedaços na eeprom
eepw(0,*((unsigned char *)(ponteiro)+0)); 
eepw(1,*((unsigned char *)(ponteiro)+1)); 
eepw(2,*((unsigned char *)(ponteiro)+2)); 
eepw(3,*((unsigned char *)(ponteiro)+3)); 

float0=0; //destroi

//reconstroi float0 a partir dos pedaços da eeprom
*((unsigned char *)ponteiro + 0)=eepr(0);
*((unsigned char *)(ponteiro)+1)=eepr(1);
*((unsigned char *)(ponteiro)+2)=eepr(2);
*((unsigned char *)(ponteiro)+3)=eepr(3);
  
pi=float0; //taí

for(;;);
}

Difícil? ... também acho...

 

Pra ajustar se for linear:

offset=0; //'trimpots' de ajustes ...
ganho=1;//...que podem ser lidos da eeprom
valorcerto=offset+valorlido/ganho;

de nada...

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Isadora Ferraz disse:

int main( void )
{
float float0;
float *ponteiro;
  
ponteiro = &float0; 
  
float0=3.141592;

//grava os pedaços na eeprom
eepw(0,*((unsigned char *)(ponteiro)+0)); 
eepw(1,*((unsigned char *)(ponteiro)+1)); 
eepw(2,*((unsigned char *)(ponteiro)+2)); 
eepw(3,*((unsigned char *)(ponteiro)+3)); 

float0=0; //destroi

//reconstroi float0 a partir dos pedaços da eeprom
*((unsigned char *)ponteiro + 0)=eepr(0);
*((unsigned char *)(ponteiro)+1)=eepr(1);
*((unsigned char *)(ponteiro)+2)=eepr(2);
*((unsigned char *)(ponteiro)+3)=eepr(3);
  
pi=float0; //taí

for(;;);
}

Difícil? ... também acho...

 

Pra ajustar se for linear:


offset=0; //'trimpots' de ajustes ...
ganho=1;//...que podem ser lidos da eeprom
valorcerto=offset+valorlido/ganho;

de nada...

Esse é o jeito mias fácil? To só com 19% e memoria no Pic...

adicionado 24 minutos depois

@Isadora Ferraz  Assim?

 

   float Ajust;
   float *ponteiro;

...

 

           q1 = (media/8);
            p1 =(q1*5)/1023.0;
            q2 = p1*7.6;

 

            //reconstroi float0 a partir dos pedaços da eeprom
            *((unsigned char *) ponteiro + 0x10)=EEPROM_READ(0x10);
            *((unsigned char *)(ponteiro)+0x11)=EEPROM_READ(0x11);
            *((unsigned char *)(ponteiro)+0x12)=EEPROM_READ(0x12);
            *((unsigned char *)(ponteiro)+0x13)=EEPROM_READ(0x13);
            
            ponteiro = &Ajust;
            
            q2=q2+Ajust;

 

 

....

 

else if(BatConfig){
        lm       = 0x01;
        Ajust+=00.01;
        //grava os pedaços na eeprom
        EEPROM_Write(0x10,*((unsigned char *)(ponteiro)+0x10));
        EEPROM_Write(0x11,*((unsigned char *)(ponteiro)+0x11));
        EEPROM_Write(0x12,*((unsigned char *)(ponteiro)+0x13));
        EEPROM_Write(0x13,*((unsigned char *)(ponteiro)+0x13));

      }

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

O amigo não captou direito a mensagem. Não lhe foi fornecida resposta completa e sim diretrizes básicas que te apontam pro sucesso. Foque separadamente nos 2 problemas seus, sendo o primeiro que intitulo como 'como gravar e ler uma variável float de 4 bytes na eeprom do mc'.

 

E sim, aquela em termos de eficiência de uso de recursos do mc, sim é a mais simples mesmo não sendo tão simples de compreender (esquece que não explico)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Conseguir de um jeito muuuuuito mais fácil e simples. Então como eu disse, eu só queria mudar a casa das unidades, assim adicionando apenas 00.01 no ajuste. Então eu fiz assim:


            Ajust= EEPROM_Read(0x10);
            q2=q2+(Ajust*00.01); 

     

Apenas multipliquei por 00.01 O numero que estava sendo guardado na EEPROM, q no caso Vai ser o meu Ajuste. Se for 4... Ele vai Adicionar apenas 00.04 no meu Q2. E pra gravar não tem muito segredo né,

 

.... if(..){

        Ajust+=1;
        EEPROM_Write(0x10,Ajust);}

 

Já tinha pensando assim antes, mas estava fazendo cálculos errado e de jeito errado, Então depois de dormi um pouco, vi que era só multiplicar kkkk

 

Mas de qualquer forma, muito obrigado pela sua atenção e ajuda.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
8 horas atrás, Luan Borges disse:

eu só queria mudar a casa das unidades

Puts que mancada minha!.. E eu achando que você queria...

Em 20/01/2019 às 02:09, Luan Borges disse:

gravar um dado na EEPROM do 4550, mas esse dado é um numero flutuante, e to querendo saber como eu gravo ele na eeprom, ja que ela tem a  limitação de 1 byte por endereço e estou querendo gravar 4 byts, que no caso é a leitura de uma bateria, tipo 14.89 e salva ele na eeprom 

...fala sério... desculpe meu engano.

 

8 horas atrás, Luan Borges disse:

pra gravar não tem muito segredo né,

Tenta gravar um número fracionário... altos segredos...

 

abç

  • Haha 1
Link para o comentário
Compartilhar em outros sites

10 horas atrás, Isadora Ferraz disse:

Puts que mancada minha!.. E eu achando que você queria...

...fala sério... desculpe meu engano.

 

Tenta gravar um número fracionário... altos segredos...

 

abç

kkkkk Me desculpa kkkkkk Mas logo em baixo eu disse que...

 

Em 20/01/2019 às 02:09, Luan Borges disse:

Ou se não

....

 

Em 20/01/2019 às 02:09, Luan Borges disse:

e eu quero só mudar a casa das Unidades

Viu kkkk

Mas Obrigadoooo

  • Haha 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!