CapSob
19.04.2007, 17:00
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.
$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
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.
$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