Go Down

Topic: Probleme mit TMRpcm (Read 340 times) previous topic - next topic

w0lf_001

Hallo,

ich habe mir ein kleines Projekt zu Halloween ausgedacht für das ich gerne eine oder mehrere Sounddateien von einer SD Card über einen kleinen Lautsprecher am Arduino ausgeben möchte.

Es ist eigentlich alles soweit fertig bis auf die Wiedergabe der Sounddateien welche noch Probleme macht.

Ich verwende einen Arduino UNO an den ich von AZ-Delivery einen MicroSD-Card Adapter angeschlossen habe.

Da mein Code nicht lief habe ich den Beispielcode von der TMRpcm libarie genommen aber auch mit diesem werden meine Dateien nicht abgespielt.

Die Dateien habe ich wie auf Github im Wiki zu der TMRpcm libarie beschrieben zu Wave Dateien konvertiert und auf einer 1 GB MicroSD-card und einer 2 GB MicroSD-card gespeichert welche ich zuvor in Fat16 formatiert habe.

Als Fehlerquellen habe ich bis jetzt den Code ausgeschlossen, da dieser ein Beispielsketch der libarie war und auch die MicroSD-cards und den MicroSD-card Adapter habe ich ausgeschlossen, da ich beides ausgetauscht habe und der Fehler trotzdem auftritt.

Ich versuche schon seit zwei Wochen den Fehler durch googlen zu beheben und bin jetzt mit meinen Ideen am Ende.

Vielleicht hat schoneinmal jemand die TMRpcm libarie verwendet und kann mir weiterhelfen.

Der Beispiel Sketch ist dieser hier in dem ich nur die Dateinamen verändert habe.

Code: [Select]

#include <SD.h>                      // need to include the SD library
//#define SD_ChipSelectPin 53  //example uses hardware SS pin 53 on Mega2560
#define SD_ChipSelectPin 4  //using digital pin 4 on arduino nano 328, can use other pins
#include <TMRpcm.h>           //  also need to include this library...
#include <SPI.h>

TMRpcm tmrpcm;   // create an object for use in this sketch


void setup(){

  tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) {  // see if the card is present and can be initialized:
    Serial.println("SD fail"); 
    return;   // don't do anything more if not
  }
  tmrpcm.play("spielen.wav"); //the sound file "music" will play each time the arduino powers up, or is reset
}



void loop(){ 

  if(Serial.available()){   
    if(Serial.read() == 'p'){ //send the letter p over the serial monitor to start playback
      tmrpcm.play("spielen.wav");
    }
  }

}


Vielen Dank schon einmal für die Hilfe die da kommen mag.

Ich mache jetzt erst einmal Schluss für heute.

Grüße
w0lf_001

HotSystems

Und warum verwendest du keinen MP3-Player ?
Z.B. DFPlayer mini ?

Damit hast du weniger Problem und einen besseren Klang.
Allerdings kannst über beide Lösungen nur eine Datei zur Zeit abspielen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uxomm

#2
Oct 19, 2019, 04:30 am Last Edit: Oct 19, 2019, 04:36 am by uxomm
Ich habe die TMRpcm-Library ein paar Mal genutzt, es hat immer auf Anhieb funktioniert.
Allerdings gibt es mehrere kleine Stolperfallen, zum Beispiel Hardware (richtige Verkabelung), SD-Karte (richtige Formatierung), Audio-File-Format, Software...
Ich würde versuchen den Fehler einzugrenzen.

Funktioniert es mit den Beispiel-Musikstücken (und dem Beispiel-Sketch)?
Bei der TMRpcm-Library sind ja auch 2 Musikdateien dabei. Sie befinden sich im Ordner der Library unter "audio_samples". Dort gibt es 2 Unterordner. Die Musikstücke heißen jeweils "music" (ohne Extension).
Hast du es mit einem davon probiert?

Verkabelung im Allgemeinen - richtigt?
Und speziell: CS-Pin richtig?
An welchen Pin ist der CS-Pin des Micro SD-Card Moduls angeschlossen?
Im Beispielsketch ist es Pin 4.
Ist das in deinem Aufbau auch so?

