Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Hallo Pk3, > ich habe es folgendermaßen gelöst: > > /********************************************************************************* > * Libary zum auslesen eines LM75-Temperatursensor > * Die Adresse des Sensors am I2C-Bus wird beim aufruf der Libary > * in den klammern angegeben und der Rückgabewert(Temperatur in Celsius) > * wird in der vorangestellten Variable gespeichert. Diese muss vom > * Typ Float/Single sein. Beispiel in Basic: > * > *---------------------------------------- > * Sub Read > * Dim Grad As Single > * Dim Adresse As Byte > * Adresse=0x91 > * Grad=LM75_Read(Adresse) > * End Sub > * --------------------------------------- > * > * Temperaturwert befindet sich in 2-Byte Register an folgenden Stellen: > * _________________________________________________ > * Temp-Register |MSB |LSB | > * | 7| 6| 5| 4| 3| 2| 1| 0| 7| 6| 5| 4| 3| 2| 1| 0| > * | | > * Temp-Wert |+-| 7| 6| 5| 4| 3| 2| 1| 0| > * > * MSB Bit-7 ist 0 für positive Temperaturen > * ist 1 für negative Temperaturen > * > * MSB Bit-0 .. -6 sind die Bits 1..7 des Temperaturwertes. > * Zur Ermittlung der Temperatur (ohne Vorzeichen) > * wird also das MSB um 1 Stelle nach links geshiftet > * > * LSB Bit-7 ist das Bit-0 des Temperaturwertes > * Bit-0 .. -6 sind irrelevant > * um das Bit-7 zu isolieren, wird das Byte um 7 Stellen nach rechts geshiftet > * und abschliessend werden MSB und LSB zum Temperaturwert addiert. > * > * Für die Ermittlung, ob es sich um eine PLUS- oder MINUS-Temperatur handelt, > * wird geprüft, ob Bit-7 des ursprünglichen MSB (jetzt msb1) gesetzt war. > * Falls ja, wird von dem Wert 256 subtrahiert. > * Abschliessend muss der Temp-Wert noch durch 2 dividiert werden. > * Auflösungsgenauigkeit ist 0.5 Grad Celsius > ********************************************************************************/ > > float LM75_Read(byte addr) > { > byte msb1; > byte MSB; byte LSB; float temp; > > I2C_Start(); // Sequenz starten > I2C_Write(addr); // Moduladresse auf den Bus schreiben > msb1 = I2C_Read_ACK(); // MSB auslesen und in msb1 speichern > MSB = (msb1 << 1); // für Temperatur 1 Stelle nach links shiften > LSB = (I2C_Read_ACK() >> 7); // LSB auslesen und 7 Stellen nach rechts > I2C_Stop(); // Sequenz stoppen, Bus freigeben > > temp = MSB+LSB; // Temperaturwert nach temp addieren > if (msb1>0x80) // Bit-7 von msb1 = 1, dann MINUS-Temperatur > { > temp = (temp-256); // negativen Komplementärwert erzeugen > } > return temp/2-3; // Division durch 2 und 3 Grad abziehen zum cal. > > } > > Den Code oben kannst Du einfach als Libary im Projekt integrieren. Aber bitte nicht Kommerziell > verarbeiten...... > Des weiteren solltest Du auf Pullupwiderstände achten die an SCA und SCL dran müssen. > 4,7k tun bei mir gute Dienste. Aber auf dem Mega128 Application Board sind diese ja schon drauf > wenn Du nicht den I2C-EEprom abgeschaltet hast. > Und Du musst darauf achten das die Adresspins A0-A2 des LM75 nicht offen bleiben. Diese müssen > Vcc- oder GND-Pegel haben. > Bei mir Funktioniert der Code erstklassig. In meinem Projekt sind 7 LM75-Temperatursensoren verbaut > die alle an einem ca. 5m langen Bus hängen. > > Gruß Thomas