Moderadores: andre_luis, 51, guest2003, Renie
struct DoisBytes
{
int iLsb;
int iMsb;
};
union Junta_dados
{
int16 Total_ad;
struct DoisBytes Msb_Lsb;
}Valor_ad;
int lsb;//varialvel do byte baixo do mcp3021
int msb;//varialvel do byte alto do mcp3021
//*AUTHOR Douglas Ricardo Dos Santos Pereira
//*PURPOSE Ler A/D mcp3021
//*DATE_CREATED 24/10/2007
//*CHANGES
void Read_ad(){
disable_interrupts(GLOBAL);
i2c_start();
i2c_write(0b11011001); //endereco default e comando leitura
msb = i2c_read(1); //comando de ler o msb
lsb = i2c_read(0); //comando de ler o lsb
i2c_stop();//finaliza leitura
delay_us(50);
Valor_ad.Msb_Lsb.iLsb=lsb;
Valor_ad.Msb_Lsb.iMsb=msb;
Valor_ad.Total_ad = Valor_ad.Total_ad>>2; // ajusto os bits
enable_interrupts(GLOBAL);
}
lellis escreveu:eu não.
andre_teprom escreveu:Doglao,
Me parece que o tamanho dos dados desse CI não é inteiramente compatível com a maioria dos CI´s I2C de 8 bit´s.
Se voce pretender ligar outros dispositivos nesse mesmo barramento, desaconselho; use um outro pino de clock para os demais.( já tive um problema parecido )
+++
struct DoisBytes
{
int iLsb;
int iMsb;
};
union Junta_dados
{
int16 Total_ad;
struct DoisBytes Msb_Lsb;
}Valor_ad;
int16 Read_ad(){
int16 temp_pressao;
i2c_start();
i2c_write(0b10011011); //coloca endereco do escravo e como leitura
msb = i2c_read(1); //comando de ler o msb
lsb = i2c_read(0); //comando de ler o lsb
i2c_stop();//finaliza leitura
delay_us(50);
Valor_ad.Msb_Lsb.iLsb=lsb;//se le assim dddddd00 os dados a esquerda
Valor_ad.Msb_Lsb.iMsb=msb;//se le assim 0000dddd os dados a direita
Valor_ad.Total_ad = Valor_ad.Total_ad>>2; // agora tenho 0000dddddddddd00 depois de rotacionado-> 000000dddddddddd
temp_pressao=Valor_ad.Total_ad; // retorno valor ajustado
return temp_pressao;
}
Valor_pressao=Read_ad();
printf(lcd_putc, "%lu ", Valor_pressao);
i2c_start();
i2c_write(0b10011011); //0x9b coloca endreco do escravo e como escrita
delay_us(11);//no modo de unica aquisicao necessita esperar por Tacq(1.12uSec)
// mais Tconv(8.96uSec).
msb = i2c_read(1); //comando de ler o msb
lsb = i2c_read(0); //comando de ler o lsb
i2c_stop();//finaliza leitura
Usuários navegando neste fórum: Google [Bot] e 1 visitante