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
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.
bringt nichts Komme auch mit der berechnung nicht klar im datenblatt steht auch nichts. Danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.