LM92-Thermometer

Allgemein

Der LM92 ist ein digitaler Temperatur-Sensor mit einer Genauigkeit von ±0,33°C. Die Kommunikation des Sensors findet über I2C (TWI) Interface statt.

Anschlüsse

LM92-Pinout

LM92-Pinout

Adresse

Der LM92 besitzt eine 7-Bit Slave Adresse. Die fünf MSB der Adresse sind Hardwaremäßig vorgegeben und haben den Wert: „10010“. Die zwei letzten Bits (LSB) sind mit den Pins A1-A0 verbunden und können mit GND oder +VS verbunden werden. (Datenblatt Seite: 9)

LM92-Slave Adress

LM92-Slave Adress

Das 8-Bit des Registers wird benötigt, um ein lesen oder schreiben zu signalisieren.

Register

Der LM92 besitzt folgende Register:

  • Pointer Register
  • Temperature Register
  • Configuration Register
  • THYST, TLOW, THIGH und T_CRIT_A Register

Um lediglich eine Temperatur auszulesen reicht das „Temperature Register“. Ein Zugriff auf das enthaltene Konfigurationsregister ist nicht notwendig. Das Zeigerregister legt fest, welches der 4 Register angesprochen wird.

Kommunikation

Sie startet wie immer beim I²C-Bus mit einem START. Danach folgt die Adresse des Slaves. Nun muss ein Byte gesendet werden, welches dem Zeigerregister mitteilt, auf welches Register zugegriffen werden soll. Der Zeiger auf das entsprechende Register wird intern gespeichert, so dass man nicht jedes Mal das Temperaturregister neu auswählen muss, auf welches man zweifelsohne am häufigsten zugreifen wird. Für das Temperaturregister muss als Pointerbyte (Zeigerbyte) 0x00 gesendet werden, für das Konfigurationsregister 0x01. Musste das Zeigerbyte gesetzt werden, so muss nach dem Beschreiben des Pointerregisters ein REPEATED START ausgeführt werden. Danach muss die Adresse des Sensors erneut gesendet werden. Dann kann auf die einzelnen Register zugegriffen werden. Steht der Zeiger bereits auf dem richtigen Register, so reicht ein normaler START gefolgt von der Adresse. Da der das Pointerregister nach dem Power-On automatisch auf das Temperaturregister zeigt, bleibt dem Anwender, der nur an der Temperatur interessiert ist, die obige Prozedur erspart.

Um die Temperatur zu erhalten, müssen Lesezyklen erzeugt werden. Dann müssen zwei Bytes ausgelesen werden, von denen der Master das erste mit ACK zu bestätigen hat. Die Temperatur wird mit dem MSB (most significant bit) voran übertragen.

BILD

Der Sensor braucht für eine Temperaturkonvertierung 100ms. Diese führt er selbständig aus, es sei denn man versetzt ihn in den hier nicht weiter erklärten Energiesparmodus. Man sollte das nur nach dem Einschalten beachten, da der Inhalt des Temperaturregisters in den ersten 100ms alles andere als die richtige Temperatur enthält.

Zu beachten ist, dass im Temperaturregister der Wert der Temperatur mit dem Bit 3 (D3) beginnt und mit dem Bit 15 (D15) endet, wobei das (D15) das Vorzeichen-Bit ist. Die Daten liegen im Zweierkomplement vor. (Datenblatt Seite: 13)

Beispiel

Am Temperatur-Register liegt folgender Binärwert an:

LM92-Beispiel

LM92-Beispiel

Schaltungsaufbau

BILD

Hardware

  • ATMEL Evaluations-Board V2.0.1
  • ATMEL Addon-Board V1.0
  • ATMEL ATmega8 Mikrocontroller
  • mySmartUSB light ISP-Programmer

Software

Main-Routine:

  1. int main(void)
  2. {
  3. double temp;
  4. int ii;
  5. char grd = 0xDF; // Grad-Symbol
  6.  
  7. lcd_init(LCD_DISP_ON);
  8. i2c_init();
  9.  
  10. while(1)
  11. {
  12. // Berechnung der Temperatur
  13. temp = ((double)lm75_gettemp(0))/16.0;
  14. ii = lm92_getvalue(0);
  15.  
  16. // Ausgabe der Temperatur
  17. sprintf(stringBuffer,"Temp: %3.1f %cC ",temp,grd);
  18. lcd_gotoxy(0,0);
  19. lcd_puts(stringBuffer);
  20.  
  21. // Ausgabe des Temperaturregisters
  22. sprintf(stringBuffer,"Reg: %i",ii);
  23. lcd_gotoxy(0,1);
  24. lcd_puts(stringBuffer);
  25.  
  26. _delay_ms(1000); // 1s warten
  27. }
  28. return 0;
  29. }
  30.  

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.