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







Zitieren

Lesezeichen