Ir ao conteúdo

Posts recomendados

Postado

Ola Amigos estou tentando fazer um projeto com microcontrolador PIC 16f877 e esse projeto consiste em GRAVAR um número na eeprom 24c04,número como estes 2600 até 2660 e depois fazer a comparação se os numeros estão certos,porém fazendo teste com a própria eeprom interna do microcontrolador vi que o máximo que suporta cada endereço é de 255 ou 0XFF.Gostaria de saber se a eeprom externa 24C04 pode suportar números acima de 255.

Será que existe alguma forma de gravar um milhar dentro da EEPROM?

Ou eu terei que desmembrar este números para 2 endereços ou seja

26 endereco 0 

60 endereço 1

E mais um pergunta Quantos endereços tem a EEPROM 24C04 ?

Muito obrigado a todos 

  • Membro VIP
Postado

Tem que desmembrar sim. Se o datasheet não mente é 4Kbits.

 

24C04.GIF

 

Te desafio a tranformar isso em bytes. Esta seria a 'quantidade de endereços' ou sua capacidade de armazenamento. Outra coisa relacionada a endereço... se não me falha a memória (o que não é impossível) ela tem 3 pinos de endereço "físico". Neste caso você pode ligar 8 em "paralelo" o que vai te dar 4Kbytes no total. ops! respondi o desafio kk

abç

Postado

Isadora e VTRX obrigado por me responderem na verdade seriam no total 320 números que queria guardar na eeprom externa (2501 até 2660 e salta para 2781 até 2940).Então mesmo "TENTANDO" desmembrar este números em duas variaveis precisaria 720 endereço e está eeprom não daria para guardar pois ela tem 512 endereços .Porém posso usar uma EEPROM com o dobro de capacidade que é a 24c08. 

Agora vocês podem me explicar como eu posso DECOMPOR este número em duas Variável .Tive lendo alguns postagem pela NET e diz para fazer um divisão e desculpe minha franqueza mais eu não entendi muito bem.

 

2660 / 256  = 10.390625 

  • Membro VIP
Postado

Claro amigo. Vamos tentar...

Com a 24c08 seus problemas iniciais se dissiparam.

De fato o mc trabalha com hexadecimais mesmo que você defina suas variáveis como decimais. Então seu 2501 se transforma em 0x09c5. Em c é simples...
 

unsigned int d=2501, addres=0;
//gravando...
e2promwrite(addres,d);//LSB c5
e2promwrite(addres+1,d>>8);//MSB 09
//recuperando
d=e2promread(addres+1);//MSB
d<<=8;//vai de verdade pro MSB
d|=e2promread(addres);//concatena com LSB

Lembrando que você deve incrementar addres de 2 em 2

unsigned int i,dado[320];
for (i=0;i<320;i++) {dado[i]=eepromread(addres);addres+=2;}

(não conferi direito. se tiver algum erro + tarde eu edito...)

 

Difícil? Mas não impossível.

Assembly? o amigo vtrx, se achar que deve,  pode te apresentar alguma alternativa

 

Postado
Citação

Assembly? o amigo vtrx, se achar que deve,  pode te apresentar alguma alternativa

Essa é a única parte(números com mais de um byte),para mim,onde o ASM(8 bits) da risada da minha cara...

Postado

Ola Isadora muito obrigado você facilitou muito com a sua tua explicação .O código que você postou acima já deu uma grande noção.Show de bola e muito obrigado e agradeço também o VTRX

   unsigned int  numero = 2660

   int    byte_high  

   int    byte_low

 

  desmontagem

   byte_high  = numero >> 8 

   byte_low   =  numero

 

  Remontagem

  numero = (byte_high << 8) + byte_low

 

  • 2 semanas depois...
Visitante
Este tópico está impedido de receber 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...