SPI Pi3 und Arduino Nano funktioniert nicht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hi,
    Ich bin gerade dabei einen Arduino Nano und meinen Pi3 zum kommunizieren zu bewegen. Hierbei ist der Pi der Master und der Arduino der Slave. Die Pins habe ich eigtl alle zu verbunden, wie sie sein müssen. Beim Arduino kommt nichts an, wenn ich es am Pi raussende. Umgekehrt dann natürlich auch nicht. Ich habe sowohl am Pi als auch beim Arduino einen Loopback probiert und siehe da das funktioniert bei beiden. Da ich beim Pi jediglich das Kabel umgesteckt habe und alles funktioniert denke ich liegt es wohl am Arduino, da ich hier anderen Code verwenden musste.

    Ich hoffe jmd. findet vlt meinen Fehler. Es kann auch sein, dass ich was beim SlaveSelect beachten muss. Am Pi nutze ich die Pi4J Library, da ich es erstmal über Java probieren wollte. Der Loopback funktioniert dort wie gesagt ohne Probleme, aber nicht wenn ich an den Arduino sende. Ist es zwangsweise nötig den Pi und den Arduino zsm. an den Ground zu hängen, wenn diese unterschiedliche Spannungsquellen haben?

    Hier mal der Code vom Arduino:

    Normalversuch, also Pi an Arduino:

    Loopback am Arduino (funktioniert):

    Einmal editiert, zuletzt von Dudeplayz (9. Dezember 2016 um 14:36)

  • Servus Dudeplayz,


    ... Ist es zwangsweise nötig den Pi und den Arduino zsm. an den Ground zu hängen, wenn diese unterschiedliche Spannungsquellen haben?

    natürlich, sonst haben die beiden ja nicht dasselbe Bezugs-Potential.
    Aber unbedingt den Hinweis von ChrisvA beachten! Der Raspi ist nicht 5V tolerant!

    cu,
    -ds-


  • Servus Dudeplayz,

    natürlich, sonst haben die beiden ja nicht dasselbe Bezugs-Potential.
    Aber unbedingt den Hinweis von ChrisvA beachten! Der Raspi ist nicht 5V tolerant!

    cu,
    -ds-


    Ja das ist mir bereits bekannt. Da ich aber prinzipiell nur vom Pi zum Arsuino möchte und die 3,3V ja in Logicbereich des Arduino liegen, müsste das doch gehen.
    Ich habe vorhin versuchsweise einmal den MISO Stecker raus genommen und für Grounf verwendet. Allerdings brachte das auch keine Erfolge.

  • Hi,
    naja ... also so rein vom Bauchgefühl würde ich trotzdem einen Levelshifter verwenden. Wie schnell ist mal ein Kabel vertauscht ...
    Aber ok ... Du liebst scheinbar das Risiko ;)

    btw: stimmt hier nur die Bezeichnung nicht oder schickst Du doch was vom Arduino zum Raspi

    Code
    ...
       pinMode(MISO, OUTPUT);
    ...

    Das mit dem MISO habe ich jetzt nicht verstanden :s was wolltest Du damit bezwecken?
    GND des Nano und GND des Raspi müssen verbunden sein ...
    Wer bedient denn die CS Leitung?

    cheers,
    -ds-

  • Hallo Dudeplayz,


    Die Pins habe ich eigtl alle zu verbunden, wie sie sein müssen.


    Das bedeutet was?

    Nach Deiner Frage wegen gemeinsamer Masse kommen Zweifel auf... dass die Strippen so gelegt sind, dass eine passende Software zweifelsfrei mit der Schaltung zusammen etwas Sinnvolles machen kann.

    Kannst Du mal die Schaltung posten? Ein tolles Tool dafür ist Fritzing, das sich so installieren lässt:

    Code
    sudo apt-get install fritzing

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (9. Dezember 2016 um 21:43)

  • Es sollte *so verbunden* heißen ^^ und das mit tauschen von MISO an GND war deswegen, weil ich nur 4 Kabel hatte, deswegen konnte ich nicht den GND mit abdecken.

    Das mit dem PinMode steht nur mit drin. Ich schicke aber keinerlei Daten zum Pi. Und ja ein Levelshifter werde ich mir lieber doch zulegen. Habe es heute schon geschafft kurzweilig das falsche Kabel genommen zu haben. Der Schock war auch dementsprechend groß, aber es scheint noch alles i.O. zu sein. Gibt es Shifter die zu empfehlen sind?

    Die Schaltung kann ich gerade nicht Posten, da ich gerade keinen Linux Rechner in der Nähe habe. Gibt es ähnliche Programme für Windows ?

    Ich komme erst Sonntag dazu Lösungsansätze auszuprobieren.


  • Hm ... Fritzing gibt's auch für Windows sogar 32 und 64 Bit ... und auch für den MAC ...
    -> click <- ...

    cu,
    -ds-

    Ja habe ich auch eben gefunden. Allerdings stürzt es direkt beim Starten ab. Typisch Windoof eben. Ich probiere nochmal die 32Bit Version vlt geht diese.

    Und wegen der Bedienung des CS Pin. Den bedient der Pi, da der Arduino ja der Slave ist.

  • Hallo Dudeplayz,


    Es sollte *so verbunden* heißen ^^ und das mit tauschen von MISO an GND war deswegen, weil ich nur 4 Kabel hatte, deswegen konnte ich nicht den GND mit abdecken.

    Unser User Jar hatte letztens einen passenden Vergleich. So sinngemäß: Wenn Du die Größe mehrerer Personen miteinander vergleichen möchtest, dann müssen diese sich auf dem gleichen Niveau (ebener Boden) befinden. Wenn der eine auf dem Stuhl steht, der andere auf einem Stuhl sitzt, der Dritte auf dem Boden kniet und der letzte schließlich vom Schrank springt, dann hast Du leicht Größenunterschiede von 3,5 m.

    Da sagt Dir der gesunde Menschenverstand, dass das nicht plausibel sein kann. Und mit der Spannung ist das dann genauso. Unser mittlerweile alter Physiklehrer hat bei Spannung ehrfurchtsvoll immer von Potentialdifferenz gesprochen. Das bedeutet, dass Du Spannungen nur dann miteinander vergleichen kannst, wenn sich diese auf eine gemeinsame Basis beziehen. Dies kann 7,38 V sein oder auch mal 2,78 V. Aber was meinst Du, wie praktisch das werden kann, wenn die gemeinsame Basis 0 V wird? Dann sparst Du Dir jegliche Umrechnungen. Und sowas bietet Dir, wenn Du alle GND aller Komponenten, die miteinander kommunizieren wollen, miteinander verbindest.

    Ein Sparen an der gemeinsamen GND-Leitung ist Sparen am falschen Ende. Wenn ich Schaltungen aufbaue, dann verbinde ich als erstes immer die GND-Leitungen...



    Gibt es Shifter die zu empfehlen sind?


    Bestimmt! Dreamshader hat da bestimmt was! Oder? Plauder mal aus ;)

    Ich bin da etwas hausbacken. Ich bastel mir so einen Levelshifter schnell selber (2 Widerstände als Spannungsteiler für 5V => 3,3 V und 2 Transistoren und 3 Widerstände für 3,3 V => 5V.

    Such mal nach entsprechenden Schaltungen. Das Nachbauen und insbesondere das Nachrechnen und Nachmessen macht mehr AHA! als einen fertigen Levelshifter unmotiviert einzusetzen.



    Die Schaltung kann ich gerade nicht Posten, da ich gerade keinen Linux Rechner in der Nähe habe. Gibt es ähnliche Programme für Windows ?


    Fritzing gibt's bestimmt auch für Windows.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (9. Dezember 2016 um 23:23)

  • Schaltung


    Ihr müsst euch leider die Schaltung einmal unter dem Link ansehen. Ich konnte es hier nicht einfügen. Wenn ich aus Fritzing heraus ein Bild der Schaltung speichern wollte ist es abgestürzt. Das liegt aber an Windows und ich weiß nicht wieso. Naja anderes Thema.


    Das mit dem GND habe ich mir schon so gedacht bzw. war mir das so bewusst. Allerdings fällt mir Trottel gerade meine Fehlinterpretation auf ^^

  • Servus Andreas,


    ...
    Bestimmt! Dreamshader hat da bestimmt was! Oder? Plauder mal aus ;)
    ...

    also bei den Dingern kann man imho eigentlich nix falsch machen ...
    -> 2-Kanal für I2C/UART <-, -> 4-Kanal für SPI <- oder -> 8-Kanal für ??? <- ...

    Wenn ich beim Herumstöbern mal wieder über ein Angebot mit z.B. 5 Stück für 1,- Euro stolpere, dann nehm' ich die schon mit. Allerdings reichts jetzt langsam ... hier müssten so um 20 Stück rumliegen ;)

    Klar ... Selberbasteln ist halt interessanter ...

    //EDIT: Also Deine Verkabelung scheint ok zu sein.
    Hast Du mal überprüft, ob evtl. defekte Kabel dabei sind?
    Zum Thema CS: wer setzt bzw. wo wird das Signal gesetzt? Ist nur so eine Idee ...


    cu,
    -ds-

  • Ok danke. Gibt es auch einen deutschen Händler, wo man nicht ewig warten muss bis die Bestellung eintrifft?

    Und Kabel habe ich noch nicht getestet das könnte natürlich sein.


    CS wird ja vom Master gesetzt. Da ich eine fertige Bib. nutze, müsste die das ja machen bzw. würde mich das sehr wundern wenn es nicht so wäre.

  • Klar gibts auch deutsche Händler ... such' in der Bucht einfach mal nach "arduino levelshifter" ... kosten halt das Doppelte ... aber was soll's. Du kannst ja einen besorgen und Dir ein paar auf Reserve in Asien bestellen.

    Rein theoretisch ( auf die harte Art ) könntest Du auch 1V7 mit einer Zenerdiode nach GND ableiten ;)
    Ja eben ... Du nutzt eine Bibliothek. Aber woher soll die wissen, welchen Chip Du ansprichst bzw. welcher Ausgang jetzt als CS gesetzt werden muss? Automatisch geht nicht ...

    cu,
    -ds-


  • Klar gibts auch deutsche Händler ... such' in der Bucht einfach mal nach "arduino levelshifter" ... kosten halt das Doppelte ... aber was soll's. Du kannst ja einen besorgen und Dir ein paar auf Reserve in Asien bestellen.

    Rein theoretisch ( auf die harte Art ) könntest Du auch 1V7 mit einer Zenerdiode nach GND ableiten ;)
    Ja eben ... Du nutzt eine Bibliothek. Aber woher soll die wissen, welchen Chip Du ansprichst bzw. welcher Ausgang jetzt als CS gesetzt werden muss? Automatisch geht nicht ...

    cu,
    -ds-

    Ich nutze wie gesagt die Pi4J Lib für Java. Und über diese erzeugt man sich entsprechende Objekte für die einzelnen Geräte und gibt bei deren erzeugen auch deren Channel an. Und deshalb gehe ich eigtl fest davon aus, dass die Lib da sie für einen erledigt.

  • Ich kenn' die Pi4J Library nicht.
    In C wird das über die Gerätedatei gesteuert. Öffnet man /dev/spidev0.0 dann wird beim Schreiben automatisch CS0 aktiviert, öffnet man /dev/spidev0.1 dann eben CS1.
    Mehr geht allerdings nicht weil der Raspi nicht mehr unterstützt.

    Na dann gehen wir halt mal davon aus, dass das mit Deiner Pi4J-Lib auch funktioniert (notfalls evtl.mal messen).

    cu,
    -ds-


  • Ich kenn' die Pi4J Library nicht.
    In C wird das über die Gerätedatei gesteuert. Öffnet man /dev/spidev0.0 dann wird beim Schreiben automatisch CS0 aktiviert, öffnet man /dev/spidev0.1 dann eben CS1.
    Mehr geht allerdings nicht weil der Raspi nicht mehr unterstützt.

    Na dann gehen wir halt mal davon aus, dass das mit Deiner Pi4J-Lib auch funktioniert (notfalls evtl.mal messen).

    cu,
    -ds-

    Also ich habe jetzt mal mit dem Arduino die Leitungen des Pi abgetastet. Und habe festgestellt, dass die Clock nur knapp 2V ausgibt. Und kann es da sein, dass dies nicht ausreicht um den Arduino auszulösen? Bzw. wird der CS0 Pin am Pi auch nicht verändert, was mich etwas irretiert, aber da der Slave ja über LOW aktiviert wird, dürfte das ja nicht der Grund sein oder ?

  • Ich habe das Problem endlich gefunden. Es ist genauso banal wie bescheuert. Da ich mich nach den ganzen Tutorials gerichtet habe, habe ich den Fehler gemacht und den pinMode nicht für die genutzten Pins festgelegt. Ich habe das jetzt einfach mal probiert jeden Pin festzulegen, also MOSI, MISO, SCK und SS. Je wie gnutzt eben nach Input/Output und nun funktioniert es wie gewünscht.

    Einmal editiert, zuletzt von Dudeplayz (22. Dezember 2016 um 17:57)

Jetzt mitmachen!

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