Pi als I2C-Master mehrere Bytes empfangen

  • Hallo Leute,

    ich steh im Moment echt auf dem Schlauch. Ich hab hier einen Arduino Uno als Slave und meinen Pi als Master.

    Der Arduino schreibt mir auf Anfrage vom Pi ein Array mit der Größe von 2 Byte auf den Bus.

    - Anfrage des Pi´s
    - Arduino sendet ein Array mit 2 Byte. Im ersten Byte steht 200 und wird in jeder Abfrage runtergezählt, im zweiten Byte 0 und wird bei jeder Anfrage hochgezählt.

    Wie greife ich jetzt auf dieses Array zu? Bzw mit welcher Funktion empfange ich es?

    da die Funktion bus.read_word_data eine Adresse des Byteregister will und ich diese nicht kenne, kann ich die Funktion nicht gebrauchen. Bis jetzt kann ich halt nur ein Byte mit der Funktion bus.read_byte auslesen :helpnew:

    hier mal der Code vom Arduino:

    Hoffe das genügt für ne kurze Übersicht und hoffentlich kann mir jemand helfen. Ich stell mich da schon seit Stunden einfach nur dumm an :wallbash:

  • Hi,
    warum schreibst Du das hier in das Python Subforum, wenn es doch C ist und warum schaust Du nicht einfach mal in das Microcontroller-Subforum (wo es eigentlich hingehört) und dort z.B. mal in die Kurzanleitungen zum Arduino?
    Dann hättest Du auch -> das hier <- gefunden und Dir den Beitrag evtl. schenken können.
    Mal im Ernst: warum, denkst Du, setzen sich viele Mitglieder hier sich hin und schreiben in ihrerer Freizeit Anleitungen :fies: ?


    cu,
    -ds-

  • Hallo dreamshader,

    ich habe den C-Programmteil gepostet, da ich aufzeigen wollte, wie das 2-Byte-Array gesendet wird.

    Mein Problem ist aber der Zugriff auf Pi Seite mittels Python. Ich weiß nicht, wie ich das realisieren soll. Da ich auch ein blutiger Anfänger sei es mir verziehen, wenn ich nicht genau weiß, nach was ich suchen soll.

    Ich bin dir schonmal sehr dankbar für deine Antwort, aber um ehrlich zu sein, weiß ich auch jetzt nicht, was ich mit deiner Antwort bezogen auf meine Fragestellung anfangen kann...

    Schnönen Abend noch
    ShankZ

  • Nein im Gegenteil, ich habe mir den Beitrag durchgelesen....
    Aber ich weiß einfach nicht, was ich davon jetzt verwenden kann....

    Wie gesagt, ich bin Anfänger und kenne mich mit den ganzen Begrifflichkeiten wie Posix etc. nicht aus ...

    Es gibt auch Leute, die von dem Ganzen Null Ahnung haben und sich erst mal einarbeiten müssen. Ich wette mit dir, du warst sicherlich nicht anderst. Aller Anfang ist schwer, aber mit solchen Kommentaren kannste echt mal Inne halten.

    Einmal editiert, zuletzt von ShankZ (27. Dezember 2014 um 20:13)

  • Was willst Du eigentlich :fies:
    Du findest dort einen Verweis auf Aufrufe der pipgpio-Library, die es auch für Python gibt.
    Du hast für alle Fälle notfalls noch die Forensuche, die Dir zusätzlich Informationen liefert ...

    Wenn Du keinen Bock hast, Dir selbst was zu erarbeiten, dann sei wenigstens ehrlich und schreib es halt so: ich suche einen Deppen, der mir das coded ...

    Oh Mann :wallbash:
    -ds-

  • Hey Dreamshader,

    es ist definitiv nicht so. Stell nicht irgendwelche Behauptungen auf die gar nicht stimmen. Ich will mich in die Materie einarbeiten weil ich es will und auch muss. Also nützt es mir gar nichts, wenn ich hier fertige Ergebnisse kopiere und als meine verkaufe.

    Ich bin dir schon mal sehr dankbar, dass du mit den Tipp mit der PIGPIO-Library gegeben hast. Aber hätte es nicht die letzten 4 Postings erspart, wenn der Tipp schon am Anfang der Konversation gekommen wäre?

    Nichtsdestotrotz bekomm ich es nicht hin, vom dem Arduino 2 Bytes auszulesen. Mit 1 Byte klappt er herrvoragend.

    Hier mal mein Python-Script vom Raspberry (Master):

    und hier mein C-Code vom Arduino (Slave):

    als Ergebnis bekomm ich immer :

    Inhalt (-83L,' ')

    nur verstehe ich nicht warum... Ich weiß dass ich als Ergebnis die Anzahl der gelesenen Bytes bekomme und ein Bytearray mit den Inhalt.

    Die Anzahl der gelesenen Bytes kann ja aber schonmal -83L nicht sein, wenn ich am Arduino ein Array mit 2 Byte schreibe...

    EDIT:

    Per Zufall hab ich jetzt rausgefunden, warum das nicht funktioniert hat.
    Wenn ich alles was mit Serial. aus dem Arduino C-Program rausnehme, funktioniert es 1a. Warum weiß ich nicht, aber es funktioniert nun.

    Grüße ShankZ

    Einmal editiert, zuletzt von ShankZ (29. Dezember 2014 um 14:12)


  • Hey Dreamshader,
    ...
    ich bin dir schon mal sehr dankbar, dass du mit den Tipp mit der PIGPIO-Library gegeben hast.
    ...


    das war von Anfang an meine Intention ...


    ...
    Aber hätte es nicht die letzten 4 Postings erspart, wenn der Tipp schon am Anfang der Konversation
    ...


    mag sein.
    Vielleicht drücke ich mich manchmal etwas missverständlich aus - vielleicht bin ich manchmal auch zu direkt - vielleicht eiert mich manchmal das Wiederkäuen von "nutz die Suchfunktion" auch einfach an und irgend jemand bekommt es dann ab ...
    Aber letztendlich hat es doch geklappt ...


    ...
    Aber hätte es nicht die letzten 4 Postings erspart, wenn der Tipp schon am Anfang der Konversation
    ...
    Per Zufall hab ich jetzt rausgefunden, warum das nicht funktioniert hat.
    ...


    Jedenfalls solltest Du doch jetzt aber ein tolles Gefühl haben, oder wär es dir rückblickens lieber gewesen, jemand hätte Dir alles vorgekaut ;) ...


    ...
    Wenn ich alles was mit Serial. aus dem Arduino C-Program rausnehme, funktioniert es 1a. Warum weiß ich nicht, aber es funktioniert nun.
    ...


    Dafür habe ich allerdings auch keine Erklärung.
    Es gibt so einen Effekt bei attachInterrupt ... das ist aber logisch un nachvollziehbar.
    Aber so :s
    Ich auch einiges an IIC-Kommunikation und bisher nichts dergleichen feststellen können.
    Ich behalt's aber mal im Hinterkopf ...

    cheers,
    -ds-

Jetzt mitmachen!

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