Forum: Mikrocontroller und Digitale Elektronik Arduino mit WTV020-M01


von Lehmann84 (Gast)


Lesenswert?

Hi
 Ich habe ein kleines neues Projekt gestartet und benötigte etwas Hilfe 
für ein WTV020-M01 Sound Modul für den Arduino.
 Ich möchte mit einen Schalter eine bestimmte Datei auf der MicroSD-Card 
abspielen lassen. Es werden sich aber mehrere Musikdateien auf der Karte 
befinden. Er soll aber nur z.B. Lied Nr.3 abspielen, wenn das Programm 
es im vorgibt und mit dem Schalter gestartet wird.
 Irgendwie bekomme ich kein Signal zum Modul. Oder es ist komplett 
falsch was ich mir durch den Kopf gesetzt habe. Ist es überhaupt möglich 
eine bestimmte Datei mit dem WTV020 Modul zu starten oder muss ich alles 
überdenken???

 Ich hoffe es kann mir einer weiterhelfen. Ich habe mal mein Code 
reingestellt. Außer ein Brummen am Lautsprecher ist nicht viel los.

 [#include <Wtv020sd16p.h>

 const int ResetPIN= 2;
 const int clockPin= 3;
 const int dataPin= 4;
 const int busyPin= 5;
 int buttonPin = 12;
 int button= 0;

Wtv020sd16p wtv020sd16p (ResetPIN, clockPin, dataPin, busyPin);

 void setup()
 {
wtv020sd16p.reset ();
 pinMode (buttonPin, INPUT);
 }

 void loop()
 {
 button = digitalRead (buttonPin);
 if (button == HIGH)
 {
wtv020sd16p.playVoice (4[/code]);
 delay(2000);
 }
 }]

von Philipp K. (philipp_k59)


Lesenswert?

Wollte den auch mal zum laufen bringen.. irgendwie war das bei mir alles 
buggy obwohl ich nur eine Datei abspielen wollte. Falls Du weiterkommst 
kannst ja hier mal meldung machen.

Werde mich zu Halloween wieder dransetzen.

EDIT: Auf Deine Frage.. im normalfall sollte das klappen, ist aber nicht 
garantiert.

: Bearbeitet durch User
von Lehmann84 (Gast)


Lesenswert?

Ich bräuchte nur jemanden der schon einmal Erfahrung mit dem Modul hat 
und mir weiterhelfen kann. Hat jemand schon mit dem WTV020 ein Projekt 
gestartet und eine Sounddatei ohne die Next-Schalter betrieben?
Also alles gesteuert über ein Arduino!

von Philipp K. (philipp_k59)


Lesenswert?

steht doch alles in dem Beispiel der Lib und einem ellenlangem Thread 
auf arduino.cc dort wo diese Lib vorgestellt wurde.

http://forum.arduino.cc/index.php/topic,117009.0.html

von Holger L. (max5v)


Lesenswert?

Bei mir hat es funktioniert, allerdings nutze ich keinen Arduino.
Das Soundformat ist in diesem Fall sehr wichtig, normale WAV Dateien 
haben bisher nicht richtig funktioniert, das AD4 Format funktionierte 
problemlos.
Dazu gab es ein Tool im Internet, das müßtest du googeln.

von Lehmann84 (Gast)


Lesenswert?

Das mit dem .ad4 ist mir klar und auch schon alles umgewandelt. Ich 
denke das der Microcontroller nicht mit dem Modul spricht. Was ist mit 
dem Clock und dem Busy Eingang, müssen die speziell geschaltet werden. 
(Mit einen bestimmten Takt?) Wie sieht der Aufbau mit dem Modul aus?

von Holger L. (max5v)


Angehängte Dateien:

Lesenswert?

Da du die Wtv020sd16p.h Bibiliothek benutzt schätze ich das die 
Bezeichnung WTV020-M01 nicht richtig ist ?

Lehmann84 schrieb:
> Was ist mit dem Clock und dem Busy Eingang, müssen die speziell geschaltet > 
werden.

Der Clock Pin ist der Pin 7 (P04) am Modul , welcher an den "clockPin= 
3" des Arduinos angeschlossen wird.

Der Busy Pin ist der Pin 15 (P06) an dem Modul kommt an den "busyPin= 5" 
an dem Arduino.

Der Di Pin 10 (P05) an dem Modul kommt an "dataPin= 4" an dem Arduino.

Der Reset Pin 1 (RESET) an dem Modul kommt an "ResetPIN= 2" an dem 
Arduino.

Mit den Tastern kann die Funktionalität getestet werden.

Voraussetzung dafür ist natürlich das es ein Wtv020sd16p ist, die 
Bezeichnung steht ganz unten auf der Oberseite des Moduls.
Betrieben wird das ganze mit 3.3 Volt.

von Lehmann84 (Gast)


Lesenswert?

Das anschließen hat ja auch so weit schon gepasst. SD-Card mit ein paar 
Beispiel Dateien eingelegt und über die Schalter NEXT und Back an dem 
Modul (PIN 12 und 13) konnte ich hin und her wechseln. Ich würde aber 
gerne über den Arduino eine bestimmte Datei abspielen. z.B. Soundfile 
Nummer 4 und danach die Nummer 2. Wie müsste da das Programm aussehen?
Das ist in Moment mein Problem. Ich denke mit der Bibliothek 
Wtv020sd16p.h ist das egal, aber ich check das noch einmal.

von Philipp K. (philipp_k59)


Lesenswert?

Hab auch mal wieder gebastelt..

an beiden Modulen war auf dem Pin des CLK eine kalte Lötstelle das es 
nur sporadisch bis garnicht funktionierte.. in Arduino lief es garnicht, 
in C Sofort.

EDIT: ach Sry ist ja der M01.. hab den 16SD

: Bearbeitet durch User
von Lehmann84 (Gast)


Lesenswert?

Weiß jemand den Link zu der Pin-Belegung des WTV020-M01. Vielleicht 
liegt ja daran das Problem. Über die Next und Back Tasten funktioniert 
ja soweit alles, nur über die Ansteuerung des Moduls über den Arduino 
will es noch nicht klappen.
Vielleicht kann mir einer weiterhelfen, habe nämlich nur das Datasheet 
vom WTV020-16SD gefunden.

