Forum: Mikrocontroller und Digitale Elektronik VS1053 ESP8255 Internet-Stream


von Martin R. (rogi1)


Lesenswert?

Hallo,

Ich habe versucht den einen VS1053 auf den esp8266 nodemcu 
anzuschließen:
[[https://www.geeetech.com/vs1053-mp3-breakout-board-sd-card-slot-p-611.html]]

ich verwende die adafruit Library Adafruit_VS1053.h
Angeschlossen habe ich die Leitungen XCS XRESET XDCS DREQ und 5V GND.
das sind auch jene Pins, die ich in der Library definiert habe. (alle 
anderen sind dann für die Speicherkarte?)

Leider ist es so, dass nicht einmal der SineTest funktioniert. Man hört 
eigentlich nur rauschen. beim abspielen des Sine-Tests, wird das 
Rauschen leise, und geht danach wieder an.
Beim starten bekomme ich den Fehler code: 15, die Register (mit dumpRegs 
ausgelesen) zeigen alle 0xffff.

Ich vermute ein Problem bei der Kommunikation, habe aber schon 2 mal die 
Verbindungen überprüft.
Wie könnte ich den Fehler jetzt finden?

lg und Danke

von Michael U. (amiga)


Lesenswert?

Hallo,

Martin R. schrieb:
> Angeschlossen habe ich die Leitungen XCS XRESET XDCS DREQ und 5V GND.
> das sind auch jene Pins, die ich in der Library definiert habe. (alle
> anderen sind dann für die Speicherkarte?)

Und der Rest? mit einer Speicherkarte hat der VS1053 nichts zu tun, der 
will seine Kommandos und Daten über SPI haben.
Lange her, daß ich mit dem rumgespielt habe, damals noch mit einer 
anderen Lib bzw. einer selbst angepassten.
Gerade mal den Streamplayer-Sketch gesucht: April 2016...

Gruß aus Berlin
Michael

von Thomas (Gast)


Lesenswert?

Martin R. schrieb:
> Ich vermute ein Problem bei der Kommunikation, habe aber schon 2 mal die
> Verbindungen überprüft.

Ja stimmt! Aber zweimal nur die Hälfte der Datenleitungen macht auch 
keinen funktionierenden DSP! Das Ding müsste schon mal so angeschlossen 
werden wie es im Datenblatt steht!

von Torsten (Gast)


Lesenswert?

Es gibt ein Projekt, das sich "Tonuino" nennt. Zu diesem Projekt gibt es 
ein Forum, in dem es Leute gibt, die das Ganze mit einem ESP32 statt 
einem Arduino nano aufziehen. Da sind auch Leute dabei, die als DAC 
sowas verwenden, wie du es hast. ESP8266 war glaub ich auch mal dabei. 
Solltest du hier nicht fündig werden, dann schau vielleicht parallel 
dort auch mal nach.

Achte auf jeden Fall drauf, dass deine Verbindungen "ordentlich" sind. 
Ich habe die Erfahrung gerade auch erst wieder machen müssen... : 
Beitrag "Arduino: ESP32 mit MAX98357A via i2s"

Das geht thematisch wie du sicherlich schnell sehen wirst in die gleiche 
Richtung.

von Martin R. (rogi1)


Lesenswert?

Danke Torsten,

Es tut schon weh wenn man im nachhinein feststellt, dass die Frage echt 
dumm ist, danke dennoch fürs zurechtrücken.

Ich habe am Board die Pins:

CS - kann ich im VS1053 Doku nicht finden, XCS gibt es für compatibility 
Mode
MISO -> MOSI/GPIO13/D7
SI -> MISO/GPIO12/D6
SCK -> HSPICLK  gpi14  D5
XCS      -> 0V (Chip immer selected)
XReset  -> über R nach 3V (spi immer active)/oder besser leer?
xDCS    -> CS/GIOP15/D8
DREQ   -> belibiger gpio, (außer 16 weil kein IRQ Pin)

Stimmt dieser Anschluss?
Was bedeutet das X vor den Pins,das hat ja sicher eine spezielle 
Bedeutung?
Was ist das CS(board) , ist das gleich wie XCS(VS1053 Doku); in der 
NodeMcu Beschreibung gibt es auch ein CS für das SPI modul, muss das 
dort ran?
Darf ich die Reset DCS und CS fix auf 0/3V legen, wenn ich nur ein 
Device am SPI habe?
Sollte XReset, wenn nicht über die Software gesteuert wird, leergelassen 
werden(laut Schaltplan) ; was bedeutet ACTIVE low?

lg und Danke

von Michael U. (amiga)


Lesenswert?

Hallo,

in Adafruits Beschreibung ist doch prinzipiell alles erwähnt.
Die haben ihr Modul zwar am UNO, Init und Pins kann man doch aber 
entsprechend auf den ESP8266 übertragen.
https://learn.adafruit.com/adafruit-vs1053-mp3-aac-ogg-midi-wav-play-and-record-codec-tutorial/library-reference

Ich habe damals für meine eigene Lin die folgende Zuordnung benutzt:
1
//#define MOSI 13            // SPI Hardware Standard-Config
2
//#define MISO 12
3
//#define SCLK 14
4
5
#define CS     4             // CS für Daten
6
#define DCS    5             // CS für Command
7
#define DREQ   2
8
#define RESET 16
SPI nicht definiert weil das die SPI-Defaultpins des ESP8266 sind.

Gruß aus Berlin
Michael

von Mike R. (thesealion)


Lesenswert?

Martin R. schrieb:
> XCS      -> 0V (Chip immer selected)

Das kann nicht funktionieren, da der Chip ja auch irgendwie erkennen 
muss, wann eine Übertragung beginnt.

von Martin R. (rogi1)


Lesenswert?

Ja, das stimmt schon, dass das alles beschrieben steht, aber leider mit 
anderen Bezeichnungen, und als Neuling auf diesem Gebiet habe ich leider 
noch keine Erfahrung mit Konventionen.
Ich habe daher versucht, alles anzuschließen, nach dem Vorbild von 
Michael U.
Leider ohne Erfolg.

Ich bin nicht sicher, ob CS, XCS und XDCS richtig angeschlossen sind, 
weil ich nicht sicher bin, welches denn überhaupt für welches ist... und 
bitte jetzt nicht sagen, dass das ja in der Dokumentation steht.
Ich habe ein Board in Verwendung, was ich im ersten Beitrag bereits 
verlinkt habe.  Ich kann aber nur den Pin CS gar nicht finden...

Pin D7 beeinflusst das Bootverhalten des ESP8266. Wenn ich CS 
anschließe, bootet der Controller nicht... somit müsste CS ein Ausgang 
sein, was macht CS dieses boards?

In der Beschreibung steht, im Standard Mode:
 BSYNC function changes to data interface chip select (XDCS).
also muss ich XDCS am CS ses SPI (D8, gpio15) anhängen?

Ich verstehe gernerell nicht so ganz Punkt 7.1.1 in 
[[https://cdn-shop.adafruit.com/datasheets/vs1053.pdf]].
Die Spalten SDIpin und SCIPIN, was soll das aussagen?

danke

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

Martin R. schrieb:
> Ich bin nicht sicher, ob CS, XCS und XDCS richtig angeschlossen sind,
> weil ich nicht sicher bin, welches denn überhaupt für welches ist... und
> bitte jetzt nicht sagen, dass das ja in der Dokumentation steht.
> Ich habe ein Board in Verwendung, was ich im ersten Beitrag bereits
> verlinkt habe.  Ich kann aber nur den Pin CS gar nicht finden...

Ich habe mal schnell in das Wiki von Geeetech geschaut, einen Schaltplan 
zu diesem Modul habe ich nicht gefunden.
Da aber alle Beschriftungen der Pins prinzipiell passen, sollte CS der 
CS der SD-Card sein. XCS ist der CS des VS1053, also bei mir CS genannt, 
XDCS entsprechend bei mir DCS.

Martin R. schrieb:
> Pin D7 beeinflusst das Bootverhalten des ESP8266. Wenn ich CS
> anschließe, bootet der Controller nicht... somit müsste CS ein Ausgang
> sein, was macht CS dieses boards?

Da die Pinbezeichnungen der ESP8266 Boards oft etwas Chaotisch sind, 
benutze ich generell die GPIO-Nummern des ESP8266. D7 müßte also GPIO13 
sein und damit MOSI vom SPI wenn man die default-Zuordnungen von SPI fpr 
den ESP8266 in der ArduinoIDE nimmt.

Für CS der SD-Card bleibe bei meiner Beschaltung eigentlich nur noch 
GPIO0 übrig, wenn da ein PullUp auf dem Player Modul oder/und der 
NodeMCU ist, sollte das gehen. Ansonsten eben erstmal garnicht 
anschlie0en und die SD-Card nicht benutzen.

Gruß aus Berlin
Michael

von Martin R. (rogi1)


Lesenswert?

Vielen dank für die Hilfe, ich habe jetzt die richtige Belegung 
gefunden, kann aber nicht sagen, wo der Fehler gelegen hat.

Dennoch hier jetzt die Belegung, für die Zukunft und vielleicht für 
jemanden mit gleichen Schwierigkeiten und gleichem Board:

//board beschriftet die Anschlüsse des Microcontrollers:
MISO -> MISO/GPIO12/D6
SI -> MOSI/GPIO13/D7

SCK -> HSPICLK  gpi14  D5

XCS      -> gpio4/D2 (VS1053 select)
XReset  -> Gpio16/D0
xDCS    -> Gpio5/D1
DREQ   -> Gpio2/D4

//hier die Config der Library:

#define VS1053_RESET   16     // VS1053 reset pin (not used!)
#define VS1053_CS      4     // (hier: XCS) VS1053 chip select pin 
(output)
#define VS1053_DCS     5     //  (hier: xdcs)VS1053 Data/command select 
pin (output)
#define VS1053_DREQ     2     // VS1053 Data request, ideally an 
Interrupt pin

: Bearbeitet durch User
von Martin R. (rogi1)


Lesenswert?

Hier noch hinweise zum verhalten:

Im Datenblatt von VS1053 steht ein Pullup des XRESET auf Masse.

Hänge ich bei diesem Board den XRESET mit einem 6.8KOhm auf Masse, ODER 
schließe gar nichts an, bootet der ESP8266 nicht und wirft über die 
Serielle Schnittstelle permanent scheinbar willkürliche Zeichen aus.

Hängt man den XRESET mit Widerstand auf +5V, funktioniert alles wie es 
soll.

Warum ist das so?
Kann jemand das Rätzel lösen?



Wenn man sich nicht über die Pinbelegung sicher ist, kann durch 
dumpRegs() die Register des VS1053 auslesen. Ich hatte bei fehlerhafter 
Verbindung entweder 0xFF oder 0x00.

von Wolfgang (Gast)


Lesenswert?

Martin R. schrieb:
> Beim starten bekomme ich den Fehler code: 15, die Register (mit dumpRegs
> ausgelesen) zeigen alle 0xffff.

Das würde mir zu denken geben - hört sich so an, als ob da die 
Kommunikation nicht funktioniert oder zumindest die Registerbelegungen 
nicht stimmen. Dann ist es auch nicht weiter verwunderlich, wenn der 
Sine-Test nicht funktioniert.

> Wie könnte ich den Fehler jetzt finden?

Guck dir mit einem Logikanalysator an, ob deine Signale auf den 
Steuerleitungen den Anforderungen im Datenblatt entsprechen.

von John Doe (Gast)


Lesenswert?

Martin R. schrieb:
> Hier noch hinweise zum verhalten:
>
> Im Datenblatt von VS1053 steht ein Pullup des XRESET auf Masse.
>
> Hänge ich bei diesem Board den XRESET mit einem 6.8KOhm auf Masse, ODER
> schließe gar nichts an, bootet der ESP8266 nicht und wirft über die
> Serielle Schnittstelle permanent scheinbar willkürliche Zeichen aus.
>
> Hängt man den XRESET mit Widerstand auf +5V, funktioniert alles wie es
> soll.
>
> Warum ist das so?
> Kann jemand das Rätzel lösen?


Das liegt sicherlich am grützigen ESP. Der hat doch auf GPIO16 irgendwas 
hartkodiert. Mit einem anderen GPIO passiert das sicherlich nicht.

von Michael U. (amiga)


Lesenswert?

Hallo,

John Doe schrieb:
> Das liegt sicherlich am grützigen ESP. Der hat doch auf GPIO16 irgendwas
> hartkodiert. Mit einem anderen GPIO passiert das sicherlich nicht.

wenn, dann liegt es an solchen grützigen Postings...
Ein John Doe kann eben weder Datenblätter (ESP8266) noch Schaltpläne 
(NodeMCU) lesen, nur große Töne spucken.

TO: Die NodeMCUs habe je nach Version verschiedene Beschaltungen 
zwischen GPIO16 und Reset, um das Aufwecken aus dem DeepSleep zu 
ermöglichen. Da hilft nur, die Schematic Deiner NodeMCU Version suchen, 
schauen, was da dran hängt.

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.