Fragen zum DFPlayer mini (Lexikon)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Versuche mal, das ganze mit 3.3V zu betreiben, oder verwende Pegelwandler zwischen ųC und Modul.
      Ich meine mich zu erinnern, dass das Problem schon mal wer hatte.

      Das bestärkt mich auch in der Annahme, dass es da verschiedene Module gibt, weil ich derartiges bisher nicht beobachten konnte (und ich habe hier Module von verschiedenen Lieferanten, ob es auch verschiedene Quellen sind kann ich aber auch nicht sagen.
      Allerdings haben alle Module dort wo du einen Kondensator hast bei mir einen Widerstand.

      Hoffentlich ist das kein Bestückungsfehler.

      Ich denke mal, wenn du diesen Thread zurückliest, wirst du auch auf dein Problem von wegen steuern über RS232 stoßen..
    • Der mit dem C funktioniert, die mit R nicht. Von den 5 bestellten sind 4 identisch und auch mit DFPlayer mini beschriftet. Der 5. ist mit MP3-TF-16P beschriftet. Dieser hat aber einen YX5200 chip drauf, die anderen einen AA1828...
      Ich werde das mal mit einem levelshifter testen, bleibt ja nix. Ist nur komisch, das der gehende auch einen YX5200 drauf hat und die RX und TX direkt an die pins gehen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Die, die ich hier habe haben nur einen C in der Ecke rechts (links sind auch Cs), und die funktionieren bisher klaglos (als Chip ist da übrigens der yx5200 drauf), während genau diese anderswo dies nicht tun.
      Inwieweit man den Ebay Angeboten trauen ist halt auch so eine Sache.
      Denn wer sagt, dass da im Prinzip nicht immer das gleiche Foto verwendet wird.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Zitronenfalter ()

    • Zitronenfalter schrieb:

      Denn wer sagt, dass da im Prinzip nicht immer das gleiche Foto verwendet wird.
      Zustimmung, ich tippe mal auf ein Interface-problem zwischen µC und dfplayer. Allerdings sollte , wenn beide mit 5V betrieben werden (4,2V machen da keinen großen Unterschied), kein Levelshifter notwendig sein. Einen Schutzwiderstand von wenigen hundert Ohm in der RX und TX Leitung kann nicht schaden. Verwende ich gerne damit ich beim versehentlichen falsch anstöpseln(z.B. Tx auf TX) nichts kaputt geht, aber die Diode weiter oben wäre mir suspect.
    • Das mit dem Levelshifter hat ein anderer User aufgebracht, der ähnliche Probleme hatte.
      Die Diode ist "von mir" inzwischen verwende ich aber einen 1k Widerstand.

      Lt. Datenblatt sollte die Widerstand auch nur bei Mischbetrieb 3.3V CPU und 5V Modul notwendig sein.
      Die Erfahrung zeigte aber dass es zu Störgeräusche kommt, wenn die Rx-Leitung nicht entsprechend "entkoppelt" wird (ob mit R oder D sei dahingestellt, ich habe eine Anwendung wo eine Diode verbaut ist und das funktioniert dort, aber auch eine andere wo es dies nicht tut, da funktioniert das nur mit einem Widerstand).
      Selbst in einer Anwendung wo die komplette Schaltung mit 4.00V betrieben wird, sind ohne diesen Widerstand Störgeräusche aufgetreten. Alles in allem sehr merkwürdig.
      Es hält sich allerdings das Gerücht, dass die Eingänge eventuell nur 3.3V "mögen".
    • Meine Stimmung hellt sich bisschen auf. Mit einem levelshifter, dessen lowlevel durch 3x 1N4148 in serie zu 5V gebildet wird, bekomme ich Kontakt zum Modul. Was nicht geht, ist ein MP3_getcurrentdevice(), da bleibt das Programm hängen. Wenn ich in meinem Programm das erwartete Ergebnis händisch eingebe, dann scheint der Rest zu gehen. Das beinhaltet auch MP3_getcountusb(), hier Zählt er die files auf dem stick, MP3_getcountcard() zählt hingegen nix, was ja richtig ist. MP3_getfilesinfolder() geht wohl auch.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • ftelektro schrieb:

      Mach mal anstelle von Dioden als Levelshifter je einen 1Kohm widerstand in die tx bzw. rx verbindung.
      Hat geklappt. Jetzt ist meine Stimmung wieder ok.
      Das MP3_getcurrentdevice() hab' ich jetzt umgangen. Ich bilde jetzt einfach die filesumme von USB und card. Dann bin ich auch flexibel, ob ich nun einen USBstick verwende oder eine card.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ein paar Module hab' ich, da ist der Verstärkerchip mit 8002A bestempelt. Das ist ein class AB Verstärker, also nix class D. Ich versuche also mit der Betriebsspannung möglichst hoch zu bleiben.
      shenzhensum.com/products/datasheet/8002(2.0W).pdf
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich füge mal einen ungefähren Schaltplan des Moduls bei (findet man wenn man nach dem Chip YX5200 sucht).
      Ungefähr deswegen, weil es offenbar verschiedene Verstärker und wohl auch geringfügig andere Bestückungen gibt (meine Module haben einen Bauteil mehr zum Beispiel.

      Wenn man aber davon ausgeht, dass alle Module im wesentlichen so aufgebaut sind, würde ich meinen, dass das Modul "intern" wohl mit 3.3V arbeitet was mich darauf schließen lässt, dass zumindest die RX-Leitung da nicht so tolerant sein wird. Die beiden anderen Leitungen sind ja Ausgänge und liegen dann von der Steuerung gesehen nur über den dort vorhandenen Pullups an einer möglichen höheren Spannung (z.B. dann 5V).
      Warum im Datenblatt das aber genau umgekehrt dargestellt wird, wissen auch nur die Hersteller :D .
      DF-Player-Mini-Schema.JPG

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Zitronenfalter ()

    • tschoeatsch schrieb:

      Da wird auch deutlich, dass eine stereo-Wiedergabe über Lautsprecher nicht drin ist.
      Habe ich mir auch gedacht, aber eventuell gibt es auch Versionen mit Verstärkerchips die das dann können würden, wenn das Signal getrennt eingespeißt wird.
      Zumindest wird ja im Netz mehrmals was in diese Richtung behauptet (soll bedeuten, zumindest das ist nicht auf meinem Mist gewachsen ;) ).
    • Der XPT4871 ist wohl der China-Clone der LM4871(TS4871), bei 4Ohm LP , 5V und voller Ausgangsleistung verbrät das Teil ca. 1,3W. Da wird der schön warm werden.
      Grob überschläglich nimmt die PA-Schaltung ca 3W auf, ergibt bei 5V etwa 600mA. D.h. ein ordentlicher Stützelko an VCC ist da ratsam(besonders bei Batt-Betrieb).
      Noch was: Der XPT5200 hat offensichtlich einen 3,3V-LDO on Board (VDDIO) und dieser versorgt den internen IO-Teil (darauf weist der Name hin) und die externe Card. Damit dürften auch die Anpassungsschwierigkeiten µC<->dfplayer zu tun haben, wenn ich richtig liege. Die Kommunikation läuft dadurch wahrscheinlich auf 3,3V-Digital-Pegel . Darauf deuten auch die Verwendung von Pegelshiftern bzw. 1k-Vorwiderstand hin.
    • Der DFplayer liefert jede Menge Überaschungen, gerade, was den busy-pin betrifft. Ich setze ja gesprochene Texte direkt aneinander. Das klappt mit so einem Konstrukt ganz gut

      BASCOM-Quellcode

      1. Info_einstellung: 'es wird die aktuell eingestellte Zeit vorgetragen
      2. If Vorletzte_taste = Letzte_taste Then Nerv_zaehler = Nerv_zaehler + 3
      3. Letzte_taste = &B1111 : Ausgabe_abbruch = 0
      4. If Ausgabe_abbruch = 0 Then
      5. Ordner = Einleitung_info_e : Gosub Spiele_file_aus_ordner
      6. End If
      7. If Stunden > 0 Then
      8. Temp = Stunden + 1
      9. If Ausgabe_abbruch = 0 Then
      10. Waitms 50 'bisschen Abstand von busy=inaktiv zur nächsten Übertragung
      11. Call Mp3_playfromfolder(std_min , Temp) 'Stunden
      12. Waitms 300
      13. End If
      14. While Busy = 0 And Ausgabe_abbruch = 0 : Wend
      15. If Ausgabe_abbruch = 0 Then
      16. Waitms 50
      17. Call Mp3_playfromfolder(std_min , 74) 'das Wort 'und'
      18. Waitms 300
      19. End If
      20. While Busy = 0 And Ausgabe_abbruch = 0 : Wend
      21. End If
      22. Temp = Minuten + 14
      23. If Ausgabe_abbruch = 0 Then
      24. Waitms 50
      25. Call Mp3_playfromfolder(std_min , Temp) 'Minuten
      26. Waitms 300
      27. End If
      28. While Busy = 0 And Ausgabe_abbruch = 0 : Wend : Waitms 50
      29. If Ausgabe_abbruch = 0 Then Call Mp3_playfromfolder(nachsatz_info_e , Text_num)
      30. Return
      Alles anzeigen


      Mit dieser sub wird eine eingestellte Zeit übertragen. Dazu wird in Zeile 5 ein einleitender Satz gewählt, wie 'es wurde die Zeit auf', dann wird in Zeile 11 die Anzahl der Stunden vorgetragen, in Zeile 17 das Word 'und' ausgegeben. In Zeile 25 folgen die Minuten und den Abschluß bildet ein Satzbaustein in Zeile 29, zB. 'eingestellt'. Man erkennt, dass zwischen jeder Ausgabe über den busy-pin auf das Ende der laufenden Ausgabe gewartet wird. Die 300 mS vor der busy-Abfrage braucht es, der chip muss wohl erst das soundfile laden und in der Zeit ist das busy noch nicht aktiv. Also kurz gesagt, das klappt zuverlässig.
      Was dann plötzlich nicht mehr klappt ist, wenn der Alarm in Form von einer Ansage, gefolgt von einem sound abläuft. Das schaut so aus

      BASCOM-Quellcode

      1. Alarm_schlagen: 'hier erfolgt das Alarmschlagen
      2. Letzte_taste = &B1111 : Ausgabe_abbruch = 0
      3. Alarm_laeuft = 1
      4. Led = 0
      5. Ordner = Alarm : Gosub Spiele_file_aus_ordner
      6. Ordner = Alarmsounds : Gosub Spiele_file_aus_ordner
      7. Call Mp3_stop()
      8. Waitms 100
      9. Alarm_gelaufen = 1
      10. Alarm_laeuft = 0
      11. Letzte_taste = &B1111
      12. Status = Bereitschaft
      13. Return
      Alles anzeigen
      Zeile 5 liefert einen Satz aus der Auswahl, zB. 'die Zeit ist um' und Zeile 6 liefert einen sound aus einer Auswahl, zB. ein Nebelhorn
      Dazu wird zur Auswahl, wie bei dem obigen Beispiel, diese Sub aufgerufen

      BASCOM-Quellcode

      1. Spiele_file_aus_ordner: 'Hier wird aus einen Auswahl aus Textvarianten eine zufällig ausgewählt
      2. N = Ordner - 20
      3. Temp1 = Auswahlbereich(n)
      4. Temp2 = Temp1 - 1 'letzter Index
      5. Wahl = Rnd(temp1) 'ein Index eines möglichen Textes wurd gewählt
      6. Text_num = Filenummer(n , Wahl)
      7. Temp1 = Filenummer(n , Temp2) 'Titelnummer letzter Index
      8. Filenummer(n , Wahl) = Temp1 'tauscht mit gewähltem Titel
      9. Filenummer(n , Temp2) = Text_num 'gewählter Titel kommt auf letzten Index
      10. Decr Auswahlbereich(n) 'Auswahl um ein Element einschränken
      11. If Auswahlbereich(n) = 0 Then Auswahlbereich(n) = Anzahl_files(n)
      12. Call Mp3_playfromfolder(ordner , Text_num)
      13. Waitms 1000 : While Busy = 0 And Ausgabe_abbruch = 0 : Wend
      14. Return
      Alles anzeigen
      nur, jetzt werden plötzlich 1000 mS Wartezeit nötig, dass das Programm in der while-Schleife bleibt, aber nur nach dem sound. Das file 'die Zeit ist um' wird bei 300 mS nicht unterbrochen, es wird also gewartet, der Nebelhornsound, der folgt, wird bei 300 mS nicht abgewartet, da braucht es 1000 mS. Das erkennt man gut, weil ja nach dem Nebelhorn ein MP3_stop() kommt, das bei Nichtabwarten das Nebelhorn abwürgt. Ist mir ein Rätsel a_27_b277ca12
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Der busy vom Dfplayer geht an einen Eingang vom AVR. Busy alias pinx.y.
      In der pcint0_isr werden bei mir die Tasten dekodiert und auch Abbruch=1 gesetzt. Spielt der Player, verweilt das Programm in der while..wend, bis das file abgespielt ist, oder in der isr Abbruch=1 wird. Klappt immer, nur bei den Alarmsounds nicht. Der Text vor dem Alarmsound wird auch nicht vom Alarmsound abgewürgt, wenn vor der Schleife nur 300 mS gewartet wird.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Das Busy wird IMHO erst aktiv, wenn das File tatsächlich abgespielt wird.
      Ich denke mal das die Zeit die du warten musst, jene ist, bis das File auf dem Speichermedium gesucht und auch gefunden wurde.
      Eventuell hilft es beim Formatieren des Mediums mit den Blockgrößen zu experimentieren.
      Eventuell ist es auch hilfreich kleinere Medien zu verwenden um die scheitern DurCh die FAT zu beeinflussen.
      Auch "plappert" das Modul möglicherweise sowohl beim Start sicher aber beim Beenden eines Files.
      In dieser Zeit nimmt das Modul nichts an.
    • Das es zum Suchen des files länger braucht, vermute ich auch. Es ist nur die Frage, wann? Wenn ich die Ansage für die Zeit zusammen setze, dann hab' ich in dem Ordner viel mehr Dateien mit den Satzbausteinen, als im Alarmsoundordner. Ich werde mal versuchen, das waitms for der while..wend durch ein bitwait busy, reset zu ersetzen, dann kommt das Programm zur while erst, wenn auch das busy aktiv low ist.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Mit diesen Zeilen geht es jetzt sehr gut

      BASCOM-Quellcode

      1. Call Mp3_playfromfolder(ordner , Text_num)
      2. Bitwait Busy , Reset : While Busy = 0 And Ausgabe_abbruch = 0 : Wend
      es wird sicher gewartet, bis das file abgespielt worden ist.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------