Bonjour,
J'ai trouvé un ADC (codec chez NXP) datasheet en ci-joint.
SGTL5000(1).pdf (3.5 MB)
Et un code en Arduino (que j'ai trouvé sr le site PJRC). J'aimerai savoir comment il fonctionne (logiciellement) le I2S. Je n'ai pas encore le composant et je souhaiterai savoir comment il fonctionne ce composant. Merci par avance de votre participation.
snap.zip (26.4 KB)
Bonjour
Spécification du Bus I2S trouvée en qq secondes avec un moteur de recherche ....
https://www.sparkfun.com/datasheets/BreakoutBoards/I2SBUS.pdf
le maître doit fournir 2 horloges, les données passent en série synchrone sur un fil
A mettre en oeuvre avec un microncontrolleur doté d'une interface I2S, par exemple ESP32
Il a été question ici de réalisations base d'I2S sur d"ESP32 :
en entrée I2S : micro I2S avec conversion A/N intégrée) (chercher "sonometre I2S")
en sortie I2S: avec un convertisseur N/A et ampli BF intégré (chercher "Web radio I2S")
....ça pourra peut être aider à donner une idée du principe de fonctionnement avant de se frotter au SGTL5000
Merci pour le lien, je pense que j'ai déjà une petite idée sur le matériel mais c'est plutôt le fonctionnement logiciel qui m'intéresse (et on a un exemple de code sur le SNAP).
Désolé mais souvent c'est lié avec le matériel avant de programmer.
Si je vous dis que le gain maxi de ce composant (avec une entrée en MIC) est de 40+22.5+2x6+2x12 = 98.5 dB ça vous parait normal ? Je récupère les données via le bus I2S et un µP. A mon avis ce n'est pas normal de mélanger le gain analogique avec le gain numérique.
sur l'image on voit que le gain côté entrées est analogique , visible en deux blocs distincts, gain global et gain spécifique à l'entrée micro en amont de la conversion analogique/numérique repérée ADC
côté sortie on voit en vert un atténuateur (numérique) avant conversion Numérique/Analogique (DAC) puis un gain analogique réglable avant sortie Ecouteurs
analyse du code proposé .... ça demande du temps disponible !!
Donc le gain maxi en analogique est de 62.5 dB et je récupère cette valeur par un µP via le bus I2S ? Mais je me pose la question puisque après ADC on a les valeurs numériques qu'est ce qui m'empêche de rajouter +6dB (Mix) ou +12 dB (AVC) puisqu'on additionne les valeurs numériques ensemble ?
62,5 dB max pour le signal appliqué sur l'entrée numérique
ensuite il y a effectivement le bloc numérique 'Audio Processing' ...à découvrir.... en s'assurant que ce qui sort de ce bloc de traitement audio peut être renvoyé en I2S vers le microcontrolleur (c'est peut être le but) ou uniquement vers les sorties Ecouteurs et Ligne......
L'entrée analogique tu veux dire ? (MIC_IN)
oui, sinon c'est seulement 22,5 dB pour l'entrée Ligne
Intéressant ! Il me manque 20dB est ce que dans mon code je peux rajouter ce gain ? 20 dB = 20 log (Vs/Ve) -> Vs = 10xVe -> Donc je peux multiplier les datas sur le bus I2S par 10 comme ça j'ai rajouté +20 dB dans la chaine datas ?
Sinon il faut que je rajoute un Ampli +20 dB juste avant l'entrée MIC_IN.
Ce codec est semble t'il limité à un échantillonage maxi de 96 kHz, donc Shannon obligeant :
BW max 48 kHz , bien loin d'un signal I²S à 24 bits 192kHz
ça ressemble à un composant conçu pour réduire le coût d'un smartphone proposant de l'audio sans prétention HiFi !
Désolé, je n'ai pas compris votre explication. Je ne cherche pas Fe maxi et par ailleurs, le code sur le site PJRC fonctionne bien et a déjà utilisé par plusieurs personnes (que je n'ai pas vérifié bien sur).
Mon propos ici est de comprendre logiciellement un code existant et qui fonctionne en I2S seulement
=composant intéressant ... ou pas... selon l'objectif recherché !
Je ne sais si c'est le cas mais dans mon cas il est utilisé pour la mesure d'un son issu d'un Hydrophone (hélas encore et toujours le même sujet).
Il me manque +20 dB est ce que je peux traiter logiciellement au lieu de mettre un autre Ampli dans la chaine (qui consomme et qui rajoute du bruit dans la chaine de mesure).
oui bien entendu , tout sera amplifié signal et bruit déjà présent
Pour ce qui est du code proposé sa compréhension suppose la compréhension de la base de la librairie Audio de PJRC
une remarque en passant : comme pour l'ESP32 le DMA (accès direct mémoire) est utilisé ici avec la Teensyduino :
une fois activé l'IS2 vers DMA, l'acquisition/conversion des échantillons se fait en automatique au rythle prograllé et les blocs de données vont tous seuls en mémoire RAM , le code utilisateur 'se borne' à aller périodiquement récupérer ceux ci pour former un flux continu, mémoriser, traiter.....
Un peu d'explication pour que je comprenne mieux si vous voulez bien. Dans mon montage, il y a d'abord le capteur (Hydrophone) + Un préampli intégré dans l'hydrophone (donc en principe ce préampli enlève les parasites et relève le rapport signal/bruit déjà). Ensuite ce signal issu de l'Hydrophone+Préampli je rentre dans le composant NXP SGTL5000 avec un gain maxi 62.5 dB. Mais il me manque quand même +20 dB ; Comme à la sortie de l'ADC j'ai un signal numérique dont je peux tous les multiplier x10 (dont +20dB). Dont est ce que je peux faire ça ? Ce qui m’évite de rajouter un Ampli dans la chaine de mesure.
Dont ça va beaucoup plus vite avec le DMA si je comprend bien par rapport un bus classique comme le SPI par exemple ?
effectivement, je viens de regarder on peut transférer directement les données sur un disque par exemple pour mon cas une mémoire SD sans passer par le µP. Dont si je ne me trompe pas ça va plus vite qu'un bus normal SPI par exemple (à mon avis)
Multiplier par 10 en numérique ce n'est pas tout à fait comme multiplier par 10 en analogique.
Comme le signal est discrétisé, tu ne rajoutes pas des niveaux tu ne fais qu'augmenter la hauteur des marches. Par rapport à un gain analogique, cela devrait dégrader le rapport signal/bruit.