Negative werte vom ds1820 erhalten??

Gast #783547
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
#783561
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.
Gast #783771
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.