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:
Auf dem RP6 selbst läuft das "RP6Base_I2CSlave" Example Programm.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
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







Zitieren

Lesezeichen