Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal do CDH.

 

Seguinte, estou quebrando a cabeça aqui, pois preciso usar uma eeprom externa com 16Kb de espaço, bem eu uso o comando a seguir para gravar nela:

 

I2C_start(); //start barramento
I2C_Write(0xA0); //identifica disp.
I2C_Write(end);  //Endereço
I2C_Write(dado); //dado
I2C_Stop();      //stop barramento
delay_ms(5);     //atraso

A questão é que se eu uso um for com a variavel de controle sendo o end, ele chega no endereço  0xFF ou 255 e para. Sei que  preciso ir para o proximo bloco para começar gravar a partir do 0 novamente, mas não sei qual comando adicionar ali ↑↑ para mudar o bloco que preciso gravar.

 

para ler uso esse ↓↓ que tambem vai requerer algo a mais para indicar o bloco, no ds da memo só fala algo B2 B1 e B0 nao entendi.

 

I2C_Start();     //start barramento
I2C_Write(0xA0); //dentifica dispos.
I2C_Write(end);  //Endereço
I2C_Start();     //Restart
I2C_Write(0xA1); //Identifica dispositivo para leitura
lido = I2C_Read(0); //Faz a leitura do dado
I2C_Stop(); //stop barramento
delay_ms(5); //Atraso

alguem?

Postado

se não me engano a biblioteca dele faz isso sozinho,mas de qualquer forma,a linha 24C16 em diante usa dois bytes para o endereço da memória,tipo primeiro a parte alta e depois a parte baixo e aí voce manda ou recebe o dado.

De noite em casa posso confirmar.

  • Curtir 2
Postado

Ok, eu agradeço.

Caso puder me citar um exemplo ficarei grato.

 

 

vtrx eu descobri o problema. Na verdade um problema besta hehe, a variavel do laço for era int então ela incrementava somente até 255 e parava a gravação neste endereço, então eu tornei-a int16 e ele gravou até o endereço 2048 da eeprom ext.

 

Comi bronha nisso, e quebrei a cabeça, pois eu estava procurando o defeito em um local e estava em outro :(

  • Membro VIP
Postado

De fato você precisa enviar 2 bytes de endereço

void grava(unsigned int end, unsigned char dado)
{
I2C_start(); //start barramento
I2C_Write(0xA0); //identifica disp.
I2C_Write(end>>8);  //Endereço MSB
I2C_Write(end);  //Endereço LSB
I2C_Write(dado); //dado
I2C_Stop();      //stop barramento
delay_ms(5);     //atraso
}

//p.ex.
grava(1023,0xaa);

Este é 01 das falhas deste compilador não padrão..

3 horas atrás, rodrigocirilo disse:

a variavel do laço for era int então ela incrementava somente até 255

no meu tempo int em c era 16 bits ... char era 8

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!