redapple
23.08.2014, 18:55
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:
#!/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
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:
#!/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