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!

    • Selbst wenn ich dein gekürztes Telegramm (ohne Prüfsumme sende, bekomme ich
      7E FF 06 46 00 00 05 FE B0 EF 7E FF 06 41 00 00 00 FE BA EF

      46 ist die Antwort auf die Versionsabfrage, 05 ist die Version des Moduls.

      Dann kommt 41, das ist das ACK.

      Entweder hast du "ganz besondere" Module oder es geht sonst was schief.

      Einen Reim kann ich mir darauf nicht machen.


      Soll ich dir einen Link schicken (oder du sendest mir deine eMail-Adresse) zu meiner Testapp?

      Die ist noch nicht ganz fertig aber schon sehr funktionell.
    • Zitronenfalter schrieb:

      Soll ich dir einen Link schicken
      ein link wäre für dich das einfachste, denke ich. Ich wäre schon dran interessiert.

      Zitronenfalter schrieb:

      Entweder hast du "ganz besondere" Module oder es geht sonst was schief.
      Was kann schief gehen? Hterm>USBzuRS232>Modul. Es kommen plausible und auch konstante Antworten. Drum denke ich, ein Pegelwandler wird nix ändern.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo alle zusammen,
      ich hatte seinerzeit das Problem, dass der mp3 Player immer nur machte, was er wollte, meistens nix.
      Ich habe dann die Spannungsversorgung des mp3-Players über eine Diode 1N4004 an 5V geschaltet.
      Dazu wurde für RX und TX ein Pegelwandler zwischengeschaltet.
      Als Spannungsversorgung für den Pegelwandler habe ich einen Spannungsregler 3,3V eingesetzt.
      Ich hab jetzt grad keinen Schaltplan dafür, aber zumindest ein Foto des Steckbrettaufbaus.

      Player über Diode an 5V.jpg

      Vielleicht hilft es euch weiter.
      Man ist niemals zu alt, um Neues zu lernen.

      Es gibt keine dummen Fragen, nur dumme Antworten.
    • danke, das hat dein Freund @mac5150 weiter oben in diesem thread schon mal eingestellt und ist auch schon von mir ausgewertet worden. Die Kommunikation ansich ist nicht mehr das Problem, es war mehr das Verhalten nach einem Tiefschlafs des Kontrollers.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo liebe Bascomgemeinde,

      ich habe das Gefühl hier bin ich richtig.
      Zum einen scheinen ja doch einige Experten hier vertreten zu sein, zum Anderen geht meine Fragestellung genau zu diesem DF-Player-Modul.

      Ich programmiere zwar schon einige zeit in Bascom, allerdings eher recht einfache Anwendungen. So komplexe Programme wie hier vorgestellt,
      habe ich noch nicht hinbekommen.

      Mein Anliegen:
      Ich habe mir 2 dieser Module gekauft. Diese funktionieren über IO1 und IO2, sowie über ADKEY1 und ADKEY2 ganz hervorragend.
      Nun will ich sie aber vom Mikrocontroller aus ansteuern, aber da tut sich überhaupt nichts!
      Das soll nur ein ganz einfacher Player werden. Ich möchte dafür nicht das hier vorgestellte Programmverwenden.
      Also habe ich mir zum Testen selber etwas programmiert (siehe unten)
      Grundsätzlich sendet der Mikrocontroller (geprüft mit Oszi) Aber das Modul reagiert nicht.
      Eigentlich sollte er mit dem Programm unten alle 5 Sekunden Track 1 auf der SD-Karte starten.

      Noch einige grundsätzliche Fragen:
      MUSS ich eine Prüfsumme angeben??? Wenn nicht lasse ich die Werte dann auf Null?
      Oder gebe ich bei Anzahl der Bytes dann nur 4 statt 6 an gefolgt vom Endbyte?

      Stimmt die Prüfsumme überhaupt? Die habe ich aus einem Beispiel...

      Ich hoffe mir kann hier jemand helfen.
      Vielen Dank im Vorraus...
      LG


      ----------------------------------------------------------------------------------------------------------------------
      $regfile = "m8def.dat"
      $crystal = 1000000


      $hwstack = 32 ' default use 32 for the hardware stack
      $swstack = 10 'default use 10 for the SW stack
      $framesize = 40 'default use 40 for the frame space



      Open "COMD.1:9600,8,n,1" For Output As #1



      ' ##############################################################################
      ' #
      ' # Der Aufbau der Befehlszeichenkette setzt sich wie folgt zusammen:
      ' # Byte 01: Startbyte, ist immer 0x7E
      ' # Byte 02: Versionsbyte , ist immer 0xFF
      ' # Byte 03: Byteanzahl beginnend mit dem Versionsbyte bis
      ' # einschlieszlich dem LSB des Parameters, ist immer 0x06
      ' # Byte 04: Commandbyte
      ' # Byte 05: Feedback 0x01: Gibt Feedback zurueck, 0x00: kein Feedback
      ' # Byte 06: Parameter_MSB Hoeherwertiges Byte des Parameters
      ' # Byte 07: Parameter_LSB Niederwertiges Byte des Parameters
      ' # Byte 08: Checksum_MSB Hoeherwertiges Byte der Pruefsumme
      ' # Byte 09: Checksum_LSB Niederwertiges Byte der Pruefsumme
      ' # Byte 10: Endbyte, ist immer 0xEF
      ' #
      ' ##############################################################################


      '-------------------------------------------------------------------------------
      '----- Hauptprogramm -----------------------------------------------------------
      '-------------------------------------------------------------------------------


      Anfang:


      ' Track 001
      Printbin #1, 126 '01 Startbyte
      Printbin #1, 255 '02 Versionsbyte
      Printbin #1, 6 '03 Byteanzahl
      Printbin #1, 3 '04 Commandbyte
      Printbin #1, 0 '05 Feedback
      Printbin #1, 0 '06 Parameter_MSB
      Printbin #1, 1 '07 Parameter_LSB
      Printbin #1, 255 '08 Checksum_MSB
      Printbin #1, 230 '09 Checksum_LSB
      Printbin #1, 239 '10 Endbyte


      Wait 5



      Goto Anfang


      '-------------------------------------------------------------------------------
      '----- Ende Hauptprogramm ------------------------------------------------------
      '-------------------------------------------------------------------------------


      End
    • Also ich würde dem Player schon mal etwas mehr Zeit geben als nur 5 Sekunden.
      Er braucht auch Zeit bis er das Lied abgespielt und beendet hat und in dieser Zeit empfängt der Player auch keine Kommandos.
      Hier im Forum hat @Zitronenfalter eine Musikbox vorgestellt und diese macht am Ende nichts anderes als das was du möchtest.
      Schau es dir einfach mal an.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Hi, ohne Prüfsumme geht es auch, einfach nach den Daten das Endbyte senden. In deinem Programm sendest du die bytes einzeln, mit einem cr lf getrennt. Die müssen aber direkt nacheinander, ohne Trenner, gesendet werden. Füge nach jedem print ein ';' ein, dann wird er schon was spielen. Wenn dein Stück kürzer als 5 Sekunden ist, fängt er wieder von vorne an.
      Ach ja, denk dran, dass der Player für die Kommunikation 3,3V Pegel braucht, also zwischt dem Tx vom mega8 und dem Rx vom player einen 1k Widerstand, oder den mega8 gleich mit niedriger Spannung betreiben.
      Raum für Notizen

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

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

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

    • Also dann so?
      Und die Bytezahl dann auf 4? richtig?

      Printbin #1, 126; '01 Startbyte
      Printbin #1, 255; '02 Versionsbyte
      Printbin #1, 4; '03 Byteanzahl
      Printbin #1, 3; '04 Commandbyte
      Printbin #1, 0; '05 Feedback
      Printbin #1, 0; '06 Parameter_MSB
      Printbin #1, 1; '07 Parameter_LSB
      ' Printbin #1, 255; '08 Checksum_MSB
      ' Printbin #1, 230; '09 Checksum_LSB
      Printbin #1, 239; '10 Endbyte
    • Wenn ich so recht überlege, ich hab' mit einem Terminalprogramm die bytes händisch eingetippt und ich hab' immer 06 als bytezahl rein gedrückt, aber keine checksum verwendet. Das ging gut. Aber 04 wäre stimmiger.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Suuuuper, vielen Dank für die Hilfe Meister Hora!!! a_64_3a718cae
      Die fehlenden Semikolons nach den Printbefehlen waren die Lösung.
      Die Bytezahl MUSS auf 6 stehen auch wenn nur 4 gesendet werden.
      Checksum wir GARNICHT gesendet.

      Su funktionierts:
      --------------------------------------------------
      ' Track 001
      Printbin #1, 126; '01 Startbyte
      Printbin #1, 255; '02 Versionsbyte
      Printbin #1, 6; '03 Byteanzahl
      Printbin #1, 3; '04 Commandbyte
      Printbin #1, 0; '05 Feedback
      Printbin #1, 0; '06 Parameter_MSB
      Printbin #1, 1; '07 Parameter_LSB
      Printbin #1, 239; '10 Endbyte
    • Die Bytezahl ist immer sechs (weil die Prüfsumme nicht mitzählt sondern die Bytes nach dem Startbyte bis zur Prüfsumme).
      Und wenn ohne Prüfsumme, dann auch keine Nullen, weil das könnte ja auch eine Prüfsumme sind.
      Das "Geheimnis" ist die Länge also entweder acht oder zehn Byte inkl. Start- und Stoppbyte.
      Schau dir halt meine Lib an, da sieht man auch das ermitteln der Prüfsumme.
      Die hat übrigens den Sinn zu gewährleisten, dass auch bei nicht genauer Übertragungsgeschwindigkeit, sichergestellt wird, dass das Modul den Befehl verstanden hat und dementsprechend auch eine Fehlermeldung absetzen könnte (die Lib wertet dies aktuell aber nicht aus).
    • Hi, ich bin sehr beeindruckt von der detailierten Auseinandersetzung mit dem DF Player.

      Ich habe die Frage, ob es einen Befehl gibt, mit dem es möglich ist, unterschiedliche MP3s anzuspielen, zu pausieren und jede MP§ von der Stelle wieder fortzusetzen an der sie pausiert wurde. In etwa so:

      1. Anspielen von Track 001
      2. Pausieren von Track 001
      3. Anspielen von Track 002
      4. Pausieren von Track 002
      5. Anspielen von Track 003
      6. Pausieren von Track 003
      7. Fortsetzen von Track 001 ab der Position bei der Track 1 im zweiten Schritt pausiert wurde.

      Der Befehl Play macht im Prinzip genau das, nur dass man keine anderen Tracks zwischendrin abspielen darf.
      Die Advert Befehle ermöglichen das unterbrechen eines Tracks, durch einen anderen und die Fortsetzung des ersten Tracks im Anschluss an die Unterbrechung. Das funktioniert, so wie ich es verstehe aber nur nicht mit drei Tracks.

      Wenn es so einen Befehl, wie ich ihn suche, nicht gibt, wäre ich natürlich für Ideen (oder fertige Lösungen) dankbar, ob und wenn ja, wie sich eine solche Funktion realisieren lässt.