Forum: Mikrocontroller und Digitale Elektronik Verzweifeln am WM8731


von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

die Daten kommen scheinbar alle richtig an, es kommt aber kein Murks aus 
dem Ding raus.
I2S, 16-Bit Daten, 32kHz Abtastrate.
Plot von Oszi ist im Anhang.
Ich vermute, es liegt an der Konfiguration von dem CODEC.
Ich habe schon alles durchprobiert, weiß leider nicht wie der aktuelle 
Stand der Konfiguration ist.
Wer mit dem Ding gearbeitet hat, könnt ihr mit bitte die richtigen 
Einstellungen verraten?
I2C funktioniert einwandfrei.

Danke schön.

Gruß Alex

von TuxDerFuchs (Gast)


Lesenswert?

Kontext????

von Alex (Gast)


Lesenswert?

Funktioniert leider immer noch nicht.
Was fehlt um helfen zu können?
Die Sounddaten sieht man im ersten Post.

I2C sieht momentan so aus:
1
Codec_SendData (0x0F, 0x00); // Reset
2
Delayms (1000);
3
Codec_SendData (0x02, 0x3F); // LHPVOL 
4
Delayms (5);
5
Codec_SendData (0x03, 0x3F); // RHPVOL
6
Delayms (5);
7
Codec_SendData (0x07, 0x02); // Format I2S
8
Delayms (5);
9
Codec_SendData (0x09, 0x01); // Activate

Geschickt wird so:
1
uint8 Codec_SendData(uint8 regAddr, uint16 data)
2
{
3
  uint8 temp;
4
  
5
  temp = CodecI2CM_I2CMasterSendStart(0x1A, 0x00); 
6
  if(temp == CodecI2CM_I2C_MSTR_NO_ERROR)
7
  {
8
    temp = CodecI2CM_I2CMasterWriteByte(((regAddr << 0x01) | (HI8(data) & 0x01))); // (HI8(data) & 0x01
9
    
10
    if(temp == CodecI2CM_I2C_MSTR_NO_ERROR)
11
    {
12
      temp = CodecI2CM_I2CMasterWriteByte(LO8(data));
13
      
14
      if(temp == CodecI2CM_I2C_MSTR_NO_ERROR)
15
      {
16
        temp = CodecI2CM_I2CMasterSendStop();
17
      }
18
    }
19
  }
20
21
  return temp;
22
}

Am Oszilloscope kann man sehen, dass die Daten am i2c auch richtig sind.
Die Hardware funktioniert, das ist ein Evalboard, der mit 
Auslieferungsfw gerade wieder funktioniert hat.
Danke

von Alex (Gast)



Lesenswert?

Sorry Leute, will nicht nerven.
Vielleicht wirde jemand was bemerken.
16 bit, 32kHz Sound soll ausgegeben werden.
Bild 1 Zeigt WordSelect. Frequenz ist 16kHz (lauf Datenblatt muss es 
1/2fs sein. 32/2 = 16khz. Passt also?).
In Nächten Bild: violett CLK, Blau WordSelect, Geld Daten.
Nächtes Bild ist das Gleiche wie Bild 2, nur herangezoomt und mit den 
Cursors versehen.
Das letzte Bild ist Masterclock, welches vom uC dem Codec generiert 
wird. Dieser beträgt ca. 12MHz.

Die Daten, die abgespielt werden sollen, ist eine einfache Sinuskurve, 
die im Timer Interrupt (passend zu sample frequenz) in den Register rein 
geschoben werden.

Nun zur I2C Konfiguration:
Ich habe das Datenblatt wirklich sehr oft gelesen und bin zum Ergebnis 
gekommen, dass diese Einstellung richtig ist:
1
CodecI2CM_Start(); 
2
Delayms (10);
3
Codec_SendData (0x1E, 0x00); // Reset
4
Delayms (1000);
5
Codec_SendData (0x04, 0x3F); //
6
Delayms (5);
7
Codec_SendData (0x06, 0x3F); //
8
Delayms (5);
9
Codec_SendData (0x0E, 0x02);
10
Delayms (5);
11
Codec_SendData (0x10, 0x18);
12
Delayms (5);
13
Codec_SendData (0x12, 0x01);

Geschickt werden diese jetzt so:
1
uint8 Codec_SendData(uint8 regAddr, uint8 data)
2
{
3
  uint8 temp;
4
  
5
  temp = CodecI2CM_I2CMasterSendStart(0x1A, 0x00); 
6
  if(temp == CodecI2CM_I2C_MSTR_NO_ERROR)
7
  {
8
    temp = CodecI2CM_I2CMasterWriteByte(regAddr); // (HI8(data) & 0x01
9
    
10
    if(temp == CodecI2CM_I2C_MSTR_NO_ERROR)
11
    {
12
      temp = CodecI2CM_I2CMasterWriteByte(data);
13
      
14
      if(temp == CodecI2CM_I2C_MSTR_NO_ERROR)
15
      {
16
        temp = CodecI2CM_I2CMasterSendStop();
17
      }
18
    }
19
  }
20
21
  return temp;
22
}

Datenblatt vom Codec:
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjA9Mb9vqXMAhWIDiwKHbfrCSIQFggdMAA&url=http%3A%2F%2Fwww.cs.columbia.edu%2F~sedwards%2Fclasses%2F2008%2F4840%2FWolfson-WM8731-audio-CODEC.pdf&usg=AFQjCNGmWZbgqNnAMErpVnzh4kOPdg2J_Q&sig2=0XkDRyGFcpa5WK9NELUWDw

Wäre gut, wenn Jemand einen Tipp geben könnte.
Der uC und die Plattform, wo ich den programmiere ist relativ egal, es 
geht hier ums funktionsprinzip von Codec und nicht "wie mache ich die 
und die Funktion bei meinem uC".
Sitze da schon über 2 Tage dran, und es kommt langsam die Wut auf  :(

Danke

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.