Posts by Raspyy123

    Moin Bernd666,

    leider funktioniert das auch nicht..mir gehen auch so langsam die Ideen aus:(

    Moin Raspyy123,

    du hast also nur def print_content(ad0, ad1, cont): neu geschrieben?

    Ergebnis: es stimmt die Ausgabe nicht mehr.

    Wie hast du denn vorher die Read-Funktion aufgerufen. Kannst du das noch posten, oder ist es weg?

    73 de Bernd

    nein, auch die wirte und read content FUnktion...anbei der komplette Code:

    Ausgabe ist:

    >>> %Run ADARnew

    189 0xbd 0b10111101

    255 0xff 0b11111111

    >>>

    Moin Raspyy123,

    poste, bitte, dein Code von dieser Funktion.

    Falls ich Bezeichnungen von Python falsch nutze, liegt es daran das ich in Python nicht programmieren kann. Ich kann es nur einigermassen lesen.

    73 de Bernd

    Moin Bernd,

    Code
    def read_SPI(send_byte):
        byte_read = 0
        for i in range(0, 8):
            GPIO.output(SCLK, GPIO.HIGH)
            GPIO.output(MOSI, (send_byte << i) & 0x80)     # 1000 0000
            
            bit_read = GPIO.input(MISO)                    # bit einlesen
            GPIO.output(SCLK, GPIO.LOW)                    # fallende Flanke
            byte_read = (byte_read << 1) | bit_read        # Byte zusammenbauen

    Das ist die Funktion...

    ich hab jetzt die write_content und print_content-FUnktionen geschrieben. Leider ist die Ausgabe bei Veränderung der Adressen falsch...Siehe Ausgabe:

    >>> %Run ADARnew

    189 0xbd 0b10111101

    255 0xff 0b11111111

    Habt ihr eine Idee, wie man korrekt andere Adressen übermitteln kann?

    Code?

    Ich mag es nicht, jedes mal von Hand die dezimal Zahl in hex- oder bin-Format zu ändern.

    Ändere bitte alle einzeiligen Code-Zeile von

    Code
    print(read_SPI(0x00))

    in diesen zweizeiligen Code

    Code
    result_SPI=read_SPI(0x00)
    print(result_SPI), hex(result_SPI), bin(result_SPI))

    Vielen Dank! Sehr guter Tipp :)

    der aktuelle COde:

    Ausgabe:

    >>> %Run test.py

    test

    255 0xff 0b11111111

    255 0xff 0b11111111

    189 0xbd 0b10111101

    0 0x0 0b0

    16 0x10 0b10000

    1 0x1 0b1

    0 0x0 0b0

    20 0x14 0b10100

    0 0x0 0b0

    0 0x0 0b0

    0 0x0 0b0

    >>>

    Code
    def read_SPI(send_byte):
        byte_read = 0
        for i in range(0, 8):
            GPIO.output(SCLK, GPIO.HIGH)
            GPIO.output(MOSI, (send_byte << i) & 0x80)     # 1000 0000
            bit_read = GPIO.input(MISO)                    # bit einlesen
            GPIO.output(SCLK, GPIO.LOW)                    # fallende Flanke
            byte_read = (byte_read << 1) | bit_read        # Byte zusammenbauen
        return(byte_read) 

    soo mit folgendem Code erhalte ich jetzt die Ausgabe:

    255

    255

    189

    9

    16

    1

    0

    20

    0

    0

    0

    das ist schon mal besser, 189 entspricht ja "BD"

    Moin Raspyy123,

    mhm, das Lesen der Miso-Ltg könnte, vom Timing her, ein wenig knapp sein.

    Kannst du das mal, testweise, tauschen?

    Um meine Neugier zu befriedigen: Welchen RPi, mit welchem OS setzt du ein. Und ist der Adar1000 als Evulations Board vorhanden?

    73 de Bernd

    Moin Bernd666, ich habe die Zeilen vertauscht.. Ausgabe ist:

    >>> %Run

    test

    255

    255

    222

    128

    136

    128

    128

    138

    128

    128

    128

    Zu deiner Frage. Ich habe den Raspby 3B und das Eval Board zum ADAR1000 habe ich auch..Nur habe ich zur Zeit keinen Logic Analyzer um Tests duchzuführen

    Es könnte sein, das beim Zusammensetzen der empfangen Bytes ein Fehler ist.

    122 (dezimal) = 0x7A = 0111 1010

    Wenn ich das nun um 1 bit nach rechts schiebe un das höchste bit 1 setzte kommt

    1011 1101 = 0XBD

    Willst du den Fehler selbst suchen oder soll ich dir helfen? Er liegt auf jeden Fall beim Zusammenbauen des Byte

    ich schaue grad auf die Funktionsdefinition von "read_SPI"...kann man da standardmäßig vor der Rückgabe von Byte_read das byte nach rechts verschiebt und das erste Bit auf 1 setzt.?

    Das heißt:

    Code
    byte_read= 128+(byte_read>>1)

    Hallo Bernd666 und bombom,

    vielen Dank erst einmal für Eure Hilfe! Ich habe in der Zwischenzeit versucht Eure Tipps umzusetzen...Ich habe den Code von bombom übernommen. Dieser funktioniert soweit ganz gut...der Chip reagiert..

    Als Ausgabe erhalte ich :

    >>>%Run test.py

    test

    255

    255

    122

    0

    32

    2

    0

    40

    0

    0

    0

    meine Frage:

    Warum erhalte ich nicht die Ausgabe "BD"? Ich habe diesen Content am Anfang an die Adresse 0x000 reingeschrieben.

    Wieso kommen bei den ersten Ausgaben "255" raus?

    Moin Raspyy123,

    ich will mich nicht einmischen!

    Aber, weil ich mitlese, eine Frage: Wo steht in dem Datenblatt was nach einem Reset ausgegeben wird?? Oder warum erwartest du "21"??

    73 de Bernd

    Hallo Bernd666, ich habe nicht "21" erwartet...die Zahl 21 war die tatsächliche Ausgabe...Ich habe die "BD" erwartet, also den Content der Adresse..

    sorry, das ist richtig :)

    der Code:

    Vielen dank...komischerweise ändert sich nichts, wenn ich etwas am Code veränder...Die Ausgabe bleibt stets "1"....anbei das Bild vom Logic Analyzer...das passt ja mit dem Data Sheet soweit überein...

    Dann werde ich mich weiterhin auf Fehlersuche begeben...trotzdem Danke!

    Hallo,


    wenn der Baustein SPI hat, dann nimm doch ein Modul wie spidev für die Kommunikation statt das low-Level selber zu coden.


    Gruß, noisefloor

    Hallo, ich habe bereits so viel Arbeit reingesteckt und möchte verstehen, wo der Fehler nun liegt....ich denke, dass es ein kleiner Denkfehler sein muss, da ich das Timing mit dem Logic Analyzer ja überprüft habe..

    ich habe das korrigiert...und bekomme jetzt aus Ausgabe "1" :/

    Es muss wohl ein andere Fehler vorhanden sein....

    Hallo bombom,

    vielen Dank für deine Rückmeldung. Ich habe mal den Code erweitert und habe versucht den Inhalt der Adresse auszugeben (siehe die letzten Zeilen):

    Leider ist meine Ausgabe immer nur die Zahl "21" :/

    ich hatte "BD" erwartet, also den Content der Adresse...Weißt du vielleicht, wo der Bug liegen könnte?

    dankee, ich verstehe was du meinst...

    müsste das dann nicht in etwa so aussehen, nach dem ich die Transfer Funktion verwendet habe? Dann würde ich sehen, welcher Wert in MISO vorhanden ist

    In welchen Kommentaren? Meinst du den ADAR1000 aus deinem anderen Thread? Ich habe mir das Datenblatt angeschaut, absoluter Hardcore. Nichts für Amateure.

    Hast du dir die Grundlagen zum SPI durchgelesen? Weisst du wie die Kommunikatio, senden und empfangen, funktioniert? Wann welcher Teilnehmer was bekommt?

    ja, das habe ich. Ich habe meinen Code bereits überprüft. Ich habe GPIOs des Raspberrys an den Logic Analyzer angeschlossen und habe mit dem Code das Timing Diagramm vom ADAR1000 realisieren können. Sobald ich jedoch den Raspberry Pi über die SPI Schnittstelle an den ADAR1000 anschließe und das Programm laufen lasse, reagiert der ADAR nicht. Aus diesem Grund wollte ich die Read Funktion einbauen, um zu prüfen, was bei dem ADAR ankommt....