www.mikrocontroller.net

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


Autor: Gerold (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

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

Autor: Gerold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bringt nichts

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

Danke

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maxim AN162

Autor: Suchfunktion (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.