Was ist am "Speaker-Pin" angeschlossen?
An einem UNO muss der "Lautsprecher" an Pin 9 angeschlossen sein.
Aber du kannst einen "normalen" Lautsprecher nicht direkt an einen Arduino-Pin anschließen, der ist viel zu niederohmig und der Arduino kann deshalb kaputt gehen.
Was du aber zum Beispiel verwenden kannst:
- Einen "hochohmigen" Kopfhörer (z.B. 250 Ohm oder mehr).
- Einen "normalen" Kopfhörer oder Lautsprecher (von dem du nicht weißt wieviel Ohm er hat) mit einem Widerstand (mind. 150 Ohm) davor.
- Eine Aktivbox
Achtung: Die Lautstärke könnte ziemlich hoch sein.

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

Weil gerade zufällig ein SD-Karten-Modul auf meinem Tisch liegt, habe ich schnell einen Probeaufbau gemacht:
- Beispielsketch ("basic") der Library auf einen Arduino UNO geladen
- die Beispielmusik ("music") in das Hauptverzeichnis einer 2GB SD-Karte kopiert
- SD-Karten-Modul angeschlossen (SD-Modul --> Arduino UNO):
    CS --> 4
    SCK --> 13
    MOSI --> 11
    MISO --> 12 
    VCC --> 5V
    GND --> GND
- Hochohmigen Kopfhörer (nur einen Kanal): auf 9 und GND

Resultat: Spielt. Der Kopfhörer ist ziemlich laut, die Tonqualität ist, wie zu erwarten, eher "mittel" (jedenfalls kein HiFi), aber das Beispiel-Musikstück ist eindeutig erkennbar.
 
Always decouple electronic circuitry.

w0lf_001

Hallo und Danke für die Antworten.

Und warum verwendest du keinen MP3-Player ?
Z.B. DFPlayer mini ?

Ich hatte nach einer Lösung gesucht um eine Musik Datei abzuspielen und als erstes die TMRpcm gefunden. Und nun da ich alles für den Aufbau da habe und seit mehreren Wochen versuche die TMRpcm zum laufen zu bringen wollte ich ungerne einfach aufgeben und einen anderen Ansatz versuchen.


Damit hast du weniger Problem und einen besseren Klang.
Allerdings kannst über beide Lösungen nur eine Datei zur Zeit abspielen.

Die Klangqualität ist bei dem Projekt erstmal nebensächlich da es in erster Linie um Geräuche wie Donner für ein Gewitter geht.

Geplant ist auch nur eine Datei zur gleichen Zeit abzuspielen. Die zweite SD-Card war nur zum gegentesten um sicher zu stellen, dass diese nicht der Fehler ist.


Funktioniert es mit den Beispiel-Musikstücken (und dem Beispiel-Sketch)?
Bei der TMRpcm-Library sind ja auch 2 Musikdateien dabei. Sie befinden sich im Ordner der Library unter "audio_samples". Dort gibt es 2 Unterordner. Die Musikstücke heißen jeweils "music" (ohne Extension).
Hast du es mit einem davon probiert?

Die beiden Beispiel Musikstücke habe ich schon ausprobiert. Sowohl mit der Dateiendung .wav als auch ohne.

Verkabelung im Allgemeinen - richtigt?
Und speziell: CS-Pin richtig?
An welchen Pin ist der CS-Pin des Micro SD-Card Moduls angeschlossen?
Im Beispielsketch ist es Pin 4.
Ist das in deinem Aufbau auch so?

Die Verkabelung habe ich überprüft und auch jedes Kabel einzeln abgezogen und den Sketch neu laufen lassen und dabei dann über den Seriellen Monitor "SD fail" ausgegeben bekommen, wenn alles verkabelt ist bekomme ich die Fehlermeldung nicht.


Was ist am "Speaker-Pin" angeschlossen?
An einem UNO muss der "Lautsprecher" an Pin 9 angeschlossen sein.
Aber du kannst einen "normalen" Lautsprecher nicht direkt an einen Arduino-Pin anschließen, der ist viel zu niederohmig und der Arduino kann deshalb kaputt gehen.

Als Speaker-Pin nehme ich Pin 9 und habe dort einen Lautsprecher aus einem alten Telefon angeschlossen, diesen habe ich gerade durchgemessen und mein Multimeter sagt mir er hat 21,8 Ohm. Habe direkt den Pin mit einer LED und einem Blink Sketch getestet und er scheint noch zu funktionieren.
Habe jetzt einen anderen Lautsprecher mit 220 Ohm direkt angeschlossen aber keine Änderung.
Wenn ich zwischen den 21,8 Ohm Lautsprecher und dem Pin 9 einen 220 Ohm Widerstand hänge bekomme ich aber immerhin ein "Knacken" wenn der Sketch startet.
Das scheint nun zumindest schon einmal zu funktionieren.

