ESP32 SPI-Output auf andere GPIO umschalten

  • 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.


    https://electronics.stackexcha…i-pins-in-an-esp32-module


    Vielen Dank für eure Mithilfe!

    Wenn's brennt 112 hilft weiter!

  • Go to Best Answer
  • raspbastler

    Changed the title of the thread from “ESP32 SPI-Channels auf andere GPIO umschalten” to “ESP32 SPI-Output auf andere GPIO umschalten”.
  • 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

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Welche Sprache willst du denn verwenden?

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

    Ich würde es gerne direkt in C machen, das ist wesentlich schneller.. und ich kann auch kein Python ;)

    Wenn's brennt 112 hilft weiter!

  • 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.

    • Best Answer

    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.

  • Danke, schau ich mir an!



    EDIT1: Genau, dass was ich gesucht habe!

    Wenn's brennt 112 hilft weiter!

    Edited once, last by raspbastler ().

  • 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.

    Edited once, last by Bernd666: 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

    https://www.conrad.de/de/ratge…nik-bauteile/74hc595.html

    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)

    Edited once, last by jar ().

  • 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!