zwei SPI Module getrennt von einander betreiben

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

    ich möcht vorerst einen Versuch machen und zwei Module, die über SPI Daten liefern und gesteuert werden betreiben. Ich benutze dafür die SpiDev Bibliothek und wollte fragen, ob es reicht, wenn ich für das jeweilige Modul einen CS GPIO verwende?
    Aber wie verhält es sich mit MOSI am Pi? Ich hätte gemeint MOSI (Pi) - Modul 1 (DIN) - Modul 1 (DOUT) - Modul 2 (DIN), stimmt das so (Wobei Modul1 an CS0 und Modul2 an CS1 ist)? Nur wie steuere ich diese dann an?

    Danke

    Einmal editiert, zuletzt von mlt (5. September 2014 um 15:47)

  • das ist mir schon bewusst, mein Problem ist aber, dass ich die beiden Module nicht getrennt voneinander ansteuern kann:
    Modul 1: nimmt Eingaben entgegen und liefert Ausgaben zurück (benötigt MOSI und MISO), hat CS0
    Modul 2: gibt nichts zurück, bekommt nur Eingaben (braucht nur MOSI), hat CS1

    ich öffne beide aus verschiedenen Skripten jeweils mit spi.open(0,0) bzw (0,1).
    Dennoch agiert das hintere Modul falsch, das zuerst betriebene funktioniert wunderbar. Ich bin mir nicht sicher, ob ich die Verkabelung evtl falsch habe:
    MOSI (pi) -> DIN Modul 1, DOUT Modul 1 -> sowohl an Pi als auch an DIN Modul 2
    Damit ist die Ausgabe von Modul 1 richtig, aber das andere tut nichts. Umgekehrt, wenn ich die Positionen tausche stimmt die Ausgabe nicht.


  • SPI braucht immer MOSI und MISO! Du kannst nicht einfach eine Leitung am Bus weglassen, es Sei denn der Slave unterstützt das, wie z.B. der LM74.

    sagt wer ?

    MOSI das OS steht für out seriell
    MISO das IS steht für in seriell

    einige hier steuern damit LED Stripes oder LCD und nur mit out seriell

    wieso soll es immer mit nur MISO genutzt werden können ?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (6. September 2014 um 00:01)

  • Ich schrieb, dass es dann vom Slave unterstützt werden muss, und konnte hier im Thread nicht finden welcher Schaltkreis benutzt wird. Es kann durchaus sein, dass sowas in der Schaltung berücksichtigt werden muss, z.B mit einem Pull oder ner Brücke. Dazu gibt es ja dann die Datenblätter. Falls ich hier überlesen habe, um welchen Schaltkreis es sich handelt sagt es mir bitte!

  • Ja, bei dem einen Modul handelt es sich um eine LED Leiste, die MISO nicht benötigt. Am Eingang sind nur VCC, GND, DIN, CS und CLK. Am anderen Ende DOUT statt DIN, falls ein weiteres LED Modul angeschlossen wurde, wobei DOUT des vorletzten an DIN des letzten kommt.
    Dennoch, das andere Modul, welches ich benutze, braucht MISO und ich weiß nicht wirklich, wie ich die beiden gleichzeitig nebeneinander laufen lassen kann.

  • mit eigenen CS UND/ODER CE0 und CE1 vom PI oder mit Multiplexer die MISO, MOSI, SCK, CE0 auf beliebig viele Ports verteilt

    z.B. 2 Stück CD74HCT4052 TI
    http://www.ti.com.cn/cn/lit/ds/symlink/cd74hct4051.pdf

    ein 74HCT4052 schaltet MISO und MOSI auf einen von 4 Ausgängen
    ein weiterer 74HCT4052 schaltet SCK und CE0 auf einen von 4 Ausgängen

    Die Auswahl beider 74HCT4052 S0 S1 und E macht der PI per GPIO, es sollten pullup für E und pulldown Widerstände für S0/1 beschaltet werden um unsichere Pegel vor der Selektierung zu meiden.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (6. September 2014 um 12:39)


  • Wieso hat das Pi denn dann CE0 und CE1? Ich dachte damit kann ich zwei Geräte unabhängig voneinander und ohne 74HCT4052 betreiben?

    sollte man eigentlich, evtl. klemmts an der Software oder Treiber.....

    Ich durchschaue das mit dem SPI auch noch nicht vollständig, evtl. weiss meigrafd mehr weil er ja dutzende von Funkmodule mit SPI anspricht.

    Ich hatte nur einmal am Atmel mit einem LCD an SPI Kontakt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Servus,


    Wieso hat das Pi denn dann CE0 und CE1? Ich dachte damit kann ich zwei Geräte unabhängig voneinander und ohne 74HCT4052 betreiben?


    das geht auch ... ich hab' an einem meiner RPi ein 2.8" Touch Display das über SPI gefüttert wird. Der Touchcontroller ist dabei über den zweiten SPI Kanal verbunden.
    Im Grunde sind MOSI, MISO, SCK mit beiden Einheiten verbunden und CE0 geht auf das Display und CE1 auf den Touchcontroller.
    Das klappt auch mit einen Display mit SD-Card Slot. Da wird die SD-Karte mit CE1 angesprochen.
    Hast Du mal eine Skizze Deiner Verdrahtung ... vielleicht ist da ja was verkehrt, vergessen, verdreht ...
    Ist einfacher mit einem Bild als durch textuelle Beschreibung.

    cheers,
    -ds-

  • ich kann mal versuchen eine Zeichnung zu machen, im Grunde habe ich aber folgende Anschlüsse:

    Modul 1 (LED):
    VCC, GND, DIN, CLK, CS
    (am anderen Ende ist für ein weiteres Modul ebenfalls VCC, GND, CLK, CS, DOUT [das kommt ggf. an DIN des nächsten LED Modul] )
    Modul 2:
    VCC, GND, DIN, DOUT, CLK, CS

    ich hatte versucht jeweils ein CS GPIO des Raspberrys an ein Modul zu legen und mit spi.open(0, x) zu initialisieren.
    Außerdem hatte ich:
    MOSI an DIN von Modul 2
    DOUT von Modul 2 an DIN von Modul 1
    DOUT von Modul 1 an MISO Raspberry
    CLK Raspberry gleichzeitig an CLK Modul2 sowie CLK Modul1

    Ich habe auch versucht die Module zu tauschen, aber egal was ich mache, das hintere Modul (hier Modul 1) funktioniert nicht richtig, während das zu erst geschaltete tadellos arbeitet.


  • ...DOUT von Modul 1 an MISO Raspberry

    ich sehe 2 Probleme

    1. während du ins erst Modul sendest wird es hinten ausgegeben weiter gereicht an andere Module, da kannst du in dem Moment nix lesen !

    2. Die Module arbeiten vermutlich mit 5V und geben auch 5V wieder raus was der PI nicht mag und den sogar grillen kann (mit 3,3V vom PI senden klappt aber oft).

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • 2. Die Module arbeiten vermutlich mit 5V und geben auch 5V wieder raus was der PI nicht mag und den sogar grillen kann (mit 3,3V vom PI senden klappt aber oft).

    also ich habe beide Module einzeln mit 3.3V getestet und es klappt, daher benutze ich auch bei beiden zusammen 3.3V

    Mir ist da gerade ein Gedanke gekommen:
    Angenommen ich schließe beide DIN an MOSI gleichzeitig an und DOUT von Modul2 direkt an MISO. Dann würde das Modul doch nur bei jeweiligem CS reagieren?

  • probiere es aus

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hi,


    ...
    Angenommen ich schließe beide DIN an MOSI gleichzeitig an und DOUT von Modul2 direkt an MISO. Dann würde das Modul doch nur bei jeweiligem CS reagieren?

    genau so ist das ... das ist bei meinen Displays auch nicht anders. Dazu ist das Select-Signal ja da.
    cheers,
    -ds-

  • so klappt es :)
    ich habe allerdings festegestellt, dass wenn ich dauerhaft Modul 2 benutze es anscheinend teilweise zu einer fehlerhaften Übertragung bei Modul 1 (LED) kommt.
    Ich nehme mal an, dass das passiert,in dem Moment wo beide CS gesetzt sind und beide senden wollen. Ich werde mal weiter schauen, ob ich mit meiner Vermutung richtig liege.

Jetzt mitmachen!

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