kloksignaal usb geluidskaart

Eduard2

Golden Member

Beste forumleden,

Wellicht een simpele vraag maar ik vind hiervoor geen antwoord:
"Heeft een geluidskaart zijn eigen klokgenerator die de snelheid waarmee de DAC de samples krijgt bepaalt?"
Op oude pci geluidskaarten zie je een kristal tussen de ic's.
Bij een recente usb kaart zie je dat niet. Met MEMS technieken kan een piepkleine stabiele oscillator in de chip worden verstopt.

Aanleiding tot mijn vraag is een eigen knutselwerk. Mijn microcontroller ontvangt streaming audio van internet. Een in C geschreven programma bewerkt die stream. Via een fifo buffer gaat die vervolgens naar de geluidskaart. De grootte van die fifo buffer bedraagt 1 MByte. De eerste uren werkt dat goed.
Na 8 à 10 uur begint het geluid te hakkelen. Wellicht fifo overflow.

De fifo is een buffer tussen de aanvoer via internet en de uitvoer via de usb geluidskaart. Als de uitvoer snelheid bepaald wordt door een interne oscillator in de kaart dan zal er altijd een klein verschil bestaan tussen de snelheden van aan- en afvoer. Na voldoende tijd zal de fifo dus zeker onder- of overflow geven. Komt dit probleem bekend voor? Bestaat er een handshake mechanisme om vol of leeg raken van de fifo te voorkomen?

Alvast bedankt voor het meedenken,

Eduard

Twee verschillende kristallen zullen nooit exact even hard lopen, dus je zult altijd een mechanisme moeten voorzien om verschillen op te vangen. Je kunt proberen om het buffer gemiddeld altijd half of driekwart vol te houden, door af en toe een sample over te slaan of dubbel te gebruiken als je buffer te vol of te leeg raakt. Een andere methode is om de samplerate en heel klein beetje te veranderen, en de samples dus iets sneller of langzamer af te spelen. Als je dat zeer subtiel doet, hoor je dat echt niet.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Arco

Special Member

Zeker met aanvoer via internet moet je een veel grotere buffer hebben. (internet is nu eenmaal niet zo'n betrouwbare aanvoer... ;) )
In bijv. auto CD spelers zit meestal een buffer van 20sec of meer om bij overslaan als je over een bult rijdt op te kunnen vangen...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

de USB SPEC eist dat je een ZEER nauwkeurige 12MHz (of een veelvoud daarvan, meestal 48MHz) klok hebt. Die spec haal je niet zomaar met een budget kristal.

Tegenwoordig zijn er steeds meer chips die "crystal-less USB" doen. Die halen de "referentie klok" uit de USB communicatie van het host. Iets met een PLL. Ook niet eenvoudig, maar wel goedkoper dan een kristal zodra je eenmaal de technologie hebt om het op je chip te integreren.

Als je die USB klok eenmaal hebt, kan je dat makkelijk door 1000 delen om 48kHz voor de sample rate te maken.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Eduard2

Golden Member

Allereerst iedereen bedankt voor het vlugge antwoord.

Zekerheid heb ik nog niet maar ik vermoed dat output klok via een oscillator en niet via usb wordt opgewekt. Bij de eerste testen ging de output in de fout na 6 tot 8 uur luisteren. Met een andere usb kaart van hetzelfde type duurde dat nu 19 uur. Ik ga de test herhalen en bekijken of die langere tijd een vast gegeven is voor de tweede kaart. Als dat zo is zal er wel een klok oscillator in de usb kaart zitten. Alhoewel de kaart in een transparante behuizing zit wordt je van de visuele inspectie niet wijzer. Behalve een paar R en C zit alles in één epoxy druppel vervat. Op snelheid van de twee klokken kan ik niet inwerken maar heel sporadisch een sample droppen als de fifo te vol raakt dat moet lukken.

Vriendelijke groeten,

Eduard