Hallo,
wie schon im Betreff erwähnt verwende ich einen ESP32 (DevKitC). Ich
will per SPI Daten übertragen nur leider funktioniert es mit der
SPI-Bibliothek nicht. Grund: unbekannt.
Noch nicht einmal das mitgelieferte SPI-Beispiel funktioniert. Das Board
habe ich schon getauscht, das Netz durchwühlt aber keine der Lösungen
funktioniert. Lediglich das BitBangedSPI im ArduinoISP-Beispiel
funktioniert aber das ist "händisches SPI" und damit kann ich nur Daten
rausschicken aber keine empfangen (was ich aber zwingend muss).
In der Arduino IDE hatte ich bisher das "DOIT ESP32 DEVKIT V1"
ausgewählt kann es sein das ich ein anderes auswählen muss? Auf dem
Board steht "ESP32-WROOM-32". Daher fällt für mich das "ESP32 DevModule"
und das "ESP32 Wrover Module " weg / kommt eigentlich nicht in Frage.
Habt ihr evtl noch Lösungsvorschläge?
Gruß Marius
Welches Board du auswählst ist "eigentlich" egal.
Für jedes Board ist eine "pins_arduino.h" hinterlegt. In der steht z.B.
welche Pins für SPI genutzt werden.
fürs DOIT ESP32 DEVKIT V1 sind das:
static const uint8_t SS = 5;
static const uint8_t MOSI = 23;
static const uint8_t MISO = 19;
static const uint8_t SCK = 18;
welche Pins du tatsächlich verwendest, musst du wissen.
Dann solltest du mal deinen Code posten.
Eventuell auch sagen was du mit der SPI machen willst?
Eventuell auch wie du was verbunden hast?
Hast du ein Oszi zur verfügung?
Ohne diese Angaben ist es Rätsel raten.
Hallo,
mit welchem Sketch hast Du getestet? SPI am ESP32 macht eigenlich kein
mir bekannten Probleme. Sonst würden auch meine SPI-Displays mit
SPI-Touchcontroller und auch die SD-Karte nicht gehen.
Die Standard-Pins wurden oben schon genannt, Board ist völlig egal,
"ESP32 Dev Module" kann man für alle nutzen solange man die GPIO-Nummern
des ESP32 benutzt. Die boardspezifischen Einstellungen werden erst
interessant, wenn man mit den bei einigen aufgedrucken Dx Bezeichungen
arbeiten will oder fest verdrahtete Zusatzhardware (OLED usw.) direkt
auf dem Board sind und man mit deren speziellen Beispielen arbeiten
will.
Alles bezogen auf die IDE 1.8.8 und ESP32 Boardmanagerversion 1.0.1.
Was hast Du denn wie oder womit testen wollen?
Gruß aus Berlin
Michael
Evtl. die Pinzuordnung, der Aufdruck auf den ESP, NodeMCU und Co Boards
ist teilweise verwirrend wenn es mir seltsam vorkommt teste ich
mittlerweile mit einer Led und einem blink Sketch ob es der richtige
ist.
> Eventuell auch sagen was du mit der SPI machen willst?
Mit den gesendeten Daten einen AtTiny programmieren
Beitrag "ESP32 als ISP"> Eventuell auch wie du was verbunden hast?
PIN ESP32 <-> PIN AtTiny45
22 -> 5 RESET
18 -> 2 CLK
23 -> 0 MOSI
19 -> 1 MISO
> Hast du ein Oszi zur verfügung?
JA.
Mike R. schrieb:> Sieht meiner für die SPI Schnittstelle deutlich anders aus>
1
>SPI.begin(SPI_CLK,SPI_MISO,SPI_MOSI);
2
>
>> Wie soll die SPI Hardware denn etwas über die Pins ausgeben, wenn du sie> gleich wieder als normale Outputs definierst?
Danke. Mit der Änderung macht er wieder den Herzschlag. Aber trotzdem
keine Änderung der Signale auf der Clock-/MOSI-/MISO-Leitung.
Hallo,
SPI.begin(); setzt die Pins auf die oben schon erwähnten Pins und nutzt
Hardware SPI. Die Pins muß man nur angeben, wenn man andere nutzt.
Die Pins da selber und dann auch falsch anzufassen ist nicht sinnvoll.
Interessant wäre wohl dann auch, was da auf dem Tiny45 läuft. Ich kenne
es eigentlich so (aber nicht auf einem Tiny), daß mit SS/CS dem Slave
mitgeteilt wird, daß der Master was von ihm will.
Gruß aus Berlin
Michael
>Interessant wäre wohl dann auch, was da auf dem Tiny45 läuft.
Das will er doch erst reinflashen.
> SPI.transfer(0b10010101010101010110111111110000011110000);
Das sind 41Bits wenn ich mich nicht verzählt habe.
Sicher dass es eine SPI.transfer() gibt die dann vermutlich
64Bits überträgt?
Hallo,
holger schrieb:> Das sind 41Bits wenn ich mich nicht verzählt habe.> Sicher dass es eine SPI.transfer() gibt die dann vermutlich> 64Bits überträgt?
Nein, gibt es nicht. Aus SPI.h vom ESP32:
holger schrieb:> SPI.transfer(0b10010101010101010110111111110000011110000);>> Das sind 41Bits wenn ich mich nicht verzählt habe.> Sicher dass es eine SPI.transfer() gibt die dann vermutlich> 64Bits überträgt?
Ich muss sagen da habe ich mir keine Gedanken drüber gemacht und einfach
nur auf der Tastatur rumgetippt ohne zu zählen.
Dann mach dir jetzt mal Gedanken und erstelle einen Sketch der alle
1000ms 8bit per SPI versendet.
Wenn du den fertig hast kannst du ihn hier Posten bzw. Gleichzeitig mit
deinem Oszilloskop messen ob er denn funktioniert.
Oder dann sehen wir wie man dir helfen kann.
Mike R. schrieb:> Dann mach dir jetzt mal Gedanken und erstelle einen Sketch der alle> 1000ms 8bit per SPI versendet.
1
#include<SPI.h>
2
#include"Arduino.h"
3
4
#define PIN_SCK 18
5
#define PIN_MOSI 23
6
#define PIN_MISO 19
7
#define RESET 22
8
9
voidsetup(){
10
// put your setup code here, to run once:
11
12
pinMode(PIN_SCK,OUTPUT);
13
pinMode(PIN_MOSI,OUTPUT);
14
pinMode(PIN_MISO,INPUT);
15
pinMode(RESET,OUTPUT);
16
17
SPI.begin(PIN_SCK,PIN_MISO,PIN_MOSI);
18
//SPI.begin();
19
}
20
21
voidloop(){
22
// put your main code here, to run repeatedly:
23
24
digitalWrite(22,HIGH);
25
delay(1000);
26
digitalWrite(22,LOW);
27
digitalWrite(5,LOW);
28
SPI.beginTransaction(SPISettings(1000000,MSBFIRST,SPI_MODE0));//SPI-BUS einrichten: max 1 MHz, MSB zuerst, MODUS 0
29
SPI.transfer(0x0F);
30
SPI.endTransaction();
31
digitalWrite(5,HIGH);
32
delay(1000);
33
34
}
> Wenn du den fertig hast kannst du ihn hier Posten bzw. Gleichzeitig mit> deinem Oszilloskop messen ob er denn funktioniert.
s. Anhang
GELB: !RESET (PIN 22)
BLAU: SCK
ROSA: MOSI
GRÜN: MISO TEK07
GRÜN: CS/SS (PIN 5) TEK12
Hallo,
ich kenne zwar den TEK nicht, aber was erwartest Du bei einer Auflösung
von 1s pro raster von den 1000000 mal schnelleren SPI-Signalen noch zu
sehen?
Deine SpI-Signale sind in rund 1/100000 s nach der steigendewn Flanke
von RESET fertig. Auch der SS/CS Impuls ist da dann durch und macht fast
2 Sekunden Pause bis zum nächsten...
Nachdenken, was Du da siehst, was Du zu sehen erwartest und welche
Einstellungen sinnvoll sind.
Trigger auf die fallende Flanke von SS/CS und stell die Auflösung auf
2µs pro Raster oder so.
Wenn der TEK genau Speicher hat kannst Du natürlich auch größere Werte
nehmen und dann reinzoomen.
Gruß aus Berlin
Michael
Marius S. schrieb:> #include "Arduino.h"
hat vielleicht nichts mit dem SPI Problem zu tun. (da stimme ich erstmal
dem Micheal zu)
Aber warum includest du eine arduino.h aus dem sketch verzeichnis?
die ist doch bereits in den ESP32 Hardware sourcen enthalten.
Hallo,
so, ich wollte es sowieo mal machen, also war jetzt eine Gelegenheit
dazu. ;)
Ich habe den uralten VB6-Kram installiert und meinen
Eigenbau-Logicanalyzer ausgekramt...
Im Bild das, was Deine Software macht. Genau, das, was sie soll...
Weiß ich jetzt wenigstens, das mein 10 Jahre alter Kram immernoch geht
und die Software auch unter Win7-64.
Gruß aus Berlin
Michael
Marius S. schrieb:> Vielen Dank für eure Hilfe, der SPI-Bus funktioniert jetzt.
Hallo Marius,
kannst du deinen fertigen Sketch posten?
Ich bin momentan auch damit beschäftigt eine Kommunikation mit dem SPI
aufzubauen.
Gruß
Sinan