Página 1 de 1

ajuda salvar dado serial at24c256

MensagemEnviado: 03 Mai 2010 16:10
por Meson
Amigos estou com dificuldades em conseguir transformar um sequencia de bits (1 byte ) para ser mais exato que estou recebendo de uma memoria i2c at24c256 e salvar em uma variável. por favor alguem pode me ajudar!

Código: Selecionar todos
void le_byte2() {
for (i = 1; i <= 8; i++) // read the msb first
{
 SCL = 1;

 buffer[i]=SDA; // subistituir aqui por operação de deslocamento de bit, (salvar em uma variavel char dado por exemplo.

 SCL = 0;
}



Atualmente uso este recurso que é um pouco burro , gostaria de salvar diretamente em uma variável qualquer, por exemplo em uma char c; sei que da para fazer isso usando uma operação de deslocamento de bits, pois faço assim para escrever, so não sei como fazer o caminho inverso .

Por favor me ajudem, desde já eu agradeço!

veja como eu faço para gravar.

Código: Selecionar todos
void I2C_write(unsigned char d) /* ----------------------------- */

{
unsigned char k;
SCL = 0;
for (k= 1; k <= 8; k++)
{
SDA = (d >> 7);

SCL = 1;
d = d << 1; /* increase scl high time */
SCL = 0;
}
SDA = 1; /* Release the sda line */
SCL = 0;
SCL = 1;

}

MensagemEnviado: 03 Mai 2010 18:06
por Meson
alguem poderia por favor ajuda com qualquer coisa?

MensagemEnviado: 03 Mai 2010 22:04
por lopesjm
Olá Meson,


Creio que nesta thread tem o que você quer:

http://asm51.eng.br/phpBB/viewtopic.php?t=8951

Jorge

MensagemEnviado: 04 Mai 2010 13:13
por deniro
Bom eu creio que seja isto que voce quer.

unsigned char i2c_read_char(void)
{
unsigned char res=0;
unsigned char cnt;
for ( cnt=0;cnt<8;cnt++ )
{
SDA= TRUE;
SCL= TRUE;
res<<=1;
if (SDA) { res |= 0x01; }
SCL= FALSE;
}
return res;
}


até

MensagemEnviado: 04 Mai 2010 17:52
por Meson
valeu galera! Valeu lopes! Valeu deniro! deu certo usei o que o deniro postou e consegui salvar em uma variavel global!