-         

Ergebnis 1 bis 6 von 6

Thema: Problem mit I2C

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356

    Problem mit I2C

    Anzeige

    Hallo, ich versuche verzweifelt einen LM75 anzusteuern.
    Auf dem RPI unter Linux funktionierd das Prima, unter Bascom scheitert er jedoch schon beim i2cstart.
    Leider findet sich weder in google noch in der Bedienungsanleitung irgendein Hinweis was hier falsch läuft.
    Ich hab keine Ahnung was ich noch machen soll.
    Code:
    $regfile "m88def.dat"
    
    'Angabe der Taktfrequenz (8Mhz)
    $crystal = 8000000
    $baud = 9600
    
    'Einbindung der I2C-Bibliothek
    $lib "i2c_twi.lbx"
    
    'Angabe der I2C-Bus-PIN´s (mit i2c_twi.lbx nicht veränderbar!)
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    Config TWI = 100000
    'Konfiguration der Ports
    Config Portd = Output
    
    Dim I2c_state As Bit
    
    Dim N As Byte
    
    'Variablen für Temperaturmessung LM75 Basis-Adresse Hex 90/91 (=144/145)
    Const Lm75slavewrite = &H48
    Const Lm75slaveread = &H49
    Dim Lm75high As Byte
    Dim Lm75low As Byte
    Dim Temperatur As Integer
    Dim Nachkommastelle As String * 2
    
    
    'Anschaltung des I2C-Busses
    I2cinit
    Print Err;
    '======================================================
    'Hauptprogramm-Schleife
    '======================================================
    Do
    
       'LM75 Abfrage
       I2cstart
       If Err = 1 Then Print "Error starting TWI";
       I2cwbyte Lm75slaveread
       Print Err
       If Err = 1 Then Print "Error Writing address\nIs the device connected ?";
       I2crbyte Lm75high , Ack
       If Err = 1 Then Print "Error reading High byte";
       I2crbyte Lm75low , Nack
       If Err = 1 Then Print "Error reading Low byte";
       I2cstop
    
       Print Err
       Print Lm75high ; Lm75low
    
       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
       Print "Temp.: " ; Temperatur ; Nachkommastelle ; " Grad"
    
    'Status-Life-Bit für Hauptprogramm
    Toggle Portd.0
    Waitms 500
    
    Loop
    
    
    
    'Programmende (nur formal)
    End
    MFG Thalhammer

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Bascom erwartet eine 8 Bit Adresse inkl. R/W Bit.
    Code:
    Const Lm75slaveread = &H49
    Geändert von MagicWSmoke (05.02.2013 um 08:18 Uhr)

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Das ist doch je 8 Bit Adresse und rw ins auch drin.
    Also das Problem mit dem i2cstart falsch hab ich jetzt behoben, allerdings scheitert das lesen immer noch.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Schau Dir mal das Datenblatt an und dort eine Abfragesequenz, da findest Du zur Adressierung:
    1 0 0 1 A2 A1 A0 R/W

    Jetzt übersetz das mal in Hex...

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    JA kommt 0x90 bzw 0x91 raus, aber 1. findet mein PI den auch bei 0x48 und zweitens funktionierds mit 0x90/0x91 auch nicht.

    EDIT:
    Ich habs grade nochmal mit 0x91 probiert und jetzt gehts.
    Warum es vorher nicht geklappt hat erschliest sich mir nicht. Das RPI hat woll eine etwas eigene Anzeigeweise.
    Geändert von Thalhammer (05.02.2013 um 17:23 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Thalhammer Beitrag anzeigen
    Das RPI hat woll eine etwas eigene Anzeigeweise.
    Manchmal wird die I2C-Adresse nur mit den 7 höheren Bits 7..1 angegeben, das nicht angegebene Bit 0 ist dann das R/W-Bit.
    Bascom möchte dagegen eine 8 Bit-Adresse mit einbezogenem R/W-Bit, das ist der ganze Unterschied.

Ähnliche Themen

  1. Problem mit i2c (c)
    Von avrrobot im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 31.10.2011, 08:33
  2. Problem mit I2C Sensor DRMOD-I2C-RVI
    Von muerzi im Forum Sensoren / Sensorik
    Antworten: 23
    Letzter Beitrag: 22.02.2010, 19:29
  3. I2C Problem mit RN-Control128Funk
    Von Lorenz86 im Forum AVR Hardwarethemen
    Antworten: 13
    Letzter Beitrag: 23.04.2009, 00:04
  4. Problem: Zwei MEGA8 via I2C-Bus koppeln (mit I2C-slave-Lib)
    Von Ulfens im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 11.01.2006, 16:25
  5. Problem mit I2C (Adressierung???)
    Von Xeus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 28.02.2005, 18:56

Berechtigungen

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