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

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

      }

  • 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
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
Postado
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

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