Hallo,

Ik zou graag een DAC met I²S ingang (audio, dus niet I²C) willen sturen mbv. een MCU die de audio uit RAM haalt.

Op het internet vind ik wel wat info over I²S met niet hetgeen ik zoek. Heeft iemand hier ervaring mee?

Concreet zijn er me 2 dingen niet duidelijk:
1) Hoe sluit ik de I²S poort op een MCU aan?
2) En hoe kan ik audio van uit de PC (wav,...) omzetten zodat de ADC het verstaat?

Groeten,
Johan

Het I2S signaal voldoet aan een protocol. Door middel van een programma wat je in de MCU stopt kan je het I2S signaal decoderen. Het programma moet aan de specs van I2S voldoen.

Een .WAV file kan je in verschillende formaten aangeleverd krijgen, 8 Bit / 16 Bit 11,025 khz 22.050 khz 44,100 khz, 48.000 khz etc. etc. Ligt dus aan de ADC hoe je het erin wil krijgen. Maar een MCU die een en ander voor je regelt lijkt me ook hier wel nodig.

De samplerate (bandbreete,resolutie) van de ADC/DAC is wel van belang voor het opslaan van een Audiosignaal.

Al met al niet eenvoudig. Google eens op audio DAC/ADC oid.

GR Richard.

Het I2S formaat wordt wel beschreven in de datasheet van de diverse audio codecs en anders pak je even de datasheet van een DSP erbij.
Zowieso is een DSP beter geschikt voor dit soort werk maar indien je je sample frequentie niet te hoog maakt moet het met een snelle micro ook wel lukken.
En mocht je geen succes hebben, kun je altijd nog gaan bloemschikken :-D

Bedankt voor jullie antwoorden

in vraag 2 stond: ADC, dit moest natuurlijk zijn: DAC.

Ik ga eens bekijken hoe een .WAV bestand is opgebouwd en dit vergelijken met het I²S protocol. Mijn eerste snelle indruk is dat dit wel op elkaar lijkt en dus gemakkelijk omgezet kan worden (op PC, vooralleer de audio in de toepassing geladen wordt).

Wat de DSP betreft: Er moet enkel audio met een klein aantal kb/s uit ram gehaald worden en rechtstreeks naar de DAC gevoerd. Er moeten geen real-time berekeningen op de data gedaan worden, dus zal een MCU deze taak gemakkelijk aan kunnen.

Johan.

hoi,

als het simpel geluid is (voice quality) dan kun je ook prima werken met een simpele r-2r 8bits DAC op een poort van de MCU. Klinkt nog best goed vind ik.

download dit ouwe stukkie maar eens:

http://www.awe.com/mark/bin/mp219b.zip

en lees hardware.doc!

8 bit rules!

Da fripster

Leuke voice codecs zijn deze:

AD73322 en AD74111

opgelet met wav files. dat verhaal klopt alleen als de wav file PCM ge-encodeerde data bevat. er zijn wel honderden soorten WAV files. er is een veld in de WAV header wat aangeeft welk soort data erin ligt opgeslagen.

PCM data kan je vrij simpel naar een I2S signaal omzetten. je zult er wel een straffe cpu voor moeten hebben als je het wilt bitbangen. zoek je liever een dsp met een i2s interface. dan kan je data gewon inde fifo's smijten en is er een harde blok logica aanwezig die daar i2s van maakt. Je clock op i2s moet constant zijn en dit betekent dat je programma compleet interurpt driven zal moeten zijn. bovendien zal je zoiets in assembler moeten schrijven en optimaliseren naar constante runtime. dergelijke tijd-constante en tijd-kritische routines in een hogere programmeertaal maken is bijna onmogelijk omdat je geen controle hebt over wat de compiler er van bakt.

Er zijn dus twee mogelijkheden:

1) Ofwel werk ik NIET met I²S en kies ik voor een eenvoudige DAC (vb. MCP4921) die ik aan een lage bitrate aanstuur met een MCU (bijvoorbeeld via SPI ipv I²S).

2) Ofwel toch I²S en dan best in combinatie met een DSP vb. dsPIC30F5010). I²S in combinatie met een MCU zal slechts aan een lage bitrate kunnen en dan is het dom om het supersnelle I²S te gebruiken.

Aangezien de eerste keuze eigenlijk super simpel en goedkoop is, zal ik waarschijnlijk hiervoor kiezen. Geluidskwaliteit is hier niet erg belangrijk (het gaat om geluidsmodules voor een modeltreinbaan, dus geen HiFi)

Keuze 2 is natuurlijk een grotere uitdaging, maar ja...

Bedankt voor jullie hulp!