-         
Ergebnis 1 bis 4 von 4

Thema: Temperaturmessung über I2C und LM75 läuft nicht

  1. #1

    Temperaturmessung über I2C und LM75 läuft nicht

    Anzeige

    Hallo,

    ich habe ein Problem mit dem I2C-Bus mit dem ich nicht weiterkomme.
    Ist mein erstes I2-Projekt, soll noch wachsen
    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    40
    Beiträge
    178
    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:


    Code:
             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...

  3. #3
    Hallo und Danke schonmal!
    ich habe ein bisserl gestöbert und deinen Rat befolgt, leider noch immer erfolglos.
    Mein Codeschnipsel jetzt:
    Code:
    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

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    40
    Beiträge
    178
    hi,

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

    probiers mal eher mit diesem code:
    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...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •