-         

Ergebnis 1 bis 7 von 7

Thema: Problem mit I2C und LM75

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.04.2006
    Beiträge
    10

    Problem mit I2C und LM75

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo Forum!

    Nachdem ich gestern angefangen hab, mich mit I2C zu beschäftigen, steh ich jetzt schon vor einem Problem

    Ich habe versucht, den LM75 am I2C zum laufen zu bekommen, angesprochen soll das ganze über Bascom werden (nach dieser Anleitung).

    Angeschlossen hab ich das ganze über ein selbstgefrickeltes Adapterkabel am RN-Conrol:



    Pin 1 vom Board an Pin 2 vom LM75
    Pin 2 an Pin 4
    Pin 3 an Pin 1
    Pin 5 an Pin 8
    Pin 5 / 6 / 7 am LM75 hab ich auf 5V gelegt, somit sollte die Adresse ja 1001111 lauten, in Hex: 4F

    Pin 1 und 3 gehen jeweils über 2,2k auf +5V

    Tja, soweit so gut! Nur liefert mir das Bascom-Beispielprogramm immer 9999 zurück, also ein Fehler beim Ansprechen des LM7!?

    Hat irgendjemand eine Idee, wo der Fehler liegen kann?



    Gruß
    Tobias

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    1001111 lauten, in Hex: 4F
    Is nicht so ganz. Eigentlich
    10011110 lauten, in Hex: 9E (write) 9F (read)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.04.2006
    Beiträge
    10
    Ich benutze diesen Code:

    Code:
    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
    wobei ich "I2cwbyte &H91" durch "I2cwbyte &H9E" und auch "I2cwbyte &H9F" ersetzt habe.
    In beiden fällen kam als Wert für Ival nur 9999... daran scheint es also nicht zu liegen.

    Ist die Verdrahtung wie im 1ten Post beschrieben denn soweit korrekt?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Nun, RN-Control hab ich nicht, weiss also die Pin-Nummern nicht, aber zur kontrolle und Vergleich
    LM75-1....I2CDATA=SDA
    LM75-2....I2CTAKT=SCL
    LM75-3....frei lassen
    LM75-4....GND
    LM75-5....+5V für &H9E
    LM75-6....+5V für &H9E
    LM75-7....+5V für &H9E
    LM75-8....+5V

    Zum Auslesen der Temp also I2cwbyte &H9F

    Config Scl = Portc.0 'Ports fuer IIC-Bus MEGA32
    Config Sda = Portc.1 'Ports fuer IIC-Bus MEGA32

    I2CInit ist auch da ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.04.2006
    Beiträge
    10
    Besten Dank, Robert!
    Code:
    Config Scl = Portc.0 'Ports fuer IIC-Bus MEGA32
    Config Sda = Portc.1 'Ports fuer IIC-Bus MEGA32
    Daran hätte ich denken sollen Vielleicht sollte das jemand in dem Bascom Beispiel im Wiki ergänzen!

    Jetzt bekomme ich zwar einen Wert übergeben, jedoch erscheinen mir -5 Grad bei dem Wetter ziemlich unrealistisch
    Hat da jemand eine Idee, woran DAS schonwieder liegen mag?

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Fällt mir momentan nix ein, denn wenn der LM75 seine Adresse richtig mitkriegt und sein Ack schickt (Err = 0) , sollten die Daten auch stimmen.
    Eventuell, schad' nix:
    Config I2cdelay = 5
    damit den Bus nicht zuuuu schnelle ist. (Bin aber skeptisch)

    Noch ein Tip: ganz vorne im Programm
    $LIB "I2C_TWI.LBX"
    einfügen, dann nimmt er die Hardware-I2C statt der Software.
    da mußt du dann aber schreiben
    CONFIG TWI = 100000 (für 100 kHz)

    config scl etc. kann dann entfallen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    24.04.2006
    Beiträge
    10
    Danke schonmal!

    Habs grad mal auf die Schnelle eingebaut, jetzt misst er -975 Grad

    Ich werd nachher nochmal alles kontrollieren, muss jetzt erstmal weg...

    edit:
    Ich dreh langsam am Rad... hier mal der komplette Code, der mir -975 zurückliefert...


    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    'Config Scl = Portc.0                                        'Ports fuer IIC-Bus MEGA32
    'Config Sda = Portc.1                                        'Ports fuer IIC-Bus MEGA32
    Config I2cdelay = 5
    CONFIG TWI = 100000
    
    $LIB "I2C_TWI.LBX"
    
    
    Print "Let's go!"
    
    Do
    Dim Ival As Integer
    Dim Msb As Byte
    Dim Lsb As Byte
            I2cstart
            I2cwbyte &H9E                                       ' 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
            Print Ival
            Wait 2
    Loop
    Ist da irgendwo ein Fehler den ich nicht finde, oder ist etwa der LM75 defekt?!

Berechtigungen

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