Ik ben momenteel aan het spelen met de Altera Quartus II Web edition IDE. Morgen zal er naar alle waarschijnlijkheid een developmentkitje in de bus komen te liggen voor de Max II CPLD. Deze wil ik gebruiken om voor mijn voorversterker diverse digitale spullen aan te sturen:
- via een serieel protocol de volume regeling en analoge bron keuze aansturen
- via een LED driver een hele berg ledjes (kan ook via losse IO's, maar dan worden grijstinten wat lastiger)
- een aantal knopjes
- een rotary encoder
- eventueel IR ontvanger
- SPDIF, I2S en DSD (allemaal twee ingangen) switchen en naar de DAC sturen.
- wat relais schakelen voor power management
Uiteindelijk moet het er dan ongeveer zo uitzien:

Wat ik nu heel graag wil, is de samplerate weergeven van het ontvangen digitale signaal. Ik vind het verder niet erg interessant wat de data van dat signaal is, samplerate is van belang. Bij DSD zijn we snel klaar, want dat is altijd 2.8 Mhz (in ieder geval bij consumer audio), en dat wil ik verder ook niet weergeven. I2S heeft een L/R clock signaal welk als het goed is met dubbele samplerate op en neer flipt, dus opgaande flanken zijn netjes op audio sample rate. Met de 50 Mhz reference klok op het development bordje kan ik prima kloktikken tellen en aan de hand van het getelde aantal kun je makkelijk zeggen wat de sample rate is (binnen marges natuurlijk, maar dat is goed genoeg).
Bij SPDIF is het echter een heel ander verhaal. Dit signaal heeft klok en het signaal gemultiplexed door middel van Bi-Phase mask code. Nu geldt hier dat een opvolging van 0 en 1 met maximaal 64*sample rate (32 bits per frame, twee kanalen) gaat (alleen enen) en minimaal 32 keer sample rate (alleen nullen). Dit komt in de praktijk echter nooit voor. Wat ik nu zou kunnen doen is het aantal ticks tellen van de snelste of langzaamste transitie, echter kom ik hier in de problemen als ik onderscheid wil gaan maken tussen alles hoger dan 88.2 Khz. Daar komen de delers namelijk netjes op de zelfde getallen uit (voor 88.2 en 96, 176.4 en 192). Daar heb ik dus weinig aan helaas. Ik zoek dus een andere eenvoudige methode om dit wel voor elkaar te krijgen. Misschien kan ik iets met de preamble doen. Deze heeft een lengte van 4 bits en bevat geen biphase mark code. De preamble bevat altijd een reeks van drie eentjes, dus drie snelle transities achter elkaar, iets wat eigenlijk niet zou mogen. Ook bevat deze altijd drie nullen. Het is misschien een idee om juist dit te detecteren en te tellen.
Ik hoop dat jullie misschien nog wat andere ideeën hebben? Het moet vooral niet te complex gaan worden
- via een serieel protocol de volume regeling en analoge bron keuze aansturen
- via een LED driver een hele berg ledjes (kan ook via losse IO's, maar dan worden grijstinten wat lastiger)
- een aantal knopjes
- een rotary encoder
- eventueel IR ontvanger
- SPDIF, I2S en DSD (allemaal twee ingangen) switchen en naar de DAC sturen.
- wat relais schakelen voor power management
Uiteindelijk moet het er dan ongeveer zo uitzien:

Wat ik nu heel graag wil, is de samplerate weergeven van het ontvangen digitale signaal. Ik vind het verder niet erg interessant wat de data van dat signaal is, samplerate is van belang. Bij DSD zijn we snel klaar, want dat is altijd 2.8 Mhz (in ieder geval bij consumer audio), en dat wil ik verder ook niet weergeven. I2S heeft een L/R clock signaal welk als het goed is met dubbele samplerate op en neer flipt, dus opgaande flanken zijn netjes op audio sample rate. Met de 50 Mhz reference klok op het development bordje kan ik prima kloktikken tellen en aan de hand van het getelde aantal kun je makkelijk zeggen wat de sample rate is (binnen marges natuurlijk, maar dat is goed genoeg).
Bij SPDIF is het echter een heel ander verhaal. Dit signaal heeft klok en het signaal gemultiplexed door middel van Bi-Phase mask code. Nu geldt hier dat een opvolging van 0 en 1 met maximaal 64*sample rate (32 bits per frame, twee kanalen) gaat (alleen enen) en minimaal 32 keer sample rate (alleen nullen). Dit komt in de praktijk echter nooit voor. Wat ik nu zou kunnen doen is het aantal ticks tellen van de snelste of langzaamste transitie, echter kom ik hier in de problemen als ik onderscheid wil gaan maken tussen alles hoger dan 88.2 Khz. Daar komen de delers namelijk netjes op de zelfde getallen uit (voor 88.2 en 96, 176.4 en 192). Daar heb ik dus weinig aan helaas. Ik zoek dus een andere eenvoudige methode om dit wel voor elkaar te krijgen. Misschien kan ik iets met de preamble doen. Deze heeft een lengte van 4 bits en bevat geen biphase mark code. De preamble bevat altijd een reeks van drie eentjes, dus drie snelle transities achter elkaar, iets wat eigenlijk niet zou mogen. Ook bevat deze altijd drie nullen. Het is misschien een idee om juist dit te detecteren en te tellen.
Ik hoop dat jullie misschien nog wat andere ideeën hebben? Het moet vooral niet te complex gaan worden
Do diamonds shine on the dark side of the moon :?