Weil gerade zufällig ein SD-Karten-Modul auf meinem Tisch liegt, habe ich schnell einen Probeaufbau gemacht

Vielen Dank dafür.
Das ist merkwürdig da ich den gleichen Aufbau mit einem anderen Ergebnis habe.


Ich habe in der Datei pcmConfig.h unter "General User Defines" #define debug aktiviert und bekomme dann über den Seriellen Monitor "WAV ERROR" ausgegeben, diese Ausgabe konnte ich nun der TMRpcm.cpp zuordnen wo sie zweimal vorkommt. Ich habe die Serielle Ausgabe einmal umbenannt und herausgefunden das es scheinbar in diesem Abschnitt hängen bleibt.

Code: [Select]

void TMRpcm::play(char* filename){
play(filename,0);

}


void TMRpcm::play(char* filename, unsigned long seekPoint){

  if(speakerPin != lastSpeakPin){
  #if !defined (MODE2)
  setPin();
  #else
    setPins();
  #endif
  lastSpeakPin=speakerPin;

   }
  stopPlayback();
  if(!wavInfo(filename)){
  #if defined (debug)
  Serial.println("WAV ERROR");
  #endif
  return;
  }//verify its a valid wav file



Aktuell verwende ich das Beispiel Musikstück.

HotSystems

Aufgeben ist immer schlecht.
Du hattest im Eingangspost etwas von mehreren Dateien geschrieben, das habe ich dann falsch verstanden.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

w0lf_001

Du hattest im Eingangspost etwas von mehreren Dateien geschrieben, das habe ich dann falsch verstanden.

Ja das stimmt das hab ich schlecht formuliert.
Geplant ist später noch andere Dateien (eventuell zufällig durcheinander) alle paar Minuten abzuspielen.
Aber vorerst reicht es mir wenn es donnert oder wenigstens die Beispiel Musik wiedergegeben werden kann.

HotSystems

Denke aber dran, bis Helloween ists nicht mehr lange hin.
Rechtzeitig an Alternativen denken.
Der DFPlayer hat einen integrierten Verstärker, da kannst du einen Lautsprecher direkt anschließen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

w0lf_001

Ich werde mir den DFPlayer mal als Alternative anschauen.

Aber ich würde trotzdem gerne (auch für eventuelle andere Projekte) die TMRpcm libarie zum laufen bekommen.

Ich hoffe ja noch das ich einfach ein Brett vor dem Kopf habe und einfach etwas übersehe.

uxomm

Die beiden Beispiel Musikstücke habe ich schon ausprobiert. Sowohl mit der Dateiendung .wav als auch ohne.
Bist du sicher, dass du wirklich diese Library benutzt?
Es gibt nämlich in keinem der Ordner in audio_samples eine Datei mit WAV-Endung.
Dort gibt es Audiodateien mit Endug "mp3", diese können nicht mit TMRpcm funktionieren und es gibt welche mit Endung "ogg", diese können ebenfalls nicht funktionieren, bzw. liefern nur "heftiges Rauschen".
Nur die beiden Dateien mit Namen "music" (ohne Dateiendung) sind abspielbar.

Wenn es bei dir nicht funktioniert, dann ist wohl etwas falsch. :)
Es ist wohl eher nicht die Software (in Form der Library mit dem Beispiel-Sketch), bleiben noch: SD-Karte und Hardware/Verkabelung.

SD-Karte
Hast du eine andere, vielleicht sogar eine andere Marke?
Probiere diese. Mit der Datei "music" im Hauptverzeichnis.
Wie hast du die Karte formatiert?
Am sichersten funktioniert das mit
https://www.sdcard.org/downloads/formatter/

Hardware/Verkabelung
Kannst du ein scharfes Foto von deinem Aufbau machen, wo alle Komponenten und Kabelverbindungen zu erkennen sind?
Always decouple electronic circuitry.

w0lf_001

Bist du sicher, dass du wirklich diese Library benutzt?
Es gibt nämlich in keinem der Ordner in audio_samples eine Datei mit WAV-Endung.

Ja diese libarie verwende ich.
Ich habe sie auch gerade noch einmal neu heruntergeladenen und alles nochmal versucht aber ich bekomme den gleichen Fehler. (WAV error)
Ich habe die Datei "music" genommen und direkt auf die Karte gepackt und weil das nicht funktioniert hat habe ich an die Datei die Dateiendung .wav angehangen, da ich dachte, dass das eventuell hilft.