von Holger L. (max5v)


Lesenswert?

Steht auch noch noch DFPlayer Min oder MP3-TF-16P auf dem Modul ?

von Philipp K. (philipp_k59)


Lesenswert?

Ist ja die Frage ob das M01 eine Ic Produktbezeichnung oder eine 
beliebige Modulbezeichnung ist.

Ich habe nur den WTV-020-S(erial) gefunden und nach dem Datasheet könnte 
man mal "durchklingeln".. was steht denn genau auf dem IC und Foto?

von Holger L. (max5v)


Lesenswert?

In dem Forum
http://forum.arduino.cc/index.php/topic,241021.0.html
gibt es ein Modul mit der Bezeichnung WTV020-M01, die auch auf eine 
Bibliothek und ein Wiki verweist,
https://github.com/DFRobot/DFPlayer-Mini-mp3
http://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299
eventuell ist es das Ding ja sogar.

Bisher ergab die Suche nur zwei IC's WTV010 und WTV020 das Datenblatt 
dazu gibt\gab es auf irgend einer Chinaseite.

von Marko S. (bahnbooster)


Angehängte Dateien:

Lesenswert?

Also ich häng mich hier mal dran, da ich dieses Modul WTV020M01 im 
einfachen Taster-Mode betreiben wollte. Ich hatte zwei dieser Module und 
beide taten nichts ! In diversen Foren standen so Probleme mit den 3.3 
V, SD_Karten Kompatibilität, file-Format etc. Irgendwie schien es nur 
sporadisch bei den Leuten zu funktionieren.
Ich hab das Modul auf 5 V umgelötet, was aber auch nix brachte.

Jetzt hab ich mir mal das Datenblatt des Chips vorgenommen und die 
Verbindungen zum Rest der Platine geprüft. Und dabei musste ich 
feststellen, dass keine Masse - Verbindung vom Chip zum SD_Kartenslot 
bestand (Pin 6), auch nachlöten half nix.

Ich hab die Leitung händisch verlegt und was soll ich sagen:

Es funktioniert alles tadellos ! Ich werde die Tage mal noch die anderen 
Module überprüfen (ich dachte, ich hab zwei geschrottet und deshalb 
nachbestellt  - wie dumm ^^).

von MacTester (Gast)


Lesenswert?

Markus P.,

vielen Dank für den wertvollen Hinweis. Er hat mein Projekt gerettet: 
http://www.tonymacx86.com/imac-mods/130197-mactester57s-imac-g5-17-a1058-model-7.html#post986109

Unglaublich, was heutzutage alles aus China auf den Markt geworfen wird. 
Das Beste ist, dass die Boards alle einen "QC Passed" Kleber haben.

Vielen Dank nochmals!

von Marko S. (bahnbooster)


Lesenswert?

na das freut mich ja.
Ich weiß zwar nicht, was du da mit dem Mac machst, aber Daumen hoch  (:

Ich kann ja noch hinzufügen, dass ich zwei verschiedene 2GB SD_Karten 
hier habe. Die eine funktioniert problemlos und immer. Bei der anderen 
kann ich drei vier Titel abspielen, dann kann das Modul damit nichts 
mehr anfangen.
"Busy" springt kurz an und geht wieder aus. Auch Auschalten, raus / rein 
bringt nix.

Ich muss die Karte low Level formatieren und dann geht sie wieder, 
obwohl am PC die Karte und Inhalt völlig unverändert erscheint (also vor 
dem Formatieren ).
Auch "normales" Formatieren hilft nicht.

Also die Controller auf den Karten hab so ihr Eigenleben ...

von Stefan S. (albertodlc)


Lesenswert?

Hallo,

hab lange nach irgendeiner Info zu dem Modul gesucht...
bin ich froh hier was gefunden zu haben :-)

Ich habe heute zwei dieser Module bekommen(WTV020M01 V1.00).
Oben steht das Datum: 2012.01.12
und hinten der sticker: QC2 Passed 10/2014

@Markus P.: Ich gehe mal davon aus, daß es genau die gleichen sind wie 
deine. Warscheinlich haben sie dann ja auch dieses Masse-Problem...

Ich habe allerdings erstmal ganz andere Sorgen:
Eigentlich habe ich 2 andere Module bestellt: WTV020-SD-16P
Steht so auch auf meiner Rechnung. Na ja, wird sicher ein Versehen des 
Shops gewesen sein.
Jetzt weiß ich nur nicht, ob die Module qualitativ gleichwertig sind, 
oder ob ich sie zurückschicken sollte. Wenn sie auch ok sind, würde ich 
sie behalten. Gekostet haben sie 11,90€ (zusammen).

Vielleicht kann mir jemand was zu den Unterschieden der Module sagen.

Und, ganz wichtig: Ich finde nirgends einen Pin-Belegungsplan. Kann den 
mal einer posten ?

Danke schonmal..

von Alexander B. (alexander_b76)


Lesenswert?

Hallo!

zunächst einmal möchte auch ich mich bei Herr P. bedanken - er hat die 
Module bei uns erworben, und wir waren auch etwas überrascht was wir da 
von unserem Lieferanten bekommen haben. Umso mehr freut es uns natürlich 
dass er mit der beschriebenen Modifikation die Module zum Laufen 
bekommen hat.

Ein Nachfragen bei unserem Zulieferer hat nur ein Achselzucken bewirkt 
(die haben nicht einmal verstanden was das Problem ist fürchte ich), und 
das Versprechen es das nächste mal besser zu machen ("my friend, we are 
so sorry")...

Viele Grüße,

Alexander Beck

: Bearbeitet durch User
von Peter M. (sirpete83)


Lesenswert?

Guten Abend,

ich habe auch zwei dieser Module. Ich habe diese bei Eckstein-Komponente 
erworben. Die Dokumentationen sind wie bei vielen chinesischen Produkten 
immer entsprechend schlecht zumindest schlecht übersetzt.

Es ist in verschiedenen Datenblätter oder Übersetzungen eine innere 
Schaltung abgebildet, diese zeigt eine direkte Verbindung zwischen VSS 
und PIN6 der microSD Card.
Diese ist auf der Platine aber anders realisiert, anscheinend wird die 
Karte über einen Transistor J3Y (SMD Code) erst eingeschaltet.

Ich habe es auch zunächst mit einer Brücke zwischen VSS und PIN6 
probiert. jedoch habe ich dem Modul so auch keinen Ton entlocken können. 
Nachdem ich die Kingston 2GB Karte nochmal mit Windows in voller 
Kapazität mit dem FAT Dateisystem formatiert habe. Und Sample AD4 
Audiodateien darauf geladen habe, funktionierte das eine Modul, welches 
ich mit der Brücke versehen habe mit einem Li-Ion Akku mit 
nachgeschalteter Diode in Flussrichtung um eine Spannung von 3.3 Volt zu 
erhalten.

Das Modul ohne der Brücke funktionierte weiter hin nicht. Irgendwo habe 
ich gelesen, dass man eine höhere Spannung benötigt. Uns in der tat, Das 
originale unveränderte Modul arbeitet mit der vollen Batteriespannung 
von 3.7 Volt ebenfalls.

Vielleicht hilft ja jemandem dieser Beitrag oder jemand hat noch eine 
Idee.

Gruß Peter

von Markus P. (Gast)


Lesenswert?

hm, also ohne Brücke, aber mit erhöhter Spannung läuft das Teil ?
Muss ich glatt nochmal probieren.

von Pedram G. (ganjeh_hadidi)


Angehängte Dateien:

Lesenswert?

Meine funktionierende Konstallation (Steuerung nur über Mikrocontroller 
bzw. Arduino):
WTV020-M01 + Arduino Nano (ATmega 328) + Audacity + 2GB-microSD 
Transcend (FAT16, Conrad, siehe Foto "microSD.jpg"!).

WICHTIG: Es gibt 3 Spannungs-Jumper zum Bestimmen der Betriebsspannung 
(siehe Foto "Voltage_Jumpers.jpg"!). Diese muss zuerst für 3,3V od. 5V 
gelötet werden!

PIN-Belegung von WTV020-M01:
[[http://www.datasheetbank.com/WTV020M01-Datasheet-Pinouts.html]]
Wir werden für die Steuerung von WTV020-M01 nur folgende PINs benötigen:
VCC, GND, SPK+, SPK-, /BUSY, /RESET, Data In, Clock.

Vorgehensweise für Erstellung der Audio-Dateien (AD4-Format):

1. Audio aufnehmen od. zum WAV (16 Bit PCM, MONO, 32000Hz) konvertieren.

2. Bearbeiten (Entrauschen, Pegel anpassen sonst stürzt das Modul ab, 
Einblenden, Ausblenden, Zerstückeln und als "0000.WAV", "0001.WAV",..., 
"9999.WAV" speichern (16 Bit PCM, MONO, 32000Hz). Siehe Fotos: 
"Audacity.jpg", "Effekte.jpg" sowie "Rauschprofil_Ermitteln.jpg"!

3. CMD starten, zum WAV-Verzeichnis wechseln und mit dem Befehl:
1
for /f "usebackq" %a in (`dir /b *.wav`) do ad4.exe -E4 %a
alles auf einmal in AD4-Format konvertieren und anschließend auf die 
microSD kopieren. Siehe "ad4.zip"!

4. "/Busy", "/Reset", "Data In" sowie "Clock" an Mikrocontroller/Arduino 
anschließen.

5. Bibliothek "Wtv020sd16p.zip" suchen, downloaden, in Libraries-Verz. 
von Arduino od. Sonstige IDE-Lib-Verz. entpacken:
[[http://forum.arduino.cc/index.php/topic,117009.0.html]]

6. Den Code unten (nur für Arduino-IDE) eingeben (od. noch Besser: Copy 
& Paste), kompilieren, hochladen.

Fertig!
1
/*******************************************************************************
2
* Author:    Pedram GANJEH-HADIDI                                              *
3
* Date:      2016-01-05                                                        *
4
* Modul:     WTV020-M01 Ver. 1.0                                               *
5
* Copyright: GNU GPL: https://www.gnu.org/copyleft/gpl.html                    *
6
* Programm:  Playing files: "0000.AD4" to "0020.AD4" in a for loop.            *
7
********************************************************************************
8
* This ASCII-ART contains information about:                                   *
9
*  - PINs of WTV020-M01 (short: WTV)                                           *
10
*  - How to solder Voltage Jumpers for 3.3V or 5V op. mode                     *
11
*  - How to connect the WTV020-M01 to a microcontroller (mC).                  *
12
*  See: http://gif.datasheetbank.com/detail-image1/ETC/139731-DI1.gif          *
13
*  and: http://www.datasheetbank.com/WTV020M01-Datasheet-Pinouts.html          *
14
*                                                                              *
15
*                               ------|   |------                              *
16
*                               |      \_/      |                              *
17
*                               |  [A] [B] [C]  |                              *
18
*                     /RESET ---| 1          16 |--- Vcc                       *
19
*                      AUDIO ---| 2          15 |--- /BUSY                     *
20
*                  Not used! ---| 3          14 |--- Not used!                 *
21
*                 SPEAKER(+) ---| 4          13 |--- Next Sound File           *
22
*                 SPEAKER(-) ---| 5          12 |--- Previous Sound File       *
23
*                  Not used! ---| 6          11 |--- Not used!                 *
24
*                 Clock(CLK) ---| 7          10 |--- Data In(DI)               *
25
*                 Ground(GND)---| 8           9 |--- Pause/Play                *
26
*                               ----------------                               *
27
*                                                                              *
28
*                                  ATTENTION!                                  *
29
* Check Voltage-Jumpers on the module:                                         *
30
*  - Solder [A] and [B] for 5V mode, or                                        *
31
*  - solder [B] and [C] for 3.3V mode!                                         *
32
*                                                                              *
33
* The "/RESET" and "/BUSY" pins are negated, which means:                      *
34
* /BUSY == 0 == LOW   ===> WTV is busy                                         *
35
* /BUSY == 1 == HIGH  ===> WTV is idle (ready to play a file)                  *
36
*                                                                              *
37
* If you are controlling the WTV020-M01 by a microcontroller then you will     *
38
* only need following PINs: Vcc, GND, CLK, DI, /BUSY, /RESET, SPEAKER(+) and   *
39
* SPEAKER(-).                                                                  *
40
/*******************************************************************************
41
*                        Controlling by Microcontroller (mC)                   *
42
*                                                                              *
43
*                 You have to connect following four connections:              *
44
*                                                                              *
45
*         MICROCONTROLLER (mC)                              WTV020-M01 (WTV)   *
46
*                                                                              *
47
*         1. 1x Digital INput    --->  connnect to  --->   /BUSY               *
48
*         2. 1x Digital Output   --->  connnect to  --->   /RESET              *
49
*         3. 1x Digital Output   --->  connnect to  --->   CLOCK (CLK)         *
50
*         4. 1x Digital Output   --->  connnect to  --->   DATA IN (DI)        *
51
*                                                                              *
52
*                                                                              *
53
*******************************************************************************/
54
55
56
/********************************* Definitions ********************************/
57
// "Driver" class.
58
// See: http://forum.arduino.cc/index.php/topic,117009.0.html
59
// or:  http://www.instructables.com/id/How-to-use-WTV020SD-16P-with-Arduino/
60
#include <Wtv020sd16p.h>
61
62
#define DELAY_RESET 1000
63
#define DELAY_FILE  5000
64
65
// The mC-pin connected to the WTV-reset pin.
66
#define PIN_WTV_RESET 2
67
68
// The mC-pin connected to the WTV-clock pin.
69
#define PIN_WTV_CLOCK 3
70
71
// The mc-pin connected to the WTV-data pin.
72
#define PIN_WTV_DATA  4
73
74
// The mc-pin connected to the WTV-busy pin.
75
#define PIN_WTV_BUSY  5
76
77
78
/********************************* Implementation *****************************/
79
80
// Create an object of the "driver".
81
Wtv020sd16p wtv020sd16p(PIN_WTV_RESET, PIN_WTV_CLOCK, PIN_WTV_DATA, PIN_WTV_BUSY);
82
83
84
void setup()
85
{
86
    // Init. Serial-Comm. for debug info.
87
    Serial.begin(9600);
88
89
    // Allways reset the WTV-module before first usage!
90
    wtv020sd16p.reset();
91
}
92
93
94
void loop()
95
{
96
    Serial.println("Playing from 0 to 20...");
97
98
    // Play the AD4-files from "0000.AD4" to "0020.AD4".
99
    // All of my files have/had a duration below 5 seconds.
100
    // ATTENTION: Files have to start with number "0000" and
101
    // must be continuously!
102
    for(int i = 0; i < 21; i++)
103
    {
104
        Serial.print("Now playing file No# ");
105
        Serial.println(i);
106
107
        delay(DELAY_RESET);
108
        wtv020sd16p.playVoice(i);
109
110
        // For ideal delays, you can save the duration of your
111
        // files (in [ms] + a little bit more) in an array (or EEPROM),
112
        // then read and use it here.
113
        // See: https://www.arduino.cc/en/Reference/EEPROM
114
        delay(DELAY_FILE);
115
    }
116
}

: Bearbeitet durch User
von Markus P. (Gast)


Lesenswert?

sehr schön zusammengefasst und bebildert. Danke dafür !!
Und die Masse Brücke ist nicht nötig ?

von Pedram G. (ganjeh_hadidi)


Lesenswert?

>Und die Masse Brücke ist nicht nötig?

Nein! Eine Massebrücke für mein WTV020-M01 war nicht notwendig.

: Bearbeitet durch User
von Pedram G. (ganjeh_hadidi)


Lesenswert?

Crash/Abstürz bei Knackgräusche oder höher Pegel/höhe 
Lautstärke/AD4-Dateien

Auf diverse Internetseiten und Foren wurden Abstürze/Crashs von 
WTV020-M01 Modul bei "höher Pegel", "(laute) Knackgräusche" udg. 
gemeldet.

Da dieses Verhalten des Digital-Analog-Converters (DAC) mir sehr 
komisch/unnatürlich erschien, habe ich einige Tests durchgeführt und 
habe den Grund für dieses Verhalten eruieren können: undefinierte 
Betriebs-Spannung (ungelötete Spannungs-Jumper, siehe mein vorh. 
Posting!).

Der Grund:
Bei ungelötete Spannungs-Jumper, arbeitet der WTV020-M01 in 3,3V Modus 
(wobei das Modul bei gelötete Spannungs-Jumper bezüglich VCC relativ 
tolerant wäre), jedoch durch ungelöteten Jumper, sinkt die 
Betriebsspannung bei höhere AD4-Dateien und das WTV020-M01 Modul startet 
sich neu.

Dieses Verhalten war auf einem anderen Modul reproduzierbar.

: Bearbeitet durch User
von Markus P. (Gast)


Lesenswert?

hm, also meine Module waren fest auf 3.3V verlötet, aber mittels 
"setVolume" zu hoch eingestellter Lautstärke am Modul , kamen nur noch 
Pieptöne (Absturz ?).

Also sollten die ad4 files im Pegel so gering sein, dass auch bei 
maximaler Lautstärke das Gerät nicht abstürzt ?

Ich hab mich jetzt lange nicht mehr damit beschäftigt und muss das 
erstmal wieder rauskramen. Aber dann werd ich nochmal den 5V Modus 
probieren und einen Kerko über die Betriebsspannung legen.

von Philipp K. (philipp_k59)


Lesenswert?

Wie man diese Module auch immer nennt..

Ich nenne diese mal einfach "WTV020 China Module".

Ich habe wohl einige erwischt die zwar Lötbrücken haben, aber als 3.3V 
Only verkauft wurden.

Diverse Libs musste ich für meine Zwecke immer anpassen bis es 
funktionierte.

Insgesamt habe ich noch keine Probleme gehabt, Laut und Klar!

von Pedram G. (ganjeh_hadidi)


Lesenswert?

Philipp K. schrieb:
>
> Diverse Libs musste ich für meine Zwecke immer anpassen bis es
> funktionierte.
>

Ich habe die Bibliothek (siehe mein langer Posting weiter oben!) 
eingesetzt und darf berichten, Alles hat sofort und prima funktioniert.

von Tester (Gast)


Lesenswert?

Also ich kann das alles nicht bestätigen... was ich aber bestätigen 
kann, sind Fehler in dem Arduino WTV020SD16 Library Code.

Desahlb wurde je hier auch schon festgestellt, das die angebliche Lösung 
mit der Drahtbrücke keine ist. Auch bei mir hat der SDCard Pin keinen 
Kontakt zu GND. Und trotzdem funktioniert alles.

Deshalb denke ich ist der QC Aufkleber auf dem Modul auch in Ordnung... 
weil die eben ihren Code haben (Assembler)... und der Arduino Code nur 
ungenügend interpretiert und übersetzet wurde.

Ich habe jedenfalls viel rumprobiert und feststellen müssen, dass hier 
das Timing an vielen Ecken nicht stimmt.

Die Library habe ich verworfen und was eigenes erstellt... habe das mit 
meinen 3 Modulen getestet (2x 2012 V1.0, 1x 2015 V1.01) und alle 
funktionieren einwandfrei mit 3.3v und einer 2GB Micro SDCard.


Dieses Modul ist für mich die beste Lösung weil:

- Man kann einen 8 Ohm Lautsprecher direkt ohne extra Verstärker 
anschliessen (laut!)

- Klein und sparsam


Blöd ist natürlich das AD4 Format... aber dazu habe ich mir einfach ein 
eigenes Java Converter Tool programmiert.

Somit sind alle Probleme gelöst :)


Übrigens ich verwende das Modul mit einem Teensy LC und löte das Modul 
auf den hinteren Teil des Teensy (huckepack). Kleiner gehts nimmer :-)

von Philipp K. (philipp_k59)


Lesenswert?

Tester schrieb:
> Also ich kann das alles nicht bestätigen... was ich aber bestätigen
> kann, sind Fehler in dem Arduino WTV020SD16 Library Code.

So isses!

von Tester (Gast)


Lesenswert?

Übrigens setVolume funktioniert nicht... da der Chip nur 0xfff0 (Mute) 
und 0xfff7 (Full Vol) annimmt. Versucht man etwas anderes einzustellen, 
dann hat man abrupte Lautstärkeschwankungen. Fällt aber nicht so sehr 
ins Gewicht... schaltet man einfach einen Widerstand zwischen dem 
Lausprecher Plus Kabel, so das man die gewünschte Lautstärke bekommt. 
Ansonsten kann man noch ein digitales Mini-Potentiometer verbauen: 
AD5171 und die Lautstärke über einen Arduino Analog-Pin steuern.

Das gleiche wie mit dem Teensy kann man natürlich auch mit einem Arduino 
Pro Micro oder Mini Pro machen (Modul huckepack nehmen).

von Tester (Gast)


Angehängte Dateien:

Lesenswert?

Bilder

von Tester (Gast)


Lesenswert?

Hier der code:
1
/*
2
3
            WTV020SD16 Sound-Modul (3.3V)
4
 
5
               -------  -------    
6
     /RESET   o       \/       o   +3.3V
7
      AUDIO   o                o   /BUSY
8
         NC   o    --------    o   NC
9
       SPK+   o   | |||||| |   o   Next Sound
10
       SPK-   o   |        |   o   Prev Sound
11
        NC    o   |   SD   |   o   NC
12
       CLK    o   |        |   o   DATA
13
       GND    o    --------    o   Pause/Play
14
               ----------------
15
16
17
  If you need a lot of pins of the Teensy, then you can remove and not solder the following Pins: 
18
  
19
  - AUDIO
20
  - NC
21
  - Next Sound
22
  - Prev Sound
23
  - Pause/Play
24
25
26
27
28
29
  If you need a Volume Control, then you can use the AD5171 Digital Potentiometer:
30
31
  Link: https://www.arduino.cc/en/Tutorial/DigitalPotentiometer
32
33
34
  SPK+ (IN)  >-----------------------┐
35
                    1                |
36
                    ┌────────────┐   |
37
  SPK+ (Out) <------o W (OUT)  A o-<-┘
38
  +5V --------------o +5V      B o-------┐
39
  GND --------------o GND    ADD o-------┤
40
   A4 --------------o SCL    SDA o---┐   |
41
                    └────────────┘   |   |
42
                                     |   | 
43
   A5 -------------------------------┘   | 
44
                                         | 
45
  GND -----------------------------------┘ 
46
              
47
48
49
50
51
  File-Formats:
52
  -------------
53
  
54
  - Wave Files: 16 Bit, 6KHz to 16 Khz
55
  
56
  0000.wav
57
  0001.wav
58
  .
59
  0XXX.wav  (max. 512 files)
60
  
61
   
62
   
63
  - AD4 Files: 16 Bit, 6KHz to 36KHz (4 Bit ADCPM format files)
64
  
65
  0000.ad4
66
  0001.ad4
67
  .
68
  0XXX.ad4 (max. 512 files)
69
70
               
71
*/
72
73
boolean debug = true;
74
75
76
const int resetPin  = 6; 
77
const int clockPin  = 12;
78
const int dataPin   = 13;
79
const int busyPin   = 18;
80
81
int busyPinState = HIGH;
82
83
void setup() {
84
85
  if(debug) Serial.begin(115200);
86
   
87
  pinMode(resetPin, OUTPUT);
88
  pinMode(clockPin, OUTPUT);
89
  pinMode(dataPin, OUTPUT);
90
  pinMode(busyPin, INPUT);
91
92
93
  pinMode(A1, OUTPUT); 
94
  
95
96
  delay(1000); // * Wait for the Pins *
97
98
  
99
  resetModule();
100
  sendCommand(0xfff7);  // * Volume has to be "FULL VOLUME" 7   (Hardware Bug!)  must be set, because after Power on or Reset Button sometimes the sound will not start! *
101
102
}
103
104
void loop() {
105
106
107
  startSoundInBackground(0);
108
  delay(12000);
109
    
110
}
111
112
113
void resetModule(){
114
  
115
  digitalWrite(resetPin, HIGH);  
116
  digitalWrite(resetPin, LOW);
117
  delay(5);
118
  
119
  digitalWrite(resetPin, HIGH);
120
  digitalWrite(clockPin,HIGH);
121
122
  // * Wait *
123
  delay(500);
124
}
125
126
127
void startSoundInBackground(int soundNumber){
128
  
129
  sendCommand(soundNumber);  
130
}
131
132
void startSoundAndWaitTilEnd(int soundNumber){
133
  
134
  sendCommand(soundNumber);
135
  
136
  busyPinState=digitalRead(busyPin);
137
  while(busyPinState==HIGH) busyPinState=digitalRead(busyPin);  
138
}
139
140
void stopSound() {  
141
  sendCommand(0xFFFF);  
142
}
143
144
145
146
void sendCommand(unsigned int command) {
147
148
  if(debug) Serial.println("--------------");
149
  if(debug) Serial.print("Command (");
150
  if(debug) Serial.print(command, HEX);
151
  if(debug) Serial.println(")");
152
  
153
  //Start bit Low level pulse.
154
  digitalWrite(clockPin, LOW);
155
  delay(2);
156
157
158
  // * 0x8000 = 100000000 00000000 = 16 Bits, Send Command as Serial Transfer *
159
  for (unsigned int mask = 0x8000; mask > 0; mask >>= 1) {
160
    
161
    digitalWrite(clockPin, LOW);
162
    delayMicroseconds(50);
163
    
164
    // * Set Data-Bit on the Line *
165
    if (command & mask) {
166
      
167
      Serial.print("1");
168
      digitalWrite(dataPin, HIGH);    
169
    }
170
    else  {
171
      
172
      if(debug) Serial.print("0");
173
      digitalWrite(dataPin, LOW);
174
    }
175
    if(debug) Serial.print(" ");
176
  
177
    // * Wait 50us *
178
    delayMicroseconds(50); 
179
    
180
    // * Clock: High ... time to get Data-Bit *
181
    digitalWrite(clockPin, HIGH);
182
183
    // * Wait some time to give time to read the bit (possible values: 5-6500us) *
184
    delayMicroseconds(50);
185
  }
186
187
  if(debug) Serial.println(" ");
188
 
189
190
  // * Give Busy time to go "High" *
191
  delay(50);
192
}

von Tester (Gast)


Lesenswert?

Habe wahrscheinlich rausgefunden warum setVolume() Probleme macht.

Normalerweise kann man laut Datenblatt Werte zwischen 0-7 einstellen, 
doch bei mir funktioniert das nur von 4 bis 7. Werte unter 4 führen zu 
einer zufälligen und abrupten Lautstärke-Modulation (Sound wird alle 
paar ms lauter/leiser und wirkt zerkratzt).

Kann sein das es an den 3.3V liegt... oder das der DA einen bestimmten 
Grundpegel benötigt. Vielleicht treten die Probleme mit der 5V Brücke 
auf dem Modul nicht auf.

Naja, egal... zwar funktioniert nun soweit alles (auch setVolume), habe 
mir aber nun das MP3 TF 16P Modul bestellt (kostet 10€ anstatt 5€), was 
im Prinzip genauso groß ist wie das WTV020, nur kann man direkt MP3 
Files auf die SD Karte ablegen und abspielen, ohne alles in das AD4 
Format konvertieren zu müssen.

von Tester (Gast)


Lesenswert?

Das funktioniert:
1
// * Volume 0-4 (0 = Off) *
2
void setVolume(int volume) {
3
 
4
  if(volume >=0 && volume < 5) { 
5
6
    if(volume == 0)   sendCommand(0xFFF0);
7
    else              sendCommand(0xFFF0+3+volume); 
8
  }
9
}

von Tester (Gast)


Lesenswert?

Noch etwas... man kann bei der Lautstärke nicht Stufen überspringen... 
führt auch sporadisch zur Zerstörung des Sounds (mal geht es, mal 
nicht). Man muss, wenn man von Lautstärke 4 kommt und auf 1 will... 
zuerst 3 und 2 senden, dann 1. Das funktioniert aber dafür zuverlässig, 
wie es scheint.

Also das Modul ist schon ziemlich buggy, wenn man nicht ein wenig 
trickst :)

von Tester (Gast)


Lesenswert?

So hier der veränderte komplette Code mit der neuen Volume Stepping 
Funktion:  void setVolume(int targetVol)

Soweit ich das sehen konnte, sind nun alle Probleme damit umschifft.


1
 
2
3
4
boolean debug = true;
5
6
7
const int resetPin  = 6; 
8
const int clockPin  = 12;
9
const int dataPin   = 13;
10
const int busyPin   = 18;
11
12
int busyPinState = HIGH;
13
14
15
int volume = 4;
16
17
18
void setup() {
19
20
  if(debug) Serial.begin(115200);
21
   
22
  pinMode(resetPin, OUTPUT);
23
  pinMode(clockPin, OUTPUT);
24
  pinMode(dataPin, OUTPUT);
25
  pinMode(busyPin, INPUT);
26
27
28
  pinMode(A1, OUTPUT); 
29
  
30
31
  delay(1000); // * Wait for the Pins *
32
  
33
  resetModule();
34
  
35
}
36
37
void loop() {
38
39
  startSoundInBackground(0);
40
41
42
  setVolume(4);
43
  delay(3000);
44
  setVolume(1);
45
  delay(3000);
46
  setVolume(3);
47
  delay(3000);
48
  setVolume(1);
49
  delay(3000);
50
  setVolume(0);
51
  delay(3000); 
52
  setVolume(4);
53
  delay(3000); 
54
  setVolume(2);
55
  delay(3000); 
56
  setVolume(3);
57
  delay(3000);
58
  setVolume(4);
59
  delay(3000);
60
61
  
62
  delay(2000);
63
    
64
}
65
66
67
void resetModule(){
68
  
69
  digitalWrite(resetPin, HIGH);  
70
  digitalWrite(resetPin, LOW);
71
  delay(5);
72
  
73
  digitalWrite(resetPin, HIGH);
74
  digitalWrite(clockPin,HIGH);
75
76
  // * Wait *
77
  delay(700);
78
79
  // * Volume has to be "FULL VOLUME" 7   (Hardware Bug!)  must be set, because after Power on or Reset Button sometimes the sound will not start! *
80
  sendCommand(0xfff7);  
81
}
82
83
84
void startSoundInBackground(int soundNumber){
85
  
86
  sendCommand(soundNumber);  
87
}
88
89
void startSoundAndWaitTilEnd(int soundNumber){
90
  
91
  sendCommand(soundNumber);
92
  
93
  busyPinState=digitalRead(busyPin);
94
  while(busyPinState==HIGH) busyPinState=digitalRead(busyPin);  
95
}
96
97
void stopSound() {  
98
  sendCommand(0xFFFF);  
99
}
100
101
102
// * Volume 0-4 (0 = Off) *
103
void setVolume(int targetVol) {
104
105
  // * maybe because of the 3.3V the value can not be lower 4, volume < 4 = random volume modulation => distrotion *
106
  if(targetVol >=0 && targetVol < 5) { 
107
108
    if(targetVol == 0)   sendCommand(0xFFF0);
109
    else {
110
111
      if(targetVol > volume) {
112
113
        int steps = targetVol-volume;
114
        for(int i=0;i<steps;i++) {
115
          volume++;
116
          sendCommand(0xFFF0+3+volume); 
117
          delay(800); // * without this delay... the sound will be destroyed 
118
        }        
119
      }
120
      else if(targetVol < volume) {
121
122
        int steps = volume-targetVol;        
123
        for(int i=0;i<steps;i++) {
124
          volume--;
125
          sendCommand(0xFFF0+3+volume);           
126
          delay(800); // * without this delay... the sound will be destroyed
127
        }
128
      }
129
    }
130
  }
131
}
132
133
134
void sendCommand(unsigned int command) {
135
136
  if(debug) Serial.println("--------------");
137
  if(debug) Serial.print("Command (");
138
  if(debug) Serial.print(command, HEX);
139
  if(debug) Serial.println(")");
140
  
141
  //Start bit Low level pulse.
142
  digitalWrite(clockPin, LOW);
143
  delay(2);
144
145
146
  // * 0x8000 = 100000000 00000000 = 16 Bits, Send Command as Serial Transfer *
147
  for (unsigned int mask = 0x8000; mask > 0; mask >>= 1) {
148
    
149
    digitalWrite(clockPin, LOW);
150
    delayMicroseconds(50);
151
    
152
    // * Set Data-Bit on the Line *
153
    if (command & mask) {
154
      
155
      Serial.print("1");
156
      digitalWrite(dataPin, HIGH);    
157
    }
158
    else  {
159
      
160
      if(debug) Serial.print("0");
161
      digitalWrite(dataPin, LOW);
162
    }
163
    if(debug) Serial.print(" ");
164
  
165
    // * Wait 50us *
166
    delayMicroseconds(50); 
167
    
168
    // * Clock: High ... time to get Data-Bit *
169
    digitalWrite(clockPin, HIGH);
170
171
    // * Wait some time to give time to read the bit (possible values: 5-6500us) *
172
    delayMicroseconds(50);
173
  }
174
175
  if(debug) Serial.println(" ");
176
 
177
178
  // * Give Busy time to go "High" *
179
  delay(50);
180
}

von Lalu Fendy (Gast)


Angehängte Dateien:

Lesenswert?

hallo ...
Can you help me convert my audio format (.wav) I have audio sounds of 
traditional musical instruments, I want to convert to (ad4), I am always 
a failure in converting to ad4 (no sound excessive noise and the results 
are not clear) help me ... convert me to vote in module wtv020 kept 
clean of noise ...
please send me the file ad4 his already clean of noise yes,,,, in my 
email ... fefendy131@gmail.com ...
This is my project for college thesis,,,,
thanks

von Philipp K. (philipp_k59)


Lesenswert?


von Lalu Fendy (Gast)


Angehängte Dateien:

Lesenswert?

I've tried on yesterday,,,,,, but the result is ugly sound levels 
fluctuate sometimes small and sometimes big brother ..... .... please 
help me before I got over koment audio file .... please help the convert 
to ad4,,, I've tried several times but the result is not perfect,,,,
if pleased ... send me the results of his ad4 in fefendy131@gmail.com 
... please

von Tester (Gast)


Lesenswert?

Lalu Fendy schrieb:
> I've tried on yesterday,,,,,, but the result is ugly sound levels
> fluctuate sometimes small and sometimes big brother

This is a setVolume issue. You have to set it to 7

Use my code 4 posts above. Then its working fine.

von Tester (Gast)


Angehängte Dateien:

Lesenswert?

Hier mein AD4 Soundfile Konverter (Java). Quelldateien (wav, ogg, mp3) 
müssen in 16Bit vorliegen (8 Bit oder 24 Bit funktionieren nicht).

Pegelanpassung auf -6dB und Mono Channel erfolgen automatisch. Muss also 
nicht vorher extra von Hand gemacht werden.

von Tester (Gast)


Angehängte Dateien:

Lesenswert?

Anbei auch noch mal der komplette Code.

von Stephan K. (nightowl)


Lesenswert?

Bei mir hat das Modul erst funktioniert nachdem ich die 1GB SD-Card mit 
dem Formatierungstool von der SD Card Assosiation formatiert habe.

Vorher war nur ein leises knacken bei "play" oder "next" zu höhren.
Die "busy LED" hat dann für ca. 2 Sekunden geleuchtet.

Die Brücke für die Spannungswahl musste gesetzt werden, die reset 
Verbindung war nicht nötig.

https://www.sdcard.org/downloads/formatter_4/index.html

von Hannes L. (hannes)


Lesenswert?

Ich habe jetzt mal meinen Vorrat durchgeprüft.

Von 5 "WTV020-SD Mini" waren 3 auf Anhieb funktionsfähig. Die 2 Stück, 
die nicht wollten, ließen sich durch Reinigen der Platine 
(Lötzinnperlen) zur Funktion überreden.

Von 8 "WTV020M01 V1.00" funktionierten 3 auf Anhieb. Die restlichen 5 
ließen sich durch Reinigen der Platine und Kontakte des Kartenhalters 
funktionsfähig machen.

Die oben beschriebene Masse-Brücke war definitiv nicht nötig. Die Dinger 
sind einfach schlampig produziert, der Qualitäts-Check beschränkt sich 
wohl auf das Aufkleben der Etiketten.

Es kamen Speicherkarten von 64 MB und 128 MB zum Einsatz, die keinerlei 
Sonderbehandlung brauchten. Es wurden WAV-Dateien im Format 8 Bit Mono 
mit Sampleraten von 8 bis 16 kHz benutzt. Die Ansteuerung erfolgte von 
einem Pro-Mini (Arduino-Klon mit Mega328P) als StateMachine nebenher in 
einem Chronjob (im 2 ms-Raster, Entprellung der Radsensoren der 
Gartenbahn-Dampflok), wobei der Mega328 nebenher je nach Fahrsituation 
noch mehrere voneinander unabhängige Sounds erzeugt (Grundrauschen, 
gelegentliches lautes Zischen, Kolbenschläge zweier Triebwerke (Mallet), 
Zylinderentwässerung, Dampf-Pfeife, Glocke, Bremsenquietschen und 
Dampf-Luftpumpe).

Einen Wermutstropfen hat die Sache aber noch. Die Module spielen die 
Dateien nicht bis zum Ende, sondern geben auch noch den Rest des letzten 
angefangenen Clusters wieder. Das ergibt bei ungünstiger Dateilänge 
hässliche Knackser am Ende.

...

von Markus (Gast)


Lesenswert?

also ich habe jetzt alles am Modul so belassen (also auch die 
Massebrücke) und auch die "Wtv020sd16p" library verwendet. Die 
Volume-Steuerung funktioniert bei mir von 4 bis 7, alles Andere führt zu 
dem von @Tester beschriebenen Merkwürdigkeiten.
Ich habe normale mp3´s in ad4 umgewandelt und auf eine 2 GB Karte 
gespielt.
Hier das Ergebnis: https://youtu.be/1IzQIGjYH-s

von Markus (Gast)


Lesenswert?

witzig: ich habe heute mal meinen ganzen Arduino Kram auf einem anderen 
Rechner installiert, die Sketches etc. einfach rüber kopiert. Um es 
sauber zu haben, habe ich auch die Wtv020SD16p library neu runtergeladen 
und via library-Manager installiert.

Beispiel-Code zum Testen kompiliert und er bricht mit

"Wtv020sd16pExample:54: error: 'class Wtv020sd16p' has no member named 
'setVolume'

   wtv020sd16p.setVolume(3);"

ab. Hm, warum das ? Das Beispiel sollte doch funktionieren ? Tatsächlich 
ist aber in der neu runtergeladenen Version der library der Befehl 
"setVolume" entfernt worden. Vermutlich wegen der Probleme. Oder 
"setVolume" gehörte nie wirklich in die Bibliothek und ich hatte das 
sonstwo her ^^.

von Tom W. (rittertom)


Lesenswert?

Hallo
Ich hoffe hier bin ich richtig.
Habe mir auch ein MTV020M01 V1.0 vom 12.01.2012 geleistet.
Es soll mur auf Tastedruck eine Melodie wiedergeben.
Doch Totenstille.
Die Original Sample Dateien 0001.ad4 draufgespielt.
Ich habe den GMD (PIN6) mit der Brücke (SD_Karte) gemacht.
Neu formatiert ( FAT Standart, FAT 32, exFAT) alles bringt nicht´s.
Die busy LED gibt zwar auch was von sich, aber egal ob ich resete oder 
die vorwärts Tase betägte - es sieht alles gleich aus.
Was mache ich falsch??
 HILFE

von Hannes L. (hannes)


Lesenswert?

Tom W. schrieb:
> Die Original Sample Dateien 0001.ad4 draufgespielt.

Auf was für eine Karte? (Kapazität)

> Ich habe den GMD (PIN6) mit der Brücke (SD_Karte) gemacht.

Ist nicht nötig.

> Neu formatiert ( FAT Standart, FAT 32, exFAT) alles bringt nicht´s.

Was verstehst Du unter Standart bzw. Standard?
Die Karte sollte unter 2 MiB Kapazität haben und mit FAT16 formatiert 
sein.

> Die busy LED gibt zwar auch was von sich,

Das zeigt doch schonmal, dass das Modul versucht, die Karte zu lesen.

> aber egal ob ich resete oder
> die vorwärts Tase betägte - es sieht alles gleich aus.
> Was mache ich falsch??

Das weiß ich nicht. Hast Du auch diesen Beitrag gelesen?
Beitrag "Re: Arduino mit WTV020-M01"

...

von Markus P. (Gast)


Lesenswert?

Ich hab jetzt nochmal mein zweites Modul, was auf dem Breadboard steckt 
probiert. Entferne ich die Brücke von GND nach SD-Card Pin 6, dann 
spielt das Modul nichts ab. Die Busy - LED tut zwar was, aber mehr 
nicht.

Außerdem reicht es schon mit einem offenen Draht am Reset-Pin 
rumzufingern und das Modul tut irgendwas (resetet sich ?) , zumindest 
flackert die Busy-LED bzw. bleibt für 17 Sekunden dauerhaft an. Drückt 
man dann Play oder Titel vor oder rück, dann leuchtet die Busy-LED 
wieder für 17 Sekunden.

Meinem Modul tut die Masse-Brücke jedenfalls gut.

von funztnet (Gast)


Lesenswert?

ich habe den wtv020 m01... und er funktioniert grundsätzlich allerdings 
bricht das modul den ton nach ca 1-2 sekunde wieder ab(unterschiedlich) 
bitte bitte bitte kann mir irgendjemand sagen was ich falsch mache

von Markus P (Gast)


Lesenswert?

das passiert auch, wenn der Pegel des files zu hoch ist. Nutze mal das 
Java-Tool von weiter oben, da wird der Pegel automatisch reduziert.

von Jonas (Gast)


Lesenswert?

Hallo Markus,

da ich ebenfalls mit den WTV20 Modulen arbeiten möchte (allerdings an 
einem LPC1769)und mit der im Internet verfügbaren Dokumentation nicht 
wirklich zurecht komme, bin ich gerade dabei deinen Code zu portieren. 
Da ich mit einem Adruino keinerlei Erfahrung habe, wollte ich kurz ein 
paar Punkte gegen prüfen. Wenn ich das richtig sehe nutzt ihr die SCL 
und SDA Anschlüsse, sprich I2C allerdings kann ich im Code weder eine 
Adresse sehen noch glaube ich das die Module BUS fähig sind... Ist das 
soweit Korrekt?

von Jonas (Gast)


Lesenswert?

Hallo nochmal,

die Frage hat sich soeben geklärt..Das ist ja ein eigenes Protokoll.

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.