Hi folks!

Wollte mal Temperaturmessung mitm LM75 über I2C machen. Vorneweg, das ist mein erstes i2c-Projekt.

Mein Programm ist 1:1 aus RN-Wissen übernommen, klar, mit ein paar kleinen Änderungen.

Am LM75 hab ich die i2c-Pins (A1-A3) auf Masse gelegt, dadurch hab ich als Adresse &h90. Zum lesen dann &h91.

Im nachfolgenden kommt mein Bascom-Programm. Hoffe, ihr könnt den Fehler finden.

Achja, auf dem LCD gibt er die ganze Zeit "Temp.: 9999" aus.

Code:
$regfile = "m8def.dat"
$crystal = 16000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Lcdbus = 4

Config Sda = Portc.4
Config Scl = Portc.5

Cursor Off Noblink

Do

Cls

Dim Ival As Integer
Dim Msb As Byte
Dim Lsb As Byte

I2cstart
I2cwbyte &H91                                               ' Lese-adresse !
If Err = 1 Then
 I2cstop                                                    ' kein ACK vom LM75 --> irgendein Fehler
 Ival = 9999                                                ' Zeichen, daß der Wert ungültig ist !
Else
 I2crbyte Msb , Ack
 I2crbyte Lsb , Nack
 I2cstop
 If Msb.7 = 1 Then
  Ival = Makeint(msb , &HFF)                                ' auffüllen mit den Vorzeichen bits
 Else
  Ival = Makeint(msb , &H00)                                ' positiv, also bleibt es so
 End If
 Ival = Ival * 10                                           ' erweitern
 If Lsb.7 = 1 Then
  Ival = Ival + 5                                           ' fünf Zehntel Grad dazu
 End If
End If

Locate 1 , 1
Lcd "Temp.: "

Locate 1 , 8
Lcd Ival

Wait 1

Loop