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