PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LM75 auslesen geht nich - Beispiel aus RNWissen = 9999



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

Zapo.
19.04.2007, 22:58
fang doch mal klein an und lass das mit dem Error weg....
nur

i2c init
starten
leseadresse schicke
bytes lesen
bytes auswerten
bytes anzeigen
fertig

funktioniert einwandfrei....

und nimm die dim aus der do loop schleife raus...

CapSob
20.04.2007, 17:41
hab jetzt den code erstmal abgeändert. immerhin siehts jetzt nich nach nem error aus...

prob jetzt: "Temp.: 72 Grad"

mein code:

$regfile = "m8def.dat"
$crystal = 16000000
$lib "i2c_twi.lbx" 'Einbindung der I2C-Bibliothek

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

Const Lm75slaveread = &H91
Dim Lm75high As Byte
Dim Lm75low As Byte
Dim Temperatur As Integer
Dim Nachkommastelle As String * 2

Cursor Off Noblink

Cls

Locate 1 , 1
Lcd "[= LM75 Test =]"
Locate 2 , 1
Lcd "über I2C"

Wait 1

Cls

'Anschaltung des I2C-Busses
I2cinit

Waitms 500

Do

'LM75 Abfrage
I2cstart
I2cwbyte Lm75slaveread
I2crbyte Lm75high , Ack
I2crbyte Lm75low , Nack
I2cstop

If Lm75high > 127 Then
Temperatur = Lm75high And 127
Temperatur = Not Temperatur
Incr Temperatur
Else
Temperatur = Lm75high
End If

Lm75low = Lm75low And 128
If Lm75low > 0 Then
Nachkommastelle = ",5"
Else
Nachkommastelle = ""
End If

Locate 1 , 1
Lcd "Temp.: " ; Temperatur ; Nachkommastelle ; " Grad"

Wait 1

Loop

End

jemand ne idee?

Zapo.
20.04.2007, 20:24
also du kannst dem LM75 evt. noch folgendermassen initialisieren:


I2cstart
I2cwbyte Lm75write
I2cwbyte &H00 'Temperaturregister auswählen *Default nach Power up*
I2cstart
I2cwbyte Lm75read 'laut Datenblatt max. 300ms zum beschreiben des Temperaturregister
I2crbyte Lm75high , Ack
I2crbyte Lm75low , Nack
I2cstop

so habe ich das jedenfalls getan, sollte allerdings auch ohne das schreiben von H00 funktionieren da das Register nach dem einschalten ohnehin ausgeählt wird!

sicher das du keine Fahrenheit misst?

wenn überhaupt möglich....

achja... ich habe übrigens überhauptkeine LIB eingebunden! versuche das auch mal!!!

linux_80
20.04.2007, 20:59
Die Lib kann man ruhig drin lassen, denn die macht nur, dass das interne TWI verwendet wird, und Bascom die Ausgäng nicht selber umschaltet (Software-I2C).

Probier auch mal nähe Programmanfang ein Config TWI=100000
Das setzt die Register des TWI-Moduls auf die Startwerte.

CapSob
21.04.2007, 14:11
:arrow: Jetzt gehts!

Ich hab jetzt die Lib für´s Hardware-TWI eingebunden und noch den Code um "Config Twi = 10000" ergänzt.

Hier für alle noch im Anhang den funktionierenden Code zum downloaden.

Thx @ all!

P.S.: Könnte man ja in RN-Wissen / Downloadbereich aufnehmen?

Vitis
22.04.2007, 18:56
Kann damit zusammenhängen, das Bascom beim
Soft TWI den Start als Restart ausführt. Hatte da auch
schonmal Probleme damit.

CapSob
22.04.2007, 23:25
ja kurz gesagt, es lag bloß an dem "Config Twi = 10000"

M4st3rM
23.01.2012, 13:42
Sorry, das ich diesen Alten Thread ausgrabe, benutze das Programm von CapSob, ur wie muss ich das anpassen, um negative Temperaturen darstellen zu können ?
Bei unter 0 °C erhalte ich dann z.B. -127 °C.
Bin leider Anfänger :(