Ir ao conteúdo

Posts recomendados

Postado

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
  Em 20/01/2019 às 04:09, 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 

Expandir  

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.

  • Membro VIP
Postado
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
Postado
  Em 20/01/2019 às 10:44, 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...

Expandir  

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));

      }

  • Membro VIP
Postado

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
Postado

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.

  • Membro VIP
Postado
  Em 21/01/2019 às 01:27, Luan Borges disse:

eu só queria mudar a casa das unidades

Expandir  

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

  Em 20/01/2019 às 04: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 

Expandir  

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

 

  Em 21/01/2019 às 01:27, Luan Borges disse:

pra gravar não tem muito segredo né,

Expandir  

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

 

abç

  • Haha 1
Postado
  Em 21/01/2019 às 10:30, 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ç

Expandir  

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

 

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

Ou se não

Expandir  

....

 

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

e eu quero só mudar a casa das Unidades

Expandir  

Viu kkkk

Mas Obrigadoooo

  • Haha 1

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...