Muss ich die Datei auf der SD-Card mit .wav abspeichern oder komplett ohne Dateiendung?
Und wie rufe ich diese dann im Code auf? mit oder ohne .wav?

SD-Karte
Hast du eine andere, vielleicht sogar eine andere Marke?
Probiere diese. Mit der Datei "music" im Hauptverzeichnis.
Wie hast du die Karte formatiert?

Ich habe mehrere 1 und 2 GB MicroSD-Karten ausprobiert aber immer den gleichen Fehler bekommen und auch den Kartenadapter habe ich schon ausgetauscht.
Die Karten habe ich mit Windows eigenen Mitteln auf FAT16 formatiert. Wenn ich die Karten (Versuchsweise) auf FAT32 formatiere bekomme ich wie erwartet "SD fail" angezeigt weswegen ich denke das ich bei der Formatierung nichts falsch gemacht habe.

Hardware/Verkabelung
Kannst du ein scharfes Foto von deinem Aufbau machen, wo alle Komponenten und Kabelverbindungen zu erkennen sind?
Die Verkabelung der SD-Karten Adapters ist definitiv richtig. Die habe ich mehrfach überprüft und so angeschlossen wie du es beschrieben hattest. Sobald ich ein Kabel entferne bekomme ich auch direkt wieder "SD fail".
Und der Lautsprecher ist dank deiner Ratschläge jetzt auch richtig angeschlossen.

Leider kann ich gerade kein Foto aufnehmen und hochladen auf dem man alles gut erkennt.

uxomm

#10
Oct 21, 2019, 07:02 pm Last Edit: Oct 22, 2019, 01:29 am by uxomm
Muss ich die Datei auf der SD-Card mit .wav abspeichern oder komplett ohne Dateiendung?
Und wie rufe ich diese dann im Code auf? mit oder ohne .wav?
Der Name der Datei ist prinzipiell egal, auch ob er eine Extension hat oder nicht ist egal. Der Name darf nur nicht zu lange sein (max. 8 Zeichen + 3 Zeichen Extension) und er muss mit dem Namen im Arduino-Sketch übereinstimmen.

Mit der Datei "music" aus dem Ordner "audio_samples" sollte es mit dem Beispiel-Sketch funktionieren.  Diesen kannst du so öffnen:
In der Arduino-IDE wähle
Menü Datei / Beispiele / TMRpcm / basic

Die Beispiele, die bei einer Library dabei sind sollten funktionieren. Und bei mir tun sie das auch, ohne irgendetwas zu ändern.
Wenn du alles genau so wie beschrieben machst und es trotzdem nicht funktioniert, dann bin ich leider mit meinem Latein am Ende.   :smiley-confuse:

Die Formatierung mit Window-Bordmitteln funktioniert manchmal nicht richtig. Aber da habe ich ja schon auf ein Tool hingewiesen.
Always decouple electronic circuitry.

w0lf_001

Ich habe die library noch einmal komplett neu heruntergeladen und den Beispiel-Sketch auf das Board geladen.
Die SD-Karte habe ich jetzt auch mit dem von dir empfohlenen Tool neu formatiert (overwrite format) und die Beispiel Musikdatei ohne Dateiendung auf die Karte kopiert.
Aber es funktioniert nicht. Ich bekomme von dem Lautsprecher nur ein Knacken und dann leises Rauschen.

uxomm

Kannst du den jetzigen Lautsprecher vielleicht durch einen kleinen Aktivlautsprecher ersetzen (z.B. so etwas wie in diesem Video)?
Achtung, den Lautsprecher zuerst nur sehr leise aufdrehen, das Signal das vom Arduino kommen sollte ist sehr "laut".
Always decouple electronic circuitry.

w0lf_001

Habe ich gerade mal ausprobiert. Der Lautsprecher brummt beim aufdrehen bevor die Kabel verbunden sind, sobald ich die Kabel mit GND und PIN 9 verbinde hört er auf zu brummen aber gibt mir keinen weitern Ton aus.

HotSystems

Habe ich gerade mal ausprobiert. Der Lautsprecher brummt beim aufdrehen bevor die Kabel verbunden sind, sobald ich die Kabel mit GND und PIN 9 verbinde hört er auf zu brummen aber gibt mir keinen weitern Ton aus.
Das Brummen ist nicht ungewöhnlich und kommt durch den offenen Eingang und weil du das Kabel (auch die Isolierung) berührst.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up