ESP32 SPI-Output auf andere GPIO umschalten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    nur ganz kurz die Frage, ob jemand damit schon Mal gearbeitet hat? Wie bekomme ich es hin, dass ich beliebige GPIOs vom ESP32 als SPI Output definieren kann? Ich habe einen Link gefunden, der nur beschreibt, dass die möglich sei und mit einer Reduzierung der Geschwindigkeit einhergeht. Dies wäre für mich kein Problem, ich möchte nur wissen wie man sowas anstellt.

    How to define the SPI pins in an ESP32 module?
    I am working on a project where I am integrating BME688 ,CAN, LoRa, SD card, ePaper display and WiFi module. I am using the board Heltec LoRa V2. And I have…
    electronics.stackexchange.com

    Vielen Dank für eure Mithilfe!

    Wenn's brennt 112 hilft weiter!

  • Zur hilfreichsten Antwort springen
  • Welche Sprache willst du denn verwenden?

    Mit MicroPython habe ich meine Pins zum Beispiel so definiert:

    Python
    from machine import SPI
    
    spi = SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(23), mosi=Pin(2), miso=Pin(12))

    Siehe dazu :

    class SPI – a Serial Peripheral Interface bus protocol (controller side) — MicroPython 1.17 documentation

    Das ist schon etwas her, wenn ich es aber richtig im Kopf habe, dann kannst du mit dem ersten Argument den SPI-Block wählen, denn du benutzen willst. Also wenn ich dich richtig verstanden habe, solltest du das damit lösen können.

    Habe mich leider auch nur einmal kurz damit beschäftigt und kann dir deswegen keine genaueren Details geben.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hast du damit schon mal gearbeitet? Wenn ja, hast du einen Beispielcode anhand man die Vorgehensweise verstehen kann.. ?

    Nein, aber mit Micropython arbeite ich ziemlich oft :)

    Ich könnte jetzt versuchen nachzuvollziehen was du brauchst, aber ich arbeite nicht mit C.

  • Nein, aber mit Micropython arbeite ich ziemlich oft :)

    Ich könnte jetzt versuchen nachzuvollziehen was du brauchst, aber ich arbeite nicht mit C.

    Eigentlich ganz simpel:

    7 SPI LED-Segmente sollen ohne Multiplexer per SPI nacheinander angesprochen werden. Nicht simultan, sondern wirklich nur nacheinander.

    Daher hab ich mir überlegt, dass ich einfach 7x HMOSI habe und einfach die Pins umlege. Mir ist bewusst, dass dies mit einem Performanceverlust einhergeht, damit kann ich aber leben.

    Wenn's brennt 112 hilft weiter!

  • Moin raspbastler,

    nur eine Frage.

    Du willst in C mit der Espressif-SDK arbeiten oder mit der Arduino Ide?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    • Hilfreichste Antwort

    Moin raspbastler,

    wenn du dir mit Werkzeuge ein ESP32-Modul einstellst und dann unter Beispiele schaust. Dann gibt es dort ein Beispiel mit dem Namen

    SPI_Multiple_buses.

    Ev. hilft das ja ein wenig.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin raspbastler,

    wenn du dir mit Werkzeuge ein ESP32-Modul einstellst und dann unter Beispiele schaust. Dann gibt es dort ein Beispiel mit dem Namen

    SPI_Multiple_buses.

    Ev. hilft das ja ein wenig.

    73 de Bernd

    Danke, schau ich mir an!


    EDIT1: Genau, dass was ich gesucht habe!

    Wenn's brennt 112 hilft weiter!

    Einmal editiert, zuletzt von raspbastler (9. September 2021 um 11:43)

  • Moin raspbastler,

    du hast aber im Hinterkopf, das man nicht alle GPIO-Pins nutzen kann?

    Siehe https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

    Ein SPI-Bus mit 7 ChipSelect gehen nicht?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin raspbastler,

    du hast aber im Hinterkopf, das man nicht alle GPIO-Pins nutzen kann?

    Siehe https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

    Ein SPI-Bus mit 7 ChipSelect gehen nicht?

    73 de Bernd

    Ja schon, ich brauche aber gar keine 7clk Leitungen CLOCK ist immer gleich. Ich brauche eigentlich nur 8 Pins. 1x Clock 7x Data.. Das muss doch machbar sein.

    Wenn's brennt 112 hilft weiter!

  • Moin raspbastler,

    da hast du mich verstanden miss....

    SPI besteht aus folgenden Leitungen. Klammerbezeichnungen entsprechen der neuen Schreibweisen.

    - MoSi (DataOut) == Chef spricht

    - MiSo(DataIn) == Chef hört

    - CLK == Takt

    - CS == ChipSelect

    Die ersten Drei kann man parallel schalten. Nur CS wird nur einmal zu jedem Gerät geführt.

    Hast du 3 SPI-Module, dann halt CS1, CS2, CS3

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    Einmal editiert, zuletzt von Bernd666 (9. September 2021 um 12:43) aus folgendem Grund: ein Komma war wech

  • Die ersten Drei kann man parallel schalten. Nur CS wird nur einmal zu jedem Gerät geführt.

    Hast du 3 SPI-Module dann halt CS1, CS2, CS3

    so kenne ich das auch und da der ESP 2 SPI hat HSPI VSPI muss man den dritten wohl als soft SPI erzeugen!

    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)

  • einen Channel

    auf 7 Pins

    mir ist immer noch unklar was du möchtest!

    1 channel SPI wäre seriell!

    7 Pins sind parallel!

    vielleicht bin ich zu dumm dich zu verstehen, der Sender ist ja nie Schuld wenn der Empfänger nichts versteht. :blush:

    natürlich kannst du einen Channel auf 7 Pins verteilen, aber alle bekommen dann immer dasselbe und das nutzt ja nichts.

    Was geht ist ein Seriell/Parallel Wandler mit latch -> ein Byte seriell rein 8 Bit parallel raus

    https://www.onsemi.com/pdf/datasheet/mc74hc595a-d.pdf

    74HC595 Schieberegister » Aufbau & Funktionsweise erklärt
    Alle Infos zum Schieberegister 74HC595 ✓ Funktion & Anschluss Video ✓ Praxis-Überblick: wie sieht der Schaltungsaufbau aus ✓
    www.conrad.de

    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 (9. September 2021 um 14:31)

  • So jetzt nochmal:

    Daten der LEDs sollen in sieben Segmenten aufgeteilt werden. Diese sollen NACHEINANDER mit Daten beschrieben werden. Ergo:

    1. Segment Daten senden auf Pin 1

    2. Segment Daten senden auf Pin 2

    ...

    Wenn das 1. Segment die Daten bekommen hat wird das 2. Segment mit anderen Daten beschrieben. Ich muss bloß wissen wie ich das Mapping hinbekomme.

    Wenn's brennt 112 hilft weiter!

Jetzt mitmachen!

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