- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Problem mit mehreren I2C Senoren

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101

    Problem mit mehreren I2C Senoren

    Anzeige

    Praxistest und DIY Projekte
    Hallo Zusammen,

    versuche seit ca. zwei Stunden 5 verschiedene SRF02 (2 alte und 3 neu gekaufte Sensoren) auszulesen. Fertige Programme von Robotikhardware werden verwendet.

    Ich habe keinen Erfolg, das seltsame ist genau diese Sensoren funktionierten vor ein paar Wochen noch.

    Andere I2C Teilnehmer wurden auch schon ausprobiert, diese Funktionieren einwandfrei (PCF8574, DS1307).

    Die Adresse der I2C Sensoren ist immer die &HE0, welche ja als Standart Adresse bekannt ist.

    Hier der Code:
    Code:
    '###################################################
    'SRF02_rncontrol_i2c_beispiel2.bas
    'für
    'RoboterNetz Board RN-Control (ab Version 1.1)
    'und das SRF02 Ultraschallmodul für Entfernungsmessung
    'Datenblatt zu SRF02:
    'https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=357
    'Anschlussbeschreibung:
    'https://www.roboternetz.de/wissen/index.php/Sensorarten
    
    'Aufgabe:
    ' Gibt die Firmware-Version vom SRF02 aus und
    ' anschließend in einer Endlosschleife die
    ' Entfernung von Objekten in Zentimetern
    ' Die Entfernung wird 1 mal pro Sekunde über RS232
    ' ausgegeben
    ' Hier wird noch genau gescheckt ob ein Sensor die
    ' Messung schon beendet hat. Dadurch sind noch
    ' schnellere Messungen als nur 15 pro Sekunde möglich
    
    'Autor: Frank  (Roboternetz)
    'Weitere Beispiele und Beschreibung der Hardware
    'unter http://www.Roboternetz.de oder robotikhardware.de
    '#######################################################
    
    
    
    Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    
    
    $regfile = "m32def.dat"
    $framesize = 42
    $swstack = 42
    $hwstack = 42
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 19200
    
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    
    Const Srf02_slaveid = &HE0                                  'Standard I2C Adresse von SRF02
    
    Dim Entfernung As Integer
    Dim V As Byte
    
    
    
    
       Wait 3                                                   'Warte 3 Sekunden
       I2cinit
       Print "SRF02 Testprogramm von robotikhardware.de"
       Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid)
    
    
       V = 1
       Do
         Entfernung = Srf02_entfernung(srf02_slaveid)
         Print "Entfernung:" ; Entfernung ; "cm"
         Wait 1
       Loop
    
    
    End
    
    
    
    '------------- Hilfsfunktionen für SRF02 ----------
    
    
    Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Local Firmware As Byte
    Local Slaveid_read As Byte
    
       Slaveid_read = Slaveid + 1
    
       I2cstart
       I2cwbyte Slaveid
       I2cwbyte 0                                               'Leseregister festlegen
       I2cstop
    
       I2cstart
       I2cwbyte Slaveid_read
       I2crbyte Firmware , Nack
       I2cstop
    
       Srf02_firmware = Firmware
    End Function
    
    
    
    Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    Local Lob As Byte
    Local Hib As Byte
    Local Firmware As Byte
    Local Temp As Byte
    Local Slaveid_read As Byte
    
       Slaveid_read = Slaveid + 1
    
       'Messvorgang in starten
       I2cstart
       I2cwbyte Slaveid
       I2cwbyte 0
       I2cwbyte 81                                              'in Zentimetern messen
       I2cstop
    
    
    Warteaufmessung:
       Waitms 1
       Firmware = Srf02_firmware(slaveid)
       If Firmware = 255 Then Goto Warteaufmessung
    
       I2cstart
       I2cwbyte Slaveid
       I2cwbyte 2                                               'Leseregister festlegen
       I2cstop
    
    
       I2cstart
       I2cwbyte Slaveid_read
       I2crbyte Hib , Ack
       I2crbyte Lob , Nack
       I2cstop
    
    
       Srf02_entfernung = Makeint(lob , Hib)
    End Function
    Als Board verwende ich das RN-Control 1.4. Der Aufbau wurde wie im PDF mit dem zwischen Board und den selben Kablen(Kabelfarben) realisiert. Auch die LED auf der Rückseite des Srf02 blinkt im Takt zur Abfrage.

    Vielleicht habt ihr noch Anregungen oder Ideen, woran es liegen könnte.

    Vielen Dank!

    Gruß
    Patrick

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    verstehe ich das richtig? Du hast alle 5 Sensoren an einem I2C hängen? Das kann natürlich nur funktionieren, wenn alle 5 Sensoren unterschiedliche Adressen haben!!!

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    Entschuldigt, das habe ich scheinbar vergessen zu schreiben.

    Hab diese einzeln (nach einander) am I2C BUS angeschlossen gehabt.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    kleine Check-Liste:

    - Du bist Dir sicher, dass die Adresse der Sensoren nicht verändert wurde (kein kurzes Blinken der LED)?
    - der Mode-Pin ist nicht mit GND verbunden?
    - am I2C sind zwei Pull-Up Widerstände vorhanden?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    Vielen Dank für deine Antwort,

    nach deiner Checklliste sind alle Punkte korrekt.

    Werde das heute Abend an einem anderen Board testen, hoffe das es dann Funktioniert.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    eigentlich kann man bei den Dingern nicht viel falsch machen. Der Fehler ist meist etwas vollkommen banales.

    Um Sensoren selbst zu testen, kannst Du sie ja auch mal per RS232 an den PC hängen und sehen, ob sie da korrekt funktionieren.

Ä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. Mehrere Senoren --> Eine Schnittstelle
    Von grid im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 03.02.2010, 22:41
  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. Allgemeine Informationen über optische Senoren
    Von kerstin51 im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 17.05.2005, 11:27

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests