PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturmessung über I2C und LM75 läuft nicht



michaelkoemm
15.10.2007, 15:44
Hallo,

ich habe ein Problem mit dem I2C-Bus mit dem ich nicht weiterkomme.
Ist mein erstes I2-Projekt, soll noch wachsen =P~
Ziel: ich möchte die Temperatur aus einem LM75 oder TCN75 (müssten ja gleich sein) auslesen und anzeigen/verarbeiten.
Ich bekomme immer nur 255 als Anzeige. Prozessor Mega 128, Pullups sind 4k7.

Code:


Dim Heat1 As Byte , Slave1 As Byte , Anzheat1 As String * 5 , Anzheat1b As String * 5

$lib "i2c.lib"

Config Sda = Portd.1 'Einrichten für I2C-Bus
Config Scl = Portd.0 'Einrichten für I2C-Bus
I2cinit
Config Twi = 100000

'Temperatur 1 (außen)

Slave1 = &H91
I2Creceive Slave1, Heat1
Anzheat1 = Str(heat1)
Anzheat1b = Format(anzheat1 , "000")

Danach erfolgt die Ausgabe.

Hat jemand eine Idee?
Ich komme so gar nicht weiter.
Vielen Dank schonmal an alle!

Michael

Zapo.
15.10.2007, 19:37
hi,

aus dem LM75 bekommst du 2 Bytes raus... und du mußt mit I2C start und Stop arbeiten....

für den LM75 z.B. so:



I2cstart
I2cwbyte Lm75read
I2crbyte Lm75high , Ack
I2crbyte Lm75low , Nack
I2cstop


diese zwei bytes sind natürlich noch nicht die Temp. dazu mußt du sie noch ein bisschen "formatieren" und vorzeichen auslesen usw.

aber auf jeden FAll bekommst du damit keine 255 mehr raus!

probiers aus...

michaelkoemm
16.10.2007, 15:20
Hallo und Danke schonmal!
ich habe ein bisserl gestöbert und deinen Rat befolgt, leider noch immer erfolglos.
Mein Codeschnipsel jetzt:

I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop

Anzheat1 = Str(tempmsb)
Anzheat1b = Format(anzheat1 , "000")
Tempmsb und Templsb sind die beiden Bytes, richtig?

Langsam muss ich wohl mal in Erwägung ziehen, dass einfach das IC hin ist und mal ein neues bestellen.
Kann man mit dem Oszi eigentlich den Clock vom I2C sehen? Vielleicht kommt der ja schon gar nicht raus.
Ich teste heute abend mal weiter.

MfG
Michael

Zapo.
16.10.2007, 18:50
hi,

also byte ist schon okay... ich habs als integer deklariert...

probiers mal eher mit diesem code:


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

ist prinzipell ganz einfach wenn man weiß was aus dem LM75 rauskommt..

in der Variablen Temperatur steht dann auch die aktuelle Temp...