mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wemos D1 Board (ESP8266) spinnt.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gemeinde,

ein Phänomen, dass ich so noch nie gesehen habe.
Wemos D1 Board, an dem ich ein OLED Display via I2C betreibe.

Das Board lässt sich unter Arduino IDE 1.8.x einwandfrei flashen und 
läuft danach ordnungsgemäß. Text ist aufm Display zu lesen. Sobald ich 
das Board allerdings abstecke bzw. die USB-Verbindung unterbreche um es 
danach wieder anzustecken bzw. in Betrieb zu nehmen, startet die 
Applikation nicht. Das zuvor noch funktionierende OLED-Display bleibt 
einfach schwarz...

Alle Anteile die die serielle Schnittstelle betreffen habe ich 
rausgenommen. Hatte erst gedacht, dass die Applikation darauf wartet, 
dass eine serielle Verbindung zustande kommt bei Serial.begin().

Woran kann es noch liegen?

Danke!

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Scholz schrieb:
> Woran kann es noch liegen?

Der Reset bleibt aktiv und der ESP startet nicht

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

welche Pins sind genutzt? GPIO15 (D8) will Low beim Start und GPIO0 (D3) 
will High beim Start, sonst startet der ESP8266 im flaschen Bootmode.

Gruß aus Berlin
Michael

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, das könnte dann mit D3 zusammenhängen...
Dieser wird von der Applikation noch als Interrupt-Pin verwendet.

Da ich nicht mehr viele Pins frei habe (SPI wird neben I2C auch noch 
genutzt) kann ich nur noch auf D4 ausweichen oder? Oder sind die RX und 
TX Pins auch als Interrupt-Pin nutzbar.

Mal angenommen ich müsste unbedingt D3 nehmen. Wie würde dann hierzu der 
Workaround aussehen?

Herzlichen Dank!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Sven Scholz schrieb:
> Okay, das könnte dann mit D3 zusammenhängen...
> Dieser wird von der Applikation noch als Interrupt-Pin verwendet.
>
> Da ich nicht mehr viele Pins frei habe (SPI wird neben I2C auch noch
> genutzt) kann ich nur noch auf D4 ausweichen oder? Oder sind die RX und
> TX Pins auch als Interrupt-Pin nutzbar.
SPI ist in der ArduinoIDE beim ESP8266 als default auf GPIUO12/13/14/15 
(D6/D7/D5/D8). I2C auf GPIO4/5 (D2/D1).
Man kann andere nutzen, bei SPI können aber nicht alle umgemappt werden 
und es wird dann SoftwareSPI genutzt. I2C ist Software, da ist es 
ziemlich egal.
Wenn Du SPI anders zugewiesen hast, sollte D4 gehen.
Prinzipiell könnte man auch RX/TX nutzen, die IO-Matrix sollte die Pins 
dann vom UART trennen, habe ich aber nie getestet.

> Mal angenommen ich müsste unbedingt D3 nehmen. Wie würde dann hierzu der
> Workaround aussehen?
D3 muß zur Bootzeit zwingend H sein, sonst geht er in den Flashmode. Ob 
Du das in Deiner Schaltung sicherstellen kannst, weißt nur Du.

Gruß aus Berlin
Michael

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U. schrieb:
> D3 muß zur Bootzeit zwingend H sein, sonst geht er in den Flashmode. Ob
> Du das in Deiner Schaltung sicherstellen kannst, weißt nur Du.

Naja, wenn man sich den Schaltplan zum Wemos D1 ansieht, ist da ein 10k 
PullUp an 3,3V verbaut. Sollte also beim Einschalten immer High sein...
Wenn ich den Pin D3 dann in der SW mittels der Arduino 
attachInterrupt()-Methode angebe, sollte das doch keinen Einfluss auf 
den Bootvorgang haben?
Ich denke D3 wird durch die Methode als Input konfiguriert, um Flanke 
etc. überhaupt zu erkennen oder?

Also ganz klar ist mir das nicht...

Danke und viele Grüße!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Sven Scholz schrieb:
> Ich denke D3 wird durch die Methode als Input konfiguriert, um Flanke
> etc. überhaupt zu erkennen oder?
>
> Also ganz klar ist mir das nicht...

Deine externe Beschaltung, die den Interrupt erzeugt, darf im 
Startmoment aber auch nicht den Pin auf Low ziehen. Hängt also von 
dieser ab.

Gruß aus Berlin
Michael

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Scholz schrieb:
> Wenn ich den Pin D3 dann in der SW mittels der Arduino
> attachInterrupt()-Methode angebe, sollte das doch keinen Einfluss auf
> den Bootvorgang haben?

Nöö..

Allerdings wird er ab und zu mal LOW sein müssen, damit du Interrupts 
erhältst. Und dieses LOW kommt doch wohl von Außen.

Bisher hältst du geheim, was da dran steckt.

: Bearbeitet durch User
Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino Fanboy D. schrieb:
> Bisher hältst du geheim, was da dran steckt.

Danke!
Also da hängt ein RFM69 dran...

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Scholz schrieb:
> Also da hängt ein RFM69 dran...

Geht's auch ein bisschen genauer?

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Geht's auch ein bisschen genauer?

Nachja, DIO0 vom RFM69 Modul ist mit D3 vom Wemos D1 verbunden.
Dauerhaft.

Autor: Stevven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du mal versucht pull ups und downs zu verwenden?

Was sagt der Pegel an den Pins des rfm  Moduls wenn es mit Spannung 
versorgt wird aber nicht mit dem wemos verbunden ist?... und die Pins am 
wemos wenn das rfm nicht abgeschlossen ist?

Das DB des rfms sagt man könnte die Pins programmieren. Sind dort Vll 
pull ups/downs eingestellt?

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hatte den RFM69-DIO0-Pin mal kurzzeitig an D4 angeschlossen.
Damit konnte der ESP8266 gebootet werden!
Dabei muss man wissen, dass an dem D4-Pin die Builtin-LED des Wemos D1 
Board hängt.
Ergebnis: Die LED leuchtet damit dauerhaft und nur wenn der Interrupt 
ausgelöst wird, erlischt diese ganz ganz kurz um dann wieder 
weiterzuleuchten.
Ich denke DIO0 ist somit dauerhaft auf LOW. Daher wurde der ESP8266 auch 
nicht aktiv, sondern war vermutlich im "Flash-Mode".

Es wäre natürlich Spitze, wenn man den DIO0-Pin anders konfigurieren 
könnte, so dass der HIGH ist und beim Interrupt kurz auf LOW geht.
Im Datenblatt habe ich leider noch nix dazu gefunden...

@Stevven: Kannst du mir evtl. die Seite sagen, dann versuche ich das 
nochmal...

Danke und viele Grüße...

Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Scholz schrieb:
> Ich denke DIO0 ist somit dauerhaft auf LOW.

Nicht denken, nachmessen! Und zwar am besten mit einem Oszilloskop oder 
wenigstens mit einem Logic Analyzer.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.