-         

Ergebnis 1 bis 6 von 6

Thema: RP6v2 als I2C Slave mit Raspi als Master (Python): IOError

  1. #1
    Neuer Benutzer Avatar von redapple
    Registriert seit
    23.08.2014
    Ort
    Nordrhein-Westfalen
    Beiträge
    4

    RP6v2 als I2C Slave mit Raspi als Master (Python): IOError

    Anzeige

    Hallo Roboternetz-Forum,
    ich bin noch blutiger Anfänger, was Robotik und Elektronik betrifft, aber durchaus lernfähig .

    Folgendes Problem:
    Ich habe den RP6v2 über I2C mit Pegelwandler (meine erste Löterfahrung, daher kanns auch daran liegen) mit dem Raspberry Pi Rev. 2 verbunden.

    Der RP6 wird über den Bus als Slave vom Raspi Master mit einem Python-Script angesprochen, das auf dem RP6 ein kleines LED-Lauflicht erzeugt:

    Code:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import smbus
    import time
    
    # bus = smbus.SMBus(0)  # Pi Rev. 1
    bus = smbus.SMBus(1)    # Pi Rev. 2
    
    DEVICE = 0x05           # I2C Address of RP6
    
    # Commands
    SET_LEDS = 0x03         # I2C Command to set leds
    
    leds  = 0b00000001      # LED Status
    
    c = 0
    
    while(True):
            time.sleep(0.5)
            # write SET_LEDS Command to RP6
            try:
                    # List of max 32 integers !!!
                    # myData[0] -> Command "SET_LEDS" (0x03)
                    # myData[1] -> Parameter 1: LED Bits
                    myData = [SET_LEDS, leds]
    
                    bus.write_i2c_block_data(DEVICE, 0x00, myData)
                    leds <<= 1
                    if (leds > 32):
                            leds = 1
            except IOError:
                    print 'There was an IOError in loop ', c
            
            c += 1
            if (c % 100 == 0):
                    print 'Loop: ',c
    Auf dem RP6 selbst läuft das "RP6Base_I2CSlave" Example Programm.

    Das Problem:
    Hin und wieder kommt es zu einem IOError.
    Das Problem ist, diese Fehler führen auf dem RP6 meißt zu unvorhersehbarem Verhalten. Der Roboter startete bei mir beispielsweise manchmal die Motoren bei obigem Script und wär' mir beim ersten mal fast vom Tisch gefallen.

    Ich denke, dass man beim I2C Bus immer mit IO Fehlern rechnen muss. Die Frage wäre, wie man das unberechenbare Verhalten des Roboters in den Griff bekommt.

    Bin für alle Ideen dankbar.

    Best wishes,
    Daniel

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Mit welcher Geschwindigkeit initialisiert dein Raspi den I2C-Bus?

    Die Frage wäre, wie man das unberechenbare Verhalten des Roboters in den Griff bekommt.
    Lass den RP6 das Kommando zurückschicken. Wenn der Raspi das Echo geprüft und für richtig befunden hat sendet er ein Start-Kommando zum RP6.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hi,

    du kannst versuchen, den Watchdog des Slaves auszuschalten (obwohl das wegen eines Bugs im Slave eher unnötig ist)
    Gruß
    Dirk

  4. #4
    Neuer Benutzer Avatar von redapple
    Registriert seit
    23.08.2014
    Ort
    Nordrhein-Westfalen
    Beiträge
    4
    Hallo radbruch,
    ich hab die baudrate schon von 100kbit auf 32kbit runtergesetzt. Ist zwar etwas besser, aber IOErrors tauchen immer noch auf.

    Hab mir überlegt, vielleicht ginge das auch mit einer Checksumme, dann braucht man nicht das ganze Kommando zurückschicken...

    Liebe Grüße,
    Daniel

    **EDIT**
    Ist wohl ein I2C Clock Stretching Problem des Raspberry Pi:
    http://www.advamation.de/technik/ras...i-i2c-bug.html
    Geändert von redapple (23.08.2014 um 23:18 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Nochmal zur Erklärung:

    Das Original I2C-Slave Programm ist nicht so ausgelegt, dass man einfach I2C-Befehle nacheinander senden kann.
    Stattdessen muss man z.B. auch auf Watchdog-Requests reagieren.

    Bei einem geeigneten Master kommt es nicht zu "falschen" Reaktionen des Slaves.

    M.E. kann man das auch in deinem Fall NICHT auf die Geschwindigkeit des I2C-Busses zurückführen:
    Die Slave-Master-Kombinationen funktionieren z.B. mit der M32 als Master und einem passenden Programm mit 100kHz ohne wesentliche Übertragungsfehler.
    Gruß
    Dirk

  6. #6
    Neuer Benutzer Avatar von redapple
    Registriert seit
    23.08.2014
    Ort
    Nordrhein-Westfalen
    Beiträge
    4
    Hallo Dirk,
    ich wollte nicht behaupten, dass der Slave fehlerhaft programmiert ist. Um ehrlich zu sein muss ich zugeben, dass ich das auch nicht wirklich beurteilen kann.

    Mir war auch nicht klar, dass ich auf dem Master z.B. auf Watchdog-Requests reagieren muss und vor allem, wie ich das realisiere.

    Ich muss mir halt noch etwas mehr Dokumentation zusammensuchen und durchackern. Bin halt Anfänger.

    Best wishes,
    Daniel

Ähnliche Themen

  1. Mikrokontroller bei I2C als Slave und Master ,möglich?
    Von tranh85bo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 10.11.2009, 14:25
  2. RP6 Base mal als i2C Master und als I2C Slave
    Von Lurchi im Forum Robby RP6
    Antworten: 6
    Letzter Beitrag: 15.05.2009, 22:08
  3. TWI I²C ATmega8 als Master/Slave
    Von Geimel im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 16.05.2007, 23:12
  4. Atmega8 als I2c Master, und Slave
    Von ChRiZ im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 11.07.2006, 12:31
  5. PICs als I2C Master und Slave in C mit CCS-compiler
    Von andi619 im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 07.08.2005, 10:10

Berechtigungen

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