Forum: Mikrocontroller und Digitale Elektronik Esp32 und PCM510x Mute Problem


von Valentin (rc_bastler)



Lesenswert?

Hallo,
ich versuche seit einiger Zeit von einem ESP32 Musik abzuspielen. Ich 
habe den oben gezeigten ESP32 der per 5V per Step Down betrieben wird. 
Leider sind einige Pins belegt für meine Led-Steuerung. Ich habe einen 
PCM510x wie auf dem Bild zu sehen. Nun habe ich BCK an D33 LRCK an D14 
und Din an D32. Außerdem habe ich VIN und GND direkt an den ESP32 3,3v 
und GND angeschlossen. Dann mit unterschiedlichen Codes versucht einen 
Testton zu erzeugen und per AUX auszugeben. Da immer Stille zu hören 
war, habe ich gelesen, dass manche dieser Boards gemuted sind. Also habe 
ich XSMT auf 3,3v und auch einmal auf GND überbrückt in beiden Fällen 
ist weiterhin nichts zu hören. Da ich mich nicht so gut damit auskenne 
und gerne die Musik aus meiner SD karte abspielen würde, wäre es super, 
wenn hier jemand mir weiter helfen könnte.
Viele Grüße
Valentin
P.S.
1
Hier folgt der zuletzt verwendete Code:
2
#include <driver/i2s.h>
3
#include <math.h>
4
5
#define I2S_BCK  33
6
#define I2S_LCK  14  
7
#define I2S_DIN  32
8
9
#define SAMPLE_RATE 44100
10
#define AMPLITUDE   16000  
11
12
void setup() {
13
  Serial.begin(115200);
14
  delay(1000);
15
  
16
  i2s_config_t i2s_config = {
17
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
18
    .sample_rate = SAMPLE_RATE,
19
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
20
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
21
    .communication_format = I2S_COMM_FORMAT_STAND_I2S,  
22
    .intr_alloc_flags = 0,
23
    .dma_buf_count = 8,
24
    .dma_buf_len = 64,
25
    .use_apll = false,
26
    .tx_desc_auto_clear = true,
27
    .fixed_mclk = 0
28
  };
29
30
  i2s_pin_config_t pin_config = {
31
    .bck_io_num = I2S_BCK,
32
    .ws_io_num  = I2S_LCK,
33
    .data_out_num = I2S_DIN,
34
    .data_in_num = -1
35
  };
36
37
  esp_err_t err;
38
  err = i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
39
  Serial.printf("i2s_driver_install: %d\n", err);
40
  
41
  err = i2s_set_pin(I2S_NUM_0, &pin_config);
42
  Serial.printf("i2s_set_pin: %d\n", err);
43
  
44
  err = i2s_set_clk(I2S_NUM_0, SAMPLE_RATE, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_STEREO);
45
  Serial.printf("i2s_set_clk: %d\n", err);
46
  
47
  Serial.println("PCM510x Testton 440Hz startet...");
48
}
49
50
void loop() {
51
  static float phase = 0;
52
  int16_t sample[2];
53
  
54
  float s = sin(phase) * AMPLITUDE;
55
  sample[0] = sample[1] = (int16_t)s;
56
  
57
  size_t bytes_written;
58
  i2s_write(I2S_NUM_0, sample, sizeof(sample), &bytes_written, portMAX_DELAY);
59
  
60
  phase += 2.0 * M_PI * 440.0 / SAMPLE_RATE;
61
  if (phase > 2.0 * M_PI) phase -= 2.0 * M_PI;
62
}

von Harald K. (kirnbichler)


Lesenswert?

Valentin schrieb:
> Da immer Stille zu hören
> war, habe ich gelesen, dass manche dieser Boards gemuted sind.

Was spricht dagegen, Dir das Datenblatt des DACs anzusehen? Der ist das 
IC auf Deinem Board ...


Ansonsten könntest Du Deinen Code mal mit dem vergleichen, was in 
https://github.com/pschatzmann/arduino-audio-driver gemacht wird (das 
ist halt für Arduino, sollte aber trotzdem lesbar sein).

Deine Signale hast Du Dir auch mal mit einem Logikanalysator bzw. 
Oszilloskop angesehen?

von Alexander (alecxs)


Lesenswert?

Probiers mal damit. Pins setzen über
1
#define WCLK_PIN 14
2
#define BCLK_PIN 33
3
#define DOUT_PIN 32
4
out->SetPinout(BCLK_PIN, WCLK_PIN, DOUT_PIN);
https://github.com/earlephilhower/ESP8266Audio/blob/master/examples/PlayRTTTLToI2SDAC/PlayRTTTLToI2SDAC.ino

PCM5102 VIN mit 5V extern versorgen (nicht über ESP32 3V3 Pin)

https://forum.pjrc.com/index.php?threads/problem-with-pcm5102a.76661

: Bearbeitet durch User
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.