I2c Bus ioerror errno 5 input/output error

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Guten Tag,

    ich habe ein Python Programm geschrieben, dass auf dem I2C Bus zugreift.
    Ich bin Anfänger bei der Programmierung. Mein Problem ist wenn ich das Programm starte kommt der Fehler (es funktioniert eine bestimmte Zeit) IOError: [Errno 5] Input/Output error.
    Kann mir bitte jemand helfen? Habe im Anhang mein Pythonprogramm angehängt und eine Pdf Datei mit der Beschreibung der Steuerung auf die ich zu greifen möchte.
    Es würde mich freuen, wenn mir einer helfen könnte und auch vielleicht einige Tipps zur Verbesserung des Programmes.


    Vielen Dank

    Raspo

  • - Ich hoffe, du hast die I2C-Jumper auf dem Controller NICHT gesteckt, die gehen nämlich auf 5V, was der Raspberry (?, Version?) nicht besonders gerne hat.
    - Python gibt normalerweise den Code-Teil, der den Fehler verursacht, mit aus. Bitte in CODE-Tags hier posten.
    - und dann wäre noch ein

    Code
    i2cdetect -y 1

    hilfreich, ob der Raspberry das I2C-Device auch sieht.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • Hallo Digiart,

    ich habe die Jumper nicht gesetzt, mir ist aufgefallen, dass wenn er den Fehler macht und ich dann den Befehl [font="Courier New"]i2cdetect -y 1 eingebe liest[/font]
    [font="Courier New"]er zuerst eine falsche Adresse und erst dann wieder die Richtige.[/font]
    [font="Courier New"]Ich bekomme diesen Fehler.[/font]

    Traceback (most recent call last):
    File "daten_senden1.py", line 58, in <module>
    st_schritt_m1=bus.read_word_data(I2C_ADDRESS, 0x00)
    IOError: [Errno 5] Input/output error
    root@raspberrypi:/home/pi/jan_projekt#

    Danke für deine rasche Anwort
    Raspo

  • Das klingt sehr nach einem elektrischen Problem. Mein Breadboard-Aufbau ist auch manchmal etwas wackelig, und dann hakt I2C fuer meine MPU6050 auch.

    Du musst sicherstellen, dass die Kabel gut genug verbinden, und solange i2cdetect keine zuverlaessige Antwort bezueglich der Adresse liefert, brauchst du das Python nicht probieren.

  • Hallo Deets,

    danke für deine Hilfe.
    Ich war leider krank un konnte nicht antworten. Ich habe das kontrolliert, die Verbindungen sollten passen, ich kann jedesmal mit dem Befehl ( i2cdetect -y 1) die Adresse des Treibers auslesen.
    Desshalb denke ich könnte die Verbindung passen.

    danke

    Raspo

  • Ok, wenn die es tut, dann frage ich mich, welchen Befehl du da absetzten willst. Dein Code ( st_schritt_m1=bus.read_word_data(I2C_ADDRESS, 0x00)) liefert ja einen Fehler - auf welchen Abschnitt der von dir verlinkten Dokumentation bezieht sich das?

  • Hallo Deets,

    ich bedanke mich für deine Hilfe.
    Am Samstag habe ich noch etwas getestet, ich habe noch Relais am I2C Port angeschlossen, die funktionieren einwandfrei. Deshalb bin ich der Meinung ich mache Fehler bei der Ansteuerung des Bordes.
    Oben im Anhang (Pdf Datei) ist die Beschreibung wie man das Board ansteuert. Da ich kein Profi bin liegt es sicher an mir. Wenn ich dich bitten könnte mir vielleicht einen Tipp geben zu können wäre ich sehr dankbar.
    Ich schicke solche Befehle: write_i2c_block_data(I2C_ADDRESS, 0x35, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00])

    danke
    raspo

  • Das sieht so aus als ob du I2C benutzt, aber die RS232 Befehle schickst. Die Adresse 35 sehe ich nirgendwo in der Dokumentation, aber sehr wohl als Teil der RS232-Kommunikation als Praeambel. Bitte den Abschnitt ueber "Wie sieht die Befehlssyntax aus" noch mal lesen, und genau auf die Unterschiede achten. Und dann entsprechend andere Befehle schicken.

  • Guten Tag,

    die Die Adresse 35 habe ich von decimal in (decimal 53 nach hexa 35) nach Hexadecimal umgwandelt und laut Beschreibung 53 Geschwindigkeit und Beschleunigung festlegen
    das habe ich so verstanden.
    Ich bin für jede Hilfe offen.

    Danke Raspo

  • Ah. Die Konvertierung haette ich unterlassen, da das PDF eben dezimale Werte annimmt. Damit ist durch die Konvertierung nur Verwirrung zu erwarten.

    Aendern tut das natuerlich nichts, aber das Kommando an Adresse 53 mit 6 Nullen ist ja auch kein sinnvolles Kommando. Auch ist das letzte Byte - die CRC - nur anzugeben, wenn man den CRC-Modus aktiviert hat. Da sehe ich auch nichts von - das muesste an 201/0xC9 gehen.

    Und die CRC-Berechnung selbst bildet die Summe aus allen Bytes, dem Kommando-Byte inklusive. Da das schon 53 ist - wie soll die dann 0 werden?

    Bitte noch mal die Dokumentation gruendlich durchlesen. Die ist wirklich gut, und erklaert das alles. Mehr als die lesen tu ich hier auch nicht.
    Automatisch zusammengefügt:
    Noch als Nachtrag: die CRC wird nur empfohlen, wenn man seriell arbeitet, das I2C robuster ist. Steht aber auch alles drin ;)

    • Offizieller Beitrag

    Warum stellst du nicht einfach deine Frage und schaust was passiert? Wenn sie mit diesem Problem nichts mehr zu tun hat bitte einen anderen Thread aufmachen oder den "wie sage ich es in python" Thread nutzen

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!