Also die Variable "temp" verwendet Peter Dannegger in seinem Progra m für die aktuelle Temperatur . Somit wollte ich immer wenn die ID vom 1 Sensor angesprochen wird die ich in "temp1" speichern will, über diese if Bedingung.
Die Änderungen hab ich in der tempmeas.c vorgenommen und sieht dann folgender maßen aus.
Code:
void start_meas( void ){
if( W1_IN & 1<< W1_PIN ){
w1_command( CONVERT_T, NULL );
W1_OUT |= 1<< W1_PIN;
W1_DDR |= 1<< W1_PIN; // parasite power on
}else{
uputsnl( "Short Circuit !" );
}
}
void read_meas( void )
{
uchar id[8], diff;
uchar s[30];
uchar sa[30];
uchar i;
uint temp;
uint temp1;
for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ){
diff = w1_rom_search( diff, id );
if( diff == PRESENCE_ERR ){
uputsnl( "No Sensor found" );
break;
}
if( diff == DATA_ERR ){
uputsnl( "Bus Error" );
break;
}
if( id[0] == 0x28 || id[0] == 0x10 ){ // temperature sensor
uputs( "ID: " );
for( i = 0; i < 8; i++ ){
sprintf( s, "%02X ", id[i] );
uputs( s );
}
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
uputs( s );
sprintf( s, "%4d.%01døC", temp >> 4, (temp << 12) / 6553 ); // 0.1øC
uputsnl( s );
}
if (id == 0xB37C720108009B)
{
temp = temp1;
sprintf( sa, " T: %04X = ", temp1 ); // hex value
uputs( sa );
sprintf( sa, "%4d.%01døC", temp1 >> 4, (temp1 << 12) / 6553 ); // 0.1øC
uputsnl( sa );
}
}
uputsnl( "" );
}
Die Berechnungen der Variablen "temp" bei der ausgabe habe ich so übernommen und funktioniert auch... Nur wenn ich versuche die temp1 auszugeben wird nur 0 angezeigt...
Lesezeichen