Vintage DAC för RaspberryPi ljud (4 / 6 steg)
Steg 4:.. .adding ett I2S converter...
Titta på de tekniska uppgiftsbladen igen märkte jag att I2S utgång (faktiskt jag tittar på chip dokumentationen används i HifiBerry projektet vars drivrutin som jag använder, chip är en pcm5102) av RPI är lite annorlunda från vad oversampler chip förväntar sig. "Standard" I2S signal förseningar i allmänhet data en klockan bakom LR signalen. Hur man kompensera detta?
Det finns två sätt att ta itu med detta:
1. programmet en kernel-drivrutin som inte försenar data. Pcm5102 föraren anger uttryckligen data förseningen till 1 i TXC_A register över motorns BCMs PCM (dokumentation här sida 119 +). Ändra detta till 0 ska göra det. Men jag gillar inte att bygga en RPI kärna nu...
2. bygga några vintage logik att göra det, YEAH det är så jag gillar det :)
Här är en schematisk...
Tanken är att dröjsmål efter 1 och LR signalera genom 2, detta flyttar data fram i tid (relativ till LR signalen) så att de radas upp som ville. Det gör behöver vi 3 x D-Flipflops och en inverter för klockan. Jag hittade 2 x 4035 och 4001 i min vintage chip samling, dessa kommer att (kan också vara bygga med 7474 / 74174 och vissa andra Internet-anslutningsdelning).
4035 är en mångsidig 4 bitars skiftregister (detta har 4 flip-flops i en linje) 4001 är en 4 x eller som fungerar som omriktaren sedan ingångarna är tätt tillsammans.
Jag använder en 4035 för att flytta data och en annan att skifta LR. Utgångar Q1-Q4 visar indata försenas med 1-4 klockor (input skiftas genom register, det är att göra SKIFT register). Så oversampler får sin nya data från Q1 data Växelreglage och LR från Q2 LR Växelreglage. Enkelt är det inte? Oversampler får inverterad klockan (form av fördröjning av 1/2 klockcykel) Detta är nödvändigt eftersom shifter behöver lite tid att stämpla in data och ger en stabil produktion.
Bilderna visar ursprungliga och fördröjd LR signal, klocksignal, analog utgång med sprickbildning.
Resultatet...
Ja det låter som musik.
Fortfarande lite cracky (~ 50Hz tock tock) - kan vara en klocka drift, undersöka senare...
Hur låter det?
Lite högt runt mids och höjder - hörlur, bygga i hörlursförstärkare är lite för högt för min smak och mina hörlurar. Utreda...
Sänkte HP volymen, nämnde jag att PCB har ett utrymme för en volym pott. Jag infogade 4 motstånd som Sänk volymen lite.
Betoningen?
Som i sig är en gammal skola hacka, för att övervinna begränsningar av gamla 14-bitars DAC. Det fungerar lite som Dolby brusreducering, när du registrerar du Lägg till brus, när du spelar du bort det och överföring bullret försvinner med det - något liknande.
Skär av pin 36 av TA9200 och anslutna nu öppna spår till en växel till GND/5V så jag kan växla manuellt. Den förvalda inställningen var bättre när den hacka en, så det bör gå till 5V att avaktivera betoning. Växeln växlar en transistor som i avsnittet mute men här förändras svaret från utdatafiltret genom att vrida av/på delar av nätverkets filter - knepigt analog kretsdesign.
Sprakande???
Jag tror att sprickorna kommer från en klocka drift. RPi skjuter ut data med hans 44,1 kHz * 32 bit klocka, oversampler processer som med sin egen klocka (också 44,1 kHz * 32 (* 12 ger 16,9 MHz)) både klocka drift bort tills en data lite hopp till det är grannen lite effektivt trappa upp av 2 som producerar toppen i ett enda prov.
Lösning 1 - pull data ur RPi med över samplers klocka. Detta skulle göra DAC och OS den ledar-tar tid. Det skulle innebära att byta drivrutinen modul (eller använda en annan)
Lösning 2 - bli galen hårdvara hacka och konstruera en klocka multiplikator. Detta kunde multi data klockan (44100 * 2 * 16 per sekund) vid 6 eller 12 att producera klockan för översampling kretsen. Detta kommer att eliminera understödja tar tid och deras kommer att vara ingenting att glida bort eftersom alla klockor härrör från en gemensam klocka.
Ett sätt att uppnå detta skulle kunna vara att använda en fördröjningslinje. En annan innebär att PLLs - nytt för mig också. Jag tänker...