Forum: Compiler & IDEs Negative werte vom ds1820 erhalten??


von Gerold (Gast)


Lesenswert?

Hier der Code habe ich hier aus dem Forum übernommen funktioniert alles 
über 0 grad aber unter null fehlt mir das - zeichen.

Wie bekomme ich das vorzeichen`???

void read_meas( void )
{
  uchar id[8], diff;
  uchar s[30];
  uchar i;
 uint temp;

  for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ){
    diff = w1_rom_search( diff, id );

    if( diff == PRESENCE_ERR ){
      send_UART( "No Sensor found" );
      break;
    }
    if( diff == DATA_ERR ){
      send_UART( "Bus Error" );
      break;
    }
    if( id[0] == 0x28 || id[0] == 0x10 ){  // temperature sensor
      send_UART( "ID: " );
      for( i = 0; i < 8; i++ ){
  sprintf( s, "%02X ", id[i] );
      send_UART( &s[0] );
      }
      w1_byte_wr( READ );      // read command
      temp = w1_byte_rd();      // low byte
      temp |= (uint)w1_byte_rd() << 8;    // high byte
      if( id[0] == 0x10 )      // 9 -> 12 bit
        temp <<= 3;
      sprintf( s, "  T: %04X = ", temp );  // hex value
      send_UART( &s[0] );
      sprintf( s, "%4d.%01d Grad Celsius\r\n", temp >> 4, (temp << 12) / 
6553 ); // 0.1øC
      send_UART( &s[0] );
    }
  }
  send_UART( "" );
}

danke

von Andreas K. (a-k)


Lesenswert?

Für negative Werte ist ein "unsigned int" nicht wirklich geeignet. Aus
1
uint temp;
2
temp |= (uint)w1_byte_rd() << 8;    // high byte
mach
1
int temp;
2
temp |= (int16_t)(w1_byte_rd() << 8);    // high byte
Über die Nachkommastelle musst du dann aber noch ein bischen nachdenken.

von Gerold (Gast)


Lesenswert?

bringt nichts

Komme auch mit der berechnung nicht klar im datenblatt steht auch 
nichts.

Danke

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Maxim AN162

von Suchfunktion (Gast)


Lesenswert?

Da klar steht das im Datenblatt, Messbereich (ab -55°, genau ab -10°, 
dazu Umrechnungsformel Messdaten -> Temperaturwert). Muss halt nur deine 
Software richtig schreiben. Oh, die hast du in irgendeiner Tonne 
gefunden? Tja, vielleicht mal selber mache, statt irgendwas blind 
kopieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.