ESP8266 GPIO mit SDK

OP #4799652
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?
OP
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);
OP
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
}
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.