- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Spi-lesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.11.2012
    Beiträge
    5

    Böse Spi-lesen

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe eine Schaltung aufgebaut wo der Raspberry SPI-Master und ein PIC-Controller ein Slave ist. Soweit so gut. Mein Problem liegt dadrin dass ich auf eine anfrage bei Slave mehrere Anworten heben möchte. Beispiel Master sendet 1 Byte und Slave anwortet mit 4 Bytes zurück.
    spi.writebytes(0x12)
    antwort=spi.readbaytes(0);
    print antwort[0]
    print antwort[1]
    print antwort[2]
    print antwort[3]

    ich finde ein Anwort nur im antwort[0] aber da ist nur der Letze Wert drin der von Slave gesendet wurde.
    Ich bitte um Hilfe

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Ich weiß zwar nicht, in welcher Sprache dein Codefragment ist. Ich kenne ebenfalls die Funktion spi.readbaytes() nicht. Ich kann aber auch im Code keine Stelle sehen, wo die Zahl 4 vorkommt. Dafür finde ich bei spi.readbaytes(0) den Parameter 0. Was bedeutet der? Was sagt die Doku zu spi.readbaytes()? Könnte der Parameter die Anzahl der zu lesenden Bytes sein? Könnte dein Problem ein klassischer "Manual not Read Error" sein?

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.11.2012
    Beiträge
    5
    Ich bin doch richtig hier oder im Forum raspberry Pi. Ich denke hier müsste PYthon bekannt sein. https://pypi.python.org/pypi/spidev kleine erklärung. Die zahl 4 denke ich hier dass es nicht relevant ist weil die letzte Antwort überschreibt den vorherigen. Auch wenn ich antwort=spi.readbaytes(4); schreibe.
    Gruß

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von sterngleiter Beitrag anzeigen
    Ich bin doch richtig hier oder im Forum raspberry Pi. Ich denke hier müsste PYthon bekannt sein.
    Ein Raspberry ist ein PC. Da läuft jede Sprache drauf, die auch auf dem PC läuft. Diese Zeile z.B.

    antwort=spi.readbaytes(0);

    könnte auch gültiger C-Code, lua oder Javascript sein.

    Wenn also die 0 unwesentlich ist, liegt das Problem woanders. Mir fehlt trotzdem die Vorstellung, woher das readbyte wissen soll, daß 4 Bytes und nicht 1k Bytes gelesen werden sollen.

    Ein wenig Googlen nach spi.readbaytes() fördert

    Python Spidev
    .
    .
    .
    readbytes(n)

    Read n bytes from SPI device.
    Ob das nun die Doku für die von dir benutzte Python Library ist oder ob du eine andere benutzt, weiß ich nicht.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.11.2012
    Beiträge
    5
    Sorry leiten Sie das Thema nicht woanders hin. Meine google versuche haben mir nicht geholfen daher ersuche ich Hilfe hier.
    Ich habe gehofft das ein erfahrener Kollege mir eventuell ein Tipp gibt. Es gibt sowenige Anleitung bzw. Erklärung dazu. Laut Anleitungen Müssten die Werte im Array "anwort" stehen. Das Problem bei dem Code ist dass sich "antwort" nicht wie ein Array verhält. Python ist für mich gerad neu Land.
    Gruß

  6. #6
    HaWe
    Gast
    Zitat Zitat von sterngleiter Beitrag anzeigen
    Hallo,
    ich habe eine Schaltung aufgebaut wo der Raspberry SPI-Master und ein PIC-Controller ein Slave ist. Soweit so gut. Mein Problem liegt dadrin dass ich auf eine anfrage bei Slave mehrere Anworten heben möchte. Beispiel Master sendet 1 Byte und Slave anwortet mit 4 Bytes zurück.
    spi.writebytes(0x12)
    antwort=spi.readbaytes(0);
    print antwort[0]
    print antwort[1]
    print antwort[2]
    print antwort[3]

    ich finde ein Anwort nur im antwort[0] aber da ist nur der Letze Wert drin der von Slave gesendet wurde.
    Ich bitte um Hilfe
    hallo,
    ein paar Fragen und Anmerkungen:
    1.) die verwendete Programmiersprache gehört eigentlich immer in den Titel oder wenigstens klar erkennbar genannt im ersten Post (TOP). Bei dir also: "PYTHON".
    - welche Version aber? 2 oder 3?
    2.) Dann ist es immer hilfreich, den kompletten Code zu sehen, nicht nur ein Schnipsel.
    3.) Dann gibt es gefühlt 100 verschiedene Raspberry Pis, welchen Pi benutzt du?
    4.) Dann gibt es gefühlt 1000 verschiedene Betriebssysteme für Raspberries (z.B. Raspbian Jessie oder Raspbian Stretch oder auch v.a.m.)
    - welches benutzt du, in welcher genauen Version?
    5.) Dann unterscheiden sich oft bei SPI die Codes, je nachem welches Gerät dran hängt - was hast du dran? --- EDIT: sah gerade: ein PIC, ok! ---
    6.) Dann scheint es sich bei deinem Code um einen Tippfehler zu handeln, denn es heißt readbytes und nicht readbaytes.
    7.) spi.readbytes könnte ein befehl aus einem Python module namens "py-spidev" sein, aber jedes Modul ist anders - ist dies deines, oder welches sonst?
    8.) Die Zahl hinter readbytes ist wschl die Anzahl der zu lesenden Bytes, wie schon Klebwax richtig erwähnt hat. willst du 4 lesen, muss dort auch 4 stehen.
    Steht 0 dort, liest du auch nur 0. Siehe: https://github.com/doceme/py-spidev
    9.) Außerdem wäre noch wichtig zu wissen, wie dein SPI Port konfiguriert ist und welchen SPI Port du benutzt (der Raspi hat 2 verschiedene) - und ob er überhaupt enabled ist.


    Ich bin nun kein Python-Nutzer, aber probiere doch mal testweise diesen Code, falls meine Vermutungen soweit stimmen:

    Code:
    #!/usr/bin/env python
    import spidev
    def dmp(A):
        s = ""
        cnt = 0
        for a in A:
            s+="%0.2X " % a
            cnt=(cnt+1)%6
            if cnt == 0:
                s+="\n"
        print s
    
    spi = spidev.SpiDev()
    spi.open(0,0)
    b = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x95, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD, 0xF0, 0x0D]
    print "testing read/write bytes"
    spi.writebytes(b)
    dmp(spi.readbytes(len(b)))
    print "testing xfer"
    dmp(spi.xfer(b))
    print "testing xfer2"
    dmp(spi.xfer2(b))
    spi.close()
    wenn er läuft, ists schon mal gut, dann können wir deinen Code berichtigen - bitte posten!

    - ansonsten stimmt möglicherweise was bei deinen Pi Enstellungen nicht - dann guck mal hier in der Diskussion:
    https://github.com/doceme/py-spidev/issues/19

    PS,
    Anm.: ich nutze selber kein SPI für eigene Programme, weil ich SPI für extrem schwierig halte, schon gar nichts für Anfänger.
    Geändert von HaWe (04.12.2017 um 10:28 Uhr)

Ähnliche Themen

  1. I2C byte lesen
    Von EA6AFJ im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.08.2012, 01:11
  2. I2C Register Lesen
    Von pointhi im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 19.04.2012, 16:26
  3. I2C lesen
    Von Max12345 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.08.2010, 07:36
  4. Schaltplan lesen...?
    Von Syndromedar im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 05.12.2006, 00:55
  5. mmc mit c++ lesen
    Von Asche im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 24.01.2006, 01:23

Berechtigungen

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

LiFePO4 Speicher Test