Aber es tritt auch nicht immer auf, sondern zufällig. Zurzeit tritt es gar nicht auf.
Ich mach mich mal an den LM76.
Aber es tritt auch nicht immer auf, sondern zufällig. Zurzeit tritt es gar nicht auf.
Ich mach mich mal an den LM76.
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 17: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