por andre_luis » 15 Fev 2007 08:56
Usei o LM75. Nao sei qual a diferença dele para o LM92.
Dá uma olhada no datasheet e ve se aproveita alguma coisa dessa rotina.
[size=9]////////////////////////////////////////////////////////////////////////
void init_I2C ( void )
{
output_float( I2C_SCL ) ;
output_float( I2C_SDA ) ;
}
////////////////////////////////////////////////////////////////////////
int1 i2c_ready ( unsigned int8 address )
{
int1 ack ;
i2c_start() ; // If the write command is acknowledged,
ack = i2c_write( address ) ; // then the device is ready.
i2c_stop() ;
return ( !ack ) ;
}
////////////////////////////////////////////////////////////////////////
void I2CSendByte ( unsigned int8 Chip , unsigned int8 address , unsigned int8 data_value )
{
/// while ( ! i2c_ready ( address ) ) ;
/// i2c_stop() ;
delay_us ( 10 ) ; /* Solucao Empirica */
i2c_start() ; /* START CONDITION */
i2c_write( Chip | ESCRITA ) ; /* SLAVE ADDRESS -> WRITE */
i2c_write( address ) ; /* WORD ADDRESS */
i2c_write( data_value ) ; /* WRITE DATA */
i2c_stop() ; /* STOP CONDITION */
delay_ms ( 50 ) ; /* Solucao Empirica */
}
////////////////////////////////////////////////////////////////////////
unsigned int8 I2CGetByte( unsigned int8 Chip , unsigned int8 address )
{
unsigned int8 data_value ;
/// i2c_stop() ;
delay_us ( 10 ) ; /* Solucao Empirica */
i2c_start() ; /* START CONDITION */
i2c_write( Chip | ESCRITA ) ; /* SLAVE ADDRESS -> WRITE */
if ( Chip == SELECT_LM75A )
i2c_write( ENDERECO_TEMPERATURA ) ; /* WORD ADDRESS */
else
i2c_write( address ) ; /* WORD ADDRESS */
delay_us ( 10 ) ; /* Solucao Empirica */
i2c_start() ; /* SATRT CONDITION */
i2c_write( Chip | LEITURA ) ; /* SLAVE ADDRESS -> READ */
if ( Chip == SELECT_LM75A )
{
TemperaturaDaPlaca = i2c_read() ; /* READ DATA */
data_value = (unsigned int8)TemperaturaDaPlaca ;
TemperaturaDaPlaca <<= 8 ;
TemperaturaDaPlaca |= i2c_read() ; /* READ DATA */
}
else
data_value = i2c_read() ; /* READ DATA */
i2c_stop() ; /* STOP CONDITION */
delay_ms ( 50 ) ; /* Solucao Empirica */
return( data_value ) ;
}
/////////////////////////////////////////////////////////////////////////[size]