Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

interface PIC32 avec un convertisseur ADC 24bits stéréo



  1. #1
    jlcms

    interface PIC32 avec un convertisseur ADC 24bits stéréo


    ------

    Bonjour,

    Je cherche à connecter un convertisseur audio avec un PIC32.
    D'après ce que j'ai lu la liaison appropriée est la SPI en mode "framed" en utilisant des caractères de 32bit.
    Un exemple de communication est donnée sur ce site pour faire une liaison dans l'autre sens (c'est un player). Dans cet exemple les horloges sont générées par le codec (bck et lrck) et le PIC32 est "slave", aussi bien pour la transmission que pour les "frames".
    La doc technique de microchip explique tout sur la façon de configurer le SPI sauf un point.

    Comment fait-on pour savoir si le caractère que l'on a reçu est bien le premier ou le deuxième (le droit ou le gauche) de la "frame"?
    Doit-on tester le port SSx? Si c'est le cas a quoi sert cette notion de mode "framed"?
    Bref comment synchroniser les débuts de "frame".

    -----

  2. Publicité
  3. #2
    satinas

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Salut

    L'horloge du port SPI cadence l'échange de bits entre la cpu et le circuit audio. Le frame envoyé par le composant audio indique le début d'un train de bit.
    Le contenu du train de bit (ou trame) dépend du format utilisé. Par exemple pour une trame I2S, on a la voie gauche en MSB et la voie droite en LSB.
    Cote cpu, il faut programmer une interruption SPI pour exploiter ces données. Elle est déclenchée lorsque la totalité d'une trame a été reçue.

  4. #3
    jlcms

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Ce qui me pose problème c'est que le buffer de réception fait 32 bits.
    Or une trame complète (droite + gauche) pèse 64 bits.
    Il y aura donc une interruption toutes les demi-trames.
    Comment faire pour distinguer les 24bits de droite de ceux de gauche?

  5. #4
    satinas

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Il faut regarder le mode Enhanced du port SPI pic32. Il n'est pas disponible sur tous, seulement les 32MX5,6,7
    Il permet de recevoir des frames jusqu'à 128 bits, je l'ai pas pratiqué, n'ayant jamais dépassé les 32bits.

    Bon courage

  6. #5
    jlcms

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Merci pour ces réponses.

    Encore une chose me paraît bizarre: lorsque l'on active le mode "Enhanced Buffer" on dispose d'un compteur d'éléments présents dans la fifo:
    bit 28-24 RXBUFELM<4:0>: Receive Buffer Element Count bits (valid only when ENHBUF = 1)
    (2)
    Reflects the value mod (SWPTR - CRPTR) taking into account empty and full conditions.
    The Receive Buffer Element Count (RXBUFELM<4:0>) bits in the SPI Status
    (SPIxSTAT<28:24>) register indicate the number of unread elements in the receive FIFO. The
    Transmit Buffer Element Count (TXBUFELM<4:0>) bits in the SPI Status (SPIxSTAT<20:16>)
    register indicate the number of elements not transmitted in the transmit FIFO.
    Ce compteur est sur 5 bits soit des valeurs de 0 à 31, or les caractères les plus petits font 8bits ce qui donne au maximum 16 caractères dans le fifo. Pourquoi ce compteur est sur 5bits au lieu de 4?

  7. A voir en vidéo sur Futura
  8. #6
    satinas

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Déformation professionnelle, tu comptes à partir à 0.
    Il s'agit d'un nombre d'éléments jusqu'a 32, et si tu comptes à partir de 1, il faut 5bit. Ca doit être ça, mais à vérifier.

  9. Publicité
  10. #7
    jlcms

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Tu as raison, déformation professionnelle: à force de pisser des lignes de code C/C++, le "1" à fini par se transformer en "0" dans mon esprit "indexé" et le "0" à totalement disparu...
    Il y a bien 17 valeurs à coder de 0 à 16, donc il faut bien 5 bits.

    Maintenant "tout est au mieux dans le meilleur des mondes"

    Merci d'avoir répondu.

  11. #8
    jlcms

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Pour résumer ce que j'ai compris, je fais un petit topo:

    Composants:
    - un pic32, de la série 5,6, ou 7, par exemple la carte PIC32 USB STARTER KIT II
    - un adc audio, par exemple le PCM1804 de TI

    Câblage de configuration du PCM1804:
    - pin18: SCKI reçoit un signal d'horloge master, pour du 44,1KHz on rentre une horloge de 11,2896MHz.
    - pin8: S/M# à 0 pour être en mode master et donc le pcm1804 génère les horloges de transmission, à partir de son SCKI.
    - pin11,10,9: [OSR2,OSR1,OSR0] à [0,1,1] pour être en "single rate" 256*fs.
    - pin7,6: [FMT1,FMT0] à [0,0] pour être en format "PCM, left-justified, 24-bit" (les autres formats marchent aussi, mais le I2S impose un décalage à gauche des caractères après réception).

    Liaison entre le PCM1804 et le PIC32:
    - PCM1804: pin15: DATA sur PIC32SK: pin93: SDI1 (je mets les n° de broche du Starter kit). C'est le fil de données de la liaison SPI.
    - PCM1804: pin16: BCK sur PIC32SK: pin91: SCK1. C'est l'horloge de transmission des bits de donnée.
    - PCM1804: pin17: LRCK sur PIC32SK: pin54: SS1. C'est l'horloge d'échantillonnage tournant à 44,1KHz et permettant de faire la synchronisation des trames SPI.
    Pour les 3 signaux DATA,BCK et LRCK c'est le PCM1804 qui fournit les signaux.
    - on relie le PCM1804: pin19: RST# à un port du PIC32 pour contrôler le reset du PCM1804

    Configuration du SPI:
    - SPI1CON: FRMEN = 1, on active le mode trame ou "framed", une trame faisant 64 bits et contient 24bits pour la gauche et 24 pour la droite.
    - SPI1CON: FRMSYNC = 1, le PIC32 reçoit les tops de trame et SS1 est un entrée.
    - SPI1CON: FRMPOL = 1, on commence par le canal gauche et lors de sa transmission LRCK est à l'état haut.
    - SPI1CON: MSSEN = 0, on ne génère rien sur SS1 depuis le PIC32
    - SPI1CON: FRMSYPW = 1, la pulse de synchronisation LRCK dure 32bit soit un caractère.
    - SPI1CON: FRMCNT<2:0> = [001], on a un top de synchro tous les deux caractères de 32bits.
    - SPI1CON: SPIFE = 1, le top sur LRCK se produit au même moment que le premier bit transmis.
    - SPI1CON: ENHBUF = 1, on utilise le fifo de 128 bits.
    - SPI1CON: MODE<32,16> = [10], les caractères font 32 bits.
    - SPI1CON: CKE = 0, non utilisé en mode framed.
    - SPI1CON: CKP = 1, les bits transmis sont à échantillonner sur le front montant de BCK.
    - SPI1CON: MSTEN = 0, on est en mode slave pour le SPI.
    - SPI1CON: RTXISEL<1:0> = [10], on active le bit d'interruption à chaque fois que le buffer est à moitié plein, c'est à dire tous les 64bits.

    Ensuite on ajoute une ISR (traitement de l'interruption) qui sera activée à chaque fois que l'on aura reçu une paire d'échantillons, que l'on pourra lire en adressant SPI1BUF, d'abord on va récupérer la voie gauche (tel que c'est configuré) et ensuite la voie droite.
    Evidemment on peut mettre un transfert DMA au lieu d'une ISR, mais bon là on dépasse le cadre de la question posée...

    En dernier on active le SPI avec:
    - SPI1CON: ON =1

    Pour l'instant je n'ai rien testé, donc tout est à vérifier, mais c'est déjà une base.
    Dernière modification par jlcms ; 18/02/2011 à 13h07.

  12. #9
    lemailgi

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Bonjour je suis très intéressé par votre interface PIC32 avec un convertisseur ADC 24bits stéréo, j'essaye actuellement de réaliser la même chose avec un convertisseur CS4270 et un PIC32MX7. J'ai décidé d'utiliser le convertisseur ds le mode standalone, il produit donc les signaux LRCK SCLK sur le bus SPI. Le PIC est en esclave . J'ai des difficultées à utiliser le PIC ds ce mode. Avez vous réaliser votre projet ??? Pouvez vous me guider ??? Merci d'avance de votre réponse, salutations

  13. #10
    jlcms

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Bonjour,

    Non je n'ai pas réalisé le projet.
    En revanche je suis toujours intéressé par le sujet et je ne manquerais pas de répondre aux questions si je peux.

    Quel est le problème rencontré?

  14. #11
    RISC

    Re : interface PIC32 avec un convertisseur ADC 24bits stéréo

    Salut Lemailgi,

    Je pense que tu peux trouver des exemples de code et des schémas dans le centre de design audio pour les PIC32.
    Plusieurs PIC32 ont des interfaces I2S. Dans le user manual de cette carte tu trouveras le schéma d'interfaçage d'un CODEC WOLFSON ainsi que le code source.

    Es-tu sur que ton CODEC ne fonctionne pas également en mode I2S (plus classique pour l'audio) ?

    Je te recommande, si c'ets géré de faire les transferts sous DMA, cela décharge le CPU de faço importante ;=)

    a+
    Ma marotte ? les microcontrôleurs ;=)

Sur le même thème :

Discussions similaires

  1. Communication PIC et CAN 24bits
    Par Pilou81 dans le forum Électronique
    Réponses: 6
    Dernier message: 01/08/2010, 23h39
  2. Réponses: 22
    Dernier message: 23/08/2009, 22h23
  3. Convertisseur Stéréo => Dolby Surround
    Par TheRaKaDeR dans le forum Électronique
    Réponses: 2
    Dernier message: 26/11/2008, 09h22
  4. Convertisseur SPDIF => analogique stereo (discret)
    Par oilslick dans le forum Électronique
    Réponses: 3
    Dernier message: 24/09/2008, 13h52
  5. Réponses: 0
    Dernier message: 05/07/2008, 20h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.