Forum: Mikrocontroller und Digitale Elektronik Audio DAC Grundlagen


von Oli H. (lavalu)


Lesenswert?

Hi Leute,

ich hab da mal eine grundlegende Frage um Daten von einem PIC18F87 zu 
einem WM8711B zu schaufeln?
Der PIC ist mit 40MHz getaktet und die zentrale Frage ist ob ich damit 
eine mehrspurige Audiowiedergabe realisieren kann.
Erreichen will ich das indem ich die zusammenaddierten PCM Werte aus 
Wavdateien zum DAC sende.
Das Wav Format ist 48kHz/16Bit/Stereo, so dass ich ca. alle 20,8µS ein 
Sample mit 2 x 16Bit zum DAC senden muss. Der DAC seinerseits wird mit 
einem eigenen Quarz betrieben und erzeugt dadurch seinen eigenen Takt um 
die Daten zu verarbeiten.
Meine Frage nun: Wenn ich dem DAC Daten im Slave Mode schicken will, 
muss dann die Bit Clock die der PIC zum sender der Daten generiert exakt 
an die Samplerate und den DAC Takt angepasst sein oder kann ich mir die 
Frequenz für die Bit Clock aussuchen und sende dann alle 20,8µS neue PCM 
Werte so zum DAC?

Ich denke mal das der DAC nicht anders ist als die meisten, wer aber 
nochmal nachlesen will kann dazu ab Seite 20 im Datenblatt infos finden, 
ich lese die Antwort auf meine Frage da jedoch nicht raus. 
Wahrscheinlich mangels Erfahrung mit DAC's.

Datenblatt:
http://www.wolfsonmicro.com/documents/uploads/data_sheets/en/WM8711BL.pdf

Vielen Dank

von egon (Gast)


Lesenswert?

moin,

ich verwende zwar nicht wm8711 sondern den wm8762 mit einem pic32...
bei mir ist die bclk synchron zur mclk... aber glaub das muss nicht 
unbedingt sein...
wichtiger ist dort die synchronitaet von mclk und daclrc... ist schon 
bisschen her als ich die ansteuerung gemacht hab beim 8762 ist es wenn 
ich mich richtig erinner so wenn die mclk und daclrc 8 clks auseinander 
laufen muted der dac...

als kleiner tip... wenn der PIC18F87 pwm unterstützt wuerd ich die mclk 
fuer den dac damit erzeugen ... sofern du nicht zwingend die 100% 
richtige samplerate brauchst...
der vorteil ist das du eben mal ohne gross was zu loeten die samplerate 
aendern kannst...

von Oli H. (lavalu)


Lesenswert?

Hi Egon,

danke für die Antwort. Grundsätzlich benötige ich keine genaue 
samplerate, ich bekomme allerdings zeitliche Probleme wenn ich die bclk 
so genau einhalten muss. Vielleicht denke ich aber auch zu umständlich.

Wenn ich die Daten im Slave mode senden will, muss ich ja letztlich die 
Takte der mclk zählen um herauszubekommen wann die nächste 
Sample-Sendung erforderlich ist. Aber alleine das zählen stellt den PIC 
vor große zeitliche Probleme. Wenn PIC und DAC synchron laufen kann ich 
dafür ja einen Timer Interrupt verwenden, aber dann hab ich immer noch 
das Problem das ich die Bit Clock erzeugen muss. evtl mit SPI?

Irgednwie ist mir das Grundprinzip noch nicht ganz klar!

von egon (Gast)


Lesenswert?

mir sagt der slave mode gerade nicht so viel... das hat der 8762 
anscheinend nicht... leider auch keine zeit das datenblatt zu lesen weil 
bin auf der arbeit ;)

ich machs so das ich die master clock per pmw erzeuge...
dann starte ich einen timer der auf mit einer frequenz laeuft von 2* 
samplerate... der timer loest einen irq aus...

im irq mach ich folgendes...
-ich toggle auf daclrc
-anschliessend schick ich 16 bits aus einem double buffer via spi 
raus...
-dann muss natuerlich der buffer noch gefuellt werden

das ganze funktioniert aber nur mit dem left justified format...

da muss man eigentlich keine takte zaehlen... voraussetzung ist 
natuerlich das du via pwm den takt erzeugst...

von Oli H. (lavalu)


Lesenswert?

Im Slave Mode werden die Bit und Word Clock vom MCU erzeugt und im 
Master Mode vom DAC. Deine Methode nutzt demnach auch den Slave Mode.

Ich werde mir den PWM mal nochmal etwas genauer ansehen und mal ein 
wenig rechnen.

Danke für die zügige Hilfe

von Frank K. (fchk)


Lesenswert?

Oli Holli schrieb:
> Hi Leute,
>
> ich hab da mal eine grundlegende Frage um Daten von einem PIC18F87 zu
> einem WM8711B zu schaufeln?
> Der PIC ist mit 40MHz getaktet und die zentrale Frage ist ob ich damit
> eine mehrspurige Audiowiedergabe realisieren kann.

Warum nimmst Du nicht den dsPIC33FJ128MC804? Da ist ein Stereo Audio DAC 
bereits eingebaut, der auch per DMA bedient werden kann.

fchk

von Oli H. (lavalu)


Lesenswert?

Da geh ich doch glatt mal eben nachsehen ! Moooooooment

von egon (Gast)


Angehängte Dateien:

Lesenswert?

anbei findest du meine ansteuerung auf dem pic32 (ist auch nicht 
kompilierbar egal soll nur das prinzip zeigen)... ich benutz da die plib 
vielleicht bringt dir das ja was...

ich weiss die ansteuerung ist nicht perfekt kost bisschen rechenzeit 
aber bei mir kams nicht so drauf an ;)

von Oli H. (lavalu)


Lesenswert?

@Frank

ich geb zu stünde ich am Anfang des Projektes wäre der dsPIC33FJ128MC804 
und seine Brüder sehr verlockend, nur leider sind schon hunderte von 
anderen Routinen im jetzigen Projekt am laufen. Das ließe sich zwar 
größtenteils umportieren, aber ich scheue den Aufwand.

Trotzdem danke

@egon

danke für den Code, der is gleich nach dem PWM dran ;-)

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.