Forum: Mikrocontroller und Digitale Elektronik ESP8266 GPIO mit SDK


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.
von Max M. (maxmicr)


Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

ich versuche aktuell, mich mit den GPIO Funktionalitäten besser vertraut 
zu machen. Dafür probiere ich aktuell an einer 7-Segment Anzeige rum, 
dafür sollte der ESP8266 12-F eigentlich genügend frei verfügbare Pins 
haben, dachte ich!

Aber irgendwie mag GPIO14 und GPIO15 nicht. Ich setze mit
1
PIN_FUNC_SELECT
die Pins als GPIOs:
1
void initGPIOs(void){
2
  gpio_init();
3
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);
4
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);
5
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5);
6
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
7
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
8
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);
9
}

(zu Pin16 gibt es in der "eagle_soc.h" keinen Eintrag).

Aktuell sind die Segmente an diesen Pins angeschlossen:
1
#define A BIT15
2
#define B BIT16
3
#define C BIT0
4
#define D BIT14
5
#define E BIT5
6
#define F BIT4
7
#define G BIT2

Alle außer BIT15 und BIT14 funktionieren. BIT16 lässt sich außerdem gar 
nicht ausschalten, sondern ist immer auf high. Woran kann das liegen?

: Bearbeitet durch User
von Thomas Z. (thomas_z41)


Bewertung
1 lesenswert
nicht lesenswert
Zu GPIO 14 und 15 kann ich jetzt aus dem Kopf heraus nichts sagen, aber 
GPIO16 ist normalerweise mit dem Reset verbunden für deep-sleep.

von Max M. (maxmicr)


Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

Mir ist gerade aufgefallen, dass es überhaupt keinen Unterschied macht, 
ob ich diese
1
PIN_FUNC_SELECT
 Funktion benutze oder nicht.

Es sieht aktuell nun so aus:
1
#define A BIT15
2
#define B BIT13
3
#define C BIT0
4
#define D BIT14
5
#define E BIT5
6
#define F BIT4
7
#define G BIT2

Nun funktioniert A zwar, dafür funktioniert B nicht mehr (D funktioniert 
nach wie vor nicht). So schalte ich die Pins ein:
1
gpio_output_set(A, 0, A, 0);

von Udo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
GPIO15 muß auf Masse liegen.
Sonst funktioniert das Modul nicht richtig.

von Max M. (maxmicr)


Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung, was ich gemacht habe. Zumindest funktioniert es jetzt mit 
diesen Pins:
1
#define A BIT15
2
#define B BIT13
3
#define C BIT0
4
#define D BIT12
5
#define E BIT5
6
#define F BIT4
7
#define G BIT2

und dieser Funktion:
1
void initGPIOs(void){
2
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);
3
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13);
4
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
5
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5);
6
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
7
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
8
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);
9
}

: Bearbeitet durch User
von Michael U. (amiga)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Udo schrieb:
> GPIO15 muß auf Masse liegen.
> Sonst funktioniert das Modul nicht richtig.

stimmt nur zum Teil. GPIO15 muß zur Bootzeit Low-Pegel lesen für den 
richtigen Bootmode. Das erledigz auch ein passender PullDown. Allerdings 
sollte man seine Beschaltung an GPIO15 dahingehend prüfen, ob der 
PullDown auch wirklich auf Low ziehen kann. Eine LED mit Vorwiderstand 
gegen 3,3V kann das durchaus verhindern...

GPIO16 hat auch Einschränkungen, kann aber durchaus genutzt werden.
GPIO0 und 2 müssen beim Booten auch passende Pegel haben. Halbwegs 
unabhängig sind GPIO12/13/14 (SPI) und GPIO4/5.

Eine 7-Segmentanzeige o.ä. würde ich eher über ein Scheiberegister 
('595) an einen ESP8266 hängen. Es ist eben kein AVR.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von ach ja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael U. schrieb:

> ..über ein Scheiberegister

ach ja?

von Michael U. (amiga)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ach ja schrieb:
> Michael U. schrieb:
>
>> ..über ein Scheiberegister
>
> ach ja?

Entschuldigung, war wohl im falschen SPI-Mode...

Gruß aus Berlin
Michael

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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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