-         

Ergebnis 1 bis 9 von 9

Thema: LM75 auslesen geht nich - Beispiel aus RNWissen = 9999

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162

    LM75 auslesen geht nich - Beispiel aus RNWissen = 9999

    Anzeige

    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

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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    hab jetzt den code erstmal abgeändert. immerhin siehts jetzt nich nach nem error aus...

    prob jetzt: "Temp.: 72 Grad"

    mein code:
    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?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    39
    Beiträge
    178
    also du kannst dem LM75 evt. noch folgendermassen initialisieren:

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

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    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.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    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?
    Angehängte Dateien Angehängte Dateien

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Kann damit zusammenhängen, das Bascom beim
    Soft TWI den Start als Restart ausführt. Hatte da auch
    schonmal Probleme damit.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    ja kurz gesagt, es lag bloß an dem "Config Twi = 10000"

  9. #9
    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

Berechtigungen

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