Valor negativo no LM92

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Valor negativo no LM92

Mensagempor rudsomlima » 23 Jan 2009 14:00

Não consigo ler temperaturas negativas com o LM92. Mostra um valor completamente diferente do correto. Já estou a vários dias tentando achar o que está errado e nada. Temperaturas positivas funcionam muito bem. Alguém consegue ver algum erro no código?

Código: Selecionar todos
#ifndef DAL_SCL
#define DAL_SCL PIN_C3
#define DAL_SDA PIN_C4
#endif

#use i2c(master, sda=DAL_SDA, scl=DAL_SCL, slow)

#define sensor1 0x90
#define sensor2 0x92

int16 temp=0;

void init_temp(int sensor) {
   output_high(DAL_SDA);
   output_high(DAL_SCL);
   i2c_start();
   i2c_write(sensor);
   i2c_write(0x01);
   i2c_write(0x00);
   i2c_stop();
}

int16 le_temperatura(int sensor) {
   int8 temph=0, templ=0;
   
   i2c_start();
   i2c_write(sensor);               
   i2c_write(0x00);
   delay_ms(500);                   //conforme datasheet, sao 500ms para conversao
   i2c_stop();
   i2c_start();
   i2c_write(sensor | 0x01);                  //w=1=leitura
   temph=i2c_read();
   templ=i2c_read(0);                //sem acknoledge
   i2c_stop();
   temp=make16(temph,templ);
   temp=temp>>3;
           
   if (bit_test(temph,4))   //se for temperatura negativa
      {
      temp=temp^0x0FFF;
      temp=(temp&0xFFF)+1;
      temp=temp*-10;
      temp=temp>>4;
      }
   else    //se for temperatura positiva
      {
      temp=temp*10;
      temp=temp>>4;
      }
     
   return(temp);
}
rudsomlima
Bit
 
Mensagens: 37
Registrado em: 26 Nov 2006 21:00

Mensagempor turuna » 25 Jan 2009 19:39

O valor lido parece ser o mesmo do positivo, apenas o bit de sinal passa para 1...........não seria o caso de apenas acrescentar negativo no visor se o sinal for 1 e da pra utilizar a mesma rotina de tratamento do positivo.

TURUNA
turuna
Nibble
 
Mensagens: 97
Registrado em: 10 Mar 2008 12:50

Mensagempor rudsomlima » 26 Jan 2009 10:32

É que é complemento de 2:

Imagem
rudsomlima
Bit
 
Mensagens: 37
Registrado em: 26 Nov 2006 21:00

Mensagempor RobL » 26 Jan 2009 13:52

No soft verifique se bit 13 = 1. Se sim faça um NOT do valor lido + 1 e leia como se fosse positivo, acrescentando o símbolo "-" no display.

Por exemplo -25* <=> 1E70h
NOT E70h = 18Fh //operação not
18Fh + 1h = 190h <=> +25*

O código basta ter a leitura positiva. Quando bit13 for zero le direto se for 1 faz a operação acima e le o valor com a mesma rotina de leitura valor positivo, acrescentando sinal negativo no display.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor rudsomlima » 26 Jan 2009 23:08

Eu estava testando o bit 5 de "temph" e tava dando errado. Utilizei o teste ao bit 13 diretamente da variável "temp" e deu certo. Acho que o problema estava ai. Fiz ainda o NOT como RobL falou para o complemento de dois, o que também é o mesmo de fazer o XOR.

Resolvido! Obrigado pela ajuda de todos.
rudsomlima
Bit
 
Mensagens: 37
Registrado em: 26 Nov 2006 21:00


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x