Hab Pullup von 5 auf 20kOhm geändert, scheint jetz zu funktionieren .
ab jetzt mal einfach alle Bit-Warteschleifen gegen delay warteschleifen
getauscht.
char TWI_empf(unsigned char adres)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
TWDR = adres;
TWCR = (1<<TWINT)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
TWCR = (1<<TWINT)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
dat1 = TWDR ;
TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);
TWCR = (1<<TWINT)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
dat2 = TWDR ;
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
return dat1;
}
Hab Pullup von 5 auf 20kOhm geändert, scheint jetz zu funktionieren .
So, nun zum Eigentlichen Problem der Kommastelle.
struct TEMPERATUR {
unsigned char temp;
unsigned char komma;
};
struct TEMPERATUR temp_sensor1,temp_sensor2,temp_sensor3;
Beim LM75 ists ganz einfach und funktioniert:
temp_sensor2.temp = TWI_empf(ADRESSE_SENSOR2_R); //Für LM75
temp_sensor2.komma= (dat2>>5)*10/8; //Für LM75
Datenblatt:
http://docs-europe.electrocomponents...6b80b4c8ed.pdf
Beim LM76 zeigts mir bei der Kommastelle immer 9 an:
temp_sensor1.temp = (TWI_empf(ADRESSE_SENSOR1_R)<<1)|((dat2>>7)); //für LM76
temp_sensor1.komma= (dat2>>3&0b00001111)*10/16; //für LM76
Datenblatt:
http://docs-europe.electrocomponents...6b806ece4e.pdf
Vielleicht habt ihr ne idee, wo mein Denkfehler ist.
Geändert von kremsy (03.06.2012 um 18:28 Uhr)
Das Problem ist eigentlich dass D3-D6 beim LM76 immer High sind, ist da der Sensor Kaputt? Oder an was könnte dass liegen?
Lesezeichen