Forum: Mikrocontroller und Digitale Elektronik ESP8266 GPIO mit SDK


von Max M. (maxmicr)


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)


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)


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)


Lesenswert?

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

von Max M. (maxmicr)


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)


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)


Lesenswert?

Michael U. schrieb:

> ..über ein Scheiberegister

ach ja?

von Michael U. (amiga)


Lesenswert?

Hallo,

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

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

Gruß aus Berlin
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.