IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Amplificateur Analogique STM32F4


Sujet :

Embarqué

  1. #21
    Membre actif
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Points : 292
    Points
    292
    Par défaut
    Bon, j'ai un peu avancé, mais pas du coté hardware ( cela sera en 2 ème partie) mais plutôt du coté software mais je rencontre encore quelques problèmes pour charger un .wav dans la flash.

    J'utilise une autre carte que la tienne (STM32F4-disco), j'utilise une STM32L476-disco cependant sur la carte il y a exactement le mm DAC audio (CS43L22) avec la prise jack par contre les entrée analog ne sont pas accessible depuis l'extension.

    Bref du coup j'ai essayé de mettre en pratique ce que j'ai écris dans un de mes précédent post, soit charger un .wav ds la flash.

    Tout d'abord j'utilise comme IDE keil µvision 5 lite (bloqué a 32Ko pour le prg) et j'ai donc téléchargé le firmware proposé sur le site de ST pour tester ma carte.

    Donc le programme s'appelle SAI_AudioPlay avec une partie du readme qui explique ce a quoi on doit arriver si tout ce passe correctement:

    This example shows how to use the SAI HAL API to play an audio file using the DMA
    circular mode and how to handle the buffer update.

    Plug a headphone to ear the sound /!\ Take care of yours ears.
    Default volume is 20%.
    The audio file is played in loop
    @Note: Copy file 'audio.bin' (available in AudioFile) directly in the flash
    at @0x08080000 using ST-Link utility

    Once started, LED5 is toggling on STM32L476G-Discovery.


    Après plusieurs recherche j'ai donc trouvé comment charger ce fameux 'audio.bin' qui est téléchargé lors du téléchargment du firmware ==> STM32Cube_FW_L4_V1.3.0 ( voila son petit nom)

    Donc j'ai du installé STM32 ST-LINK Utility:

    Nom : Flash programming.png
Affichages : 704
Taille : 51,5 Ko

    Voir ci-dessus le snap de STM32 ST-LINK Utility après avoir injecté mon fichier 'audio.bin' dans la flash de mon µcontroleur
    J'ai du changer le start adress car par défaut cela commencé a 0x08000000 alors que ds le readme il indique de commencer a 0x08080000.

    Ensuite j'ai compilé le programme SAI_AudioPlay (avec keil), je l'ai chargé, passé en mode debug, Start et bingo enfin du son sort de mon casque audio une mauvaise musique en boucle qui dure 3s environ et ce répète en boucle.

    Je ne voulais pas en rester la et j'ai décidé d'injecter mon propre morceau (.wav) première chose je suis limité a 1Mo (taille de ma flash) et au extension .bin ( je crois que c'est le seul format accepté par ST-LINK Utility ).

    Et la commença le début de la galère. Déja j'ai galéré pour transformer un .wav en .bin mais bon j'ai réussi en créant un image cd avec daemon tools, mon .wav devient un .iso (car daemon ou moi lol ne sait pas faire directement de .bin) ensuite j'ai utilisé magicIso pour convertir mon .iso en .bin ==> yes ca marche sauf qu'a chaque conversion mon fichier fait plus qu' 1 Mo et peut importe la taille du fichier .wav.

    En modifiant des paramètres dans daemon j'arrive a sortir des fichiers inferieurs a 100 Ko, bien bien, je le charge dans ma flash pas d'erreur de chargement par contre aucun son qui sort et la LED5 reste figé ce qui indique une erreur lors du deroulement du programme.

    Je cherches, je regarde quelques paramètres audios implémentés dans le prog SAI_AudioPlay:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SaiHandle.Init.AudioMode      = SAI_MODEMASTER_TX;
      SaiHandle.Init.Synchro        = SAI_ASYNCHRONOUS;
      SaiHandle.Init.OutputDrive    = SAI_OUTPUTDRIVE_ENABLE;
      SaiHandle.Init.NoDivider      = SAI_MASTERDIVIDER_ENABLE;
      SaiHandle.Init.FIFOThreshold  = SAI_FIFOTHRESHOLD_1QF;
      SaiHandle.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_22K;
      SaiHandle.Init.Protocol       = SAI_FREE_PROTOCOL;
      SaiHandle.Init.DataSize       = SAI_DATASIZE_16;
      SaiHandle.Init.FirstBit       = SAI_FIRSTBIT_MSB;
      SaiHandle.Init.ClockStrobing  = SAI_CLOCKSTROBING_FALLINGEDGE;
      SaiHandle.Init.SynchroExt     = SAI_SYNCEXT_DISABLE;
      SaiHandle.Init.Mckdiv         = 0; /* N.U */
      SaiHandle.Init.MonoStereoMode = SAI_STEREOMODE;
      SaiHandle.Init.CompandingMode = SAI_NOCOMPANDING;
      SaiHandle.Init.TriState       = SAI_OUTPUT_NOTRELEASED;
     
      SaiHandle.FrameInit.FrameLength       = 32; 
      SaiHandle.FrameInit.ActiveFrameLength = 16;
      SaiHandle.FrameInit.FSDefinition      = SAI_FS_CHANNEL_IDENTIFICATION;
      SaiHandle.FrameInit.FSPolarity        = SAI_FS_ACTIVE_LOW;
      SaiHandle.FrameInit.FSOffset          = SAI_FS_BEFOREFIRSTBIT;
     
      SaiHandle.SlotInit.FirstBitOffset = 0;
      SaiHandle.SlotInit.SlotSize       = SAI_SLOTSIZE_DATASIZE;
      SaiHandle.SlotInit.SlotNumber     = 2; 
      SaiHandle.SlotInit.SlotActive     = (SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1);

    La dedans j'arrive a dechiffrer quelques lignes qui correspondent au paramètre de mon fichier audio, du coup je choisis un fichier .wav avec ces caractéristiques:

    -216k, stereo, 16-bit, 22050 Hz, 2.5 seconds

    Je refait la manip idem aucun son ne sort...

    Je passe en mode debug, j'avance pas a pas pour voir ou est le pb et dès qu j'arrive a cette ligne :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Check if the buffer has been loaded in flash */
      if(*((uint64_t *)AUDIO_FILE_ADDRESS) != 0x017EFE2446464952 ) Error_Handler();

    si je fais étape suivante (en mode debug), je suis renvoyé au if (UpdatePointer != 1) de la boucle sans fin du program:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /* Start loopback */
      while(1)
      {
        BSP_LED_Toggle(LED5);
     
        /* Wait a callback event */
        while(UpdatePointer==-1);
     
        int position = UpdatePointer;
        UpdatePointer = -1;
     
        /* Upate the first or the second part of the buffer */
        for(int i = 0; i < PLAY_BUFF_SIZE/2; i++)
        {
          PlayBuff[i+position] = *(uint16_t *)(AUDIO_FILE_ADDRESS + PlaybackPosition);
          PlaybackPosition+=2; 
        }
     
        /* check the end of the file */
        if((PlaybackPosition+PLAY_BUFF_SIZE/2) > AUDIO_FILE_SIZE)
        {
          PlaybackPosition = PLAY_HEADER;
        }
     
        if(UpdatePointer != -1)
        {
          /* Buffer update time is too long compare to the data transfer time */
          Error_Handler();
        }
      }

    Et la fonction Error_Handler fait ceci:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
      * @brief  This function is executed in case of error occurrence.
      * @param  None
      * @retval None
      */
    void Error_Handler(void)
    {
      /* LED5 On in error case */
      BSP_LED_On(LED5);
      while (1)
      {
      }
    }

    Donc on est bien dans une erreur_handler.

    Ensuite j'ai essayé d'occulter la ligne en la mettant en commentaire:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Check if the buffer has been loaded in flash */
      //if(*((uint64_t *)AUDIO_FILE_ADDRESS) != 0x017EFE2446464952 ) Error_Handler();

    Et la mon fichier son s’exécute mais avec un horrible grésillement.

    Bref pour le moment je ne vois pas trop d'ou le problème peut venir je vais y réfléchir et essayer de trouver des infos...

    Si ca intéresse du monde je peux mettre un peu plus de programme je ne voulais pas inonder mon post avec du code imbitable...
    L’art est une activité humaine, le produit de cette activité ou l'idée que l'on s'en fait s'adressant délibérément aux sens, aux émotions, aux intuitions et à l'intellect. www.elise-galerie.com

  2. #22
    Membre actif
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Points : 292
    Points
    292
    Par défaut
    Je reviens sur ce sujet, je n'ai guère avancé...

    En premier lieu je souhaite refaire un topo sur la conversion entre un .bin et un .wav ou l'inverse comme d'habitude je me suis rendu fou pour rien.... Si vous etes sur que votre fichier est un fichier audio wave un simple F2 vous permet de changer l'extension du fichier selon ses désidératas, bref pas besoin de logiciel ou je ne sais quoi....

    Ensuite j'ai retrouvé l’entête RIFF sur mes fichiers .wav téléchargé sur www.findsounds.com. Elle était quelques lignes arès le début du fichier.
    Pour coller avec mon fichier de référence qui fonctionne et qui commence directement par l’entête RIFF j'ai édité mes fichiers téléchargés avec notepad++ et supprimé les premières lignes jusqu'a RIFF.WAVE etc..

    Malgrè cette modif le son gresille toujours....

    Ensuite j'ai récupéré un petit programme qui permet de récuperer quelques infos sur des fichiers .wav:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> // for memcmp
    #include <stdint.h> // for int16_t and int32_t
     
    struct wavfile
    {
        char    id[4];          // should always contain "RIFF"
        int32_t totallength;    // total file length minus 8
        char    wavefmt[8];     // should be "WAVEfmt "
        int32_t format;         // 16 for PCM format
        int16_t pcm;            // 1 for PCM format
        int16_t channels;       // channels
        int32_t frequency;      // sampling frequency
        int32_t bytes_per_second;
        int16_t bytes_by_capture;
        int16_t bits_per_sample;
        char    data[4];        // should always contain "data"
        int32_t bytes_in_data;
    } __attribute__((__packed__));
     
    int is_big_endian(void) {
        union {
            uint32_t i;
            char c[4];
        } bint = {0x01000000};
        return bint.c[0]==1;
    }
     
    int main(int argc, char *argv[]) {
        char *stereo=argv[1];
        FILE *wav = fopen("stereobis.wav","rb");
        struct wavfile header;
     
        if ( wav == NULL ) {
            fprintf(stderr,"Can't open input file %s\n", stereo);
            exit(1);
        }
     
        // read header
        if ( fread(&header,sizeof(header),1,wav) < 1 ) {
            fprintf(stderr,"Can't read input file header %s\n", stereo);
            exit(1);
        }
     
        // if wav file isn't the same endianness than the current environment
        // we quit
        if ( is_big_endian() ) {
            if (   memcmp( header.id,"RIFX", 4) != 0 ) {
                fprintf(stderr,"ERROR: %s is not a big endian wav file\n", stereo);
                exit(1);
            }
        } else {
            if (   memcmp( header.id,"RIFF", 4) != 0 ) {
                fprintf(stderr,"ERROR: %s is not a little endian wav file\n", stereo);
                exit(1);
            }
        }
     
        if (   memcmp( header.wavefmt, "WAVEfmt ", 8) != 0
            || memcmp( header.data, "data", 4) != 0
                ) {
            fprintf(stderr,"ERROR: Not wav format\n");
            exit(1);
        }
        if (header.format != 16) {
            fprintf(stderr,"\nERROR: not 16 bit wav format.");
            exit(1);
        }
        fprintf(stderr,"format: %d bits", header.format);
        if (header.format == 16) {
            fprintf(stderr,", PCM");
        } else {
            fprintf(stderr,", not PCM (%d)", header.format);
        }
        if (header.pcm == 1) {
            fprintf(stderr, " uncompressed" );
        } else {
            fprintf(stderr, " compressed" );
        }
        fprintf(stderr,", channel %d", header.pcm);
        fprintf(stderr,", freq %d", header.frequency );
        fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
        fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
        fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
        fprintf(stderr,"\n" );
     
        if ( memcmp( header.data, "data", 4) != 0 ) {
            fprintf(stderr,"ERROR: Prrroblem?\n");
            exit(1);
        }
        fprintf(stderr,"wav format\n");
     
        // read data
        long long sum=0;
        int16_t value;
        int i=0;
        fprintf(stderr,"---\n", value);
        while( fread(&value,sizeof(value),1,wav) ) {
            if (value<0) { value=-value; }
            sum += value;
        }
        printf("%lld\n",sum);
        exit(0);
    }

    J'obtiens ces infos:
    Nom : Stereobis.png
Affichages : 516
Taille : 10,4 Ko

    Je configure mon programme de démo fournit par ST avec ces quelques infos du moins la fréquence audio (22k) et la taille des données (16 bits).

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     /* Initialize SAI */
      __HAL_SAI_RESET_HANDLE_STATE(&SaiHandle);
     
      SaiHandle.Instance = AUDIO_SAIx;
     
      __HAL_SAI_DISABLE(&SaiHandle);
     
      SaiHandle.Init.AudioMode      = SAI_MODEMASTER_TX;
      SaiHandle.Init.Synchro        = SAI_ASYNCHRONOUS;
      SaiHandle.Init.OutputDrive    = SAI_OUTPUTDRIVE_ENABLE;
      SaiHandle.Init.NoDivider      = SAI_MASTERDIVIDER_ENABLE;
      SaiHandle.Init.FIFOThreshold  = SAI_FIFOTHRESHOLD_1QF;
      SaiHandle.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_22K;
      SaiHandle.Init.Protocol       = SAI_FREE_PROTOCOL;
      SaiHandle.Init.DataSize       = SAI_DATASIZE_16;
      SaiHandle.Init.FirstBit       = SAI_FIRSTBIT_MSB;
      SaiHandle.Init.ClockStrobing  = SAI_CLOCKSTROBING_FALLINGEDGE;
      SaiHandle.Init.SynchroExt     = SAI_SYNCEXT_DISABLE;
      SaiHandle.Init.Mckdiv         = 0; /* N.U */
      SaiHandle.Init.MonoStereoMode = SAI_STEREOMODE;
      SaiHandle.Init.CompandingMode = SAI_NOCOMPANDING;
      SaiHandle.Init.TriState       = SAI_OUTPUT_NOTRELEASED;
     
      SaiHandle.FrameInit.FrameLength       = 32; 
      SaiHandle.FrameInit.ActiveFrameLength = 16;
      SaiHandle.FrameInit.FSDefinition      = SAI_FS_CHANNEL_IDENTIFICATION;
      SaiHandle.FrameInit.FSPolarity        = SAI_FS_ACTIVE_LOW;
      SaiHandle.FrameInit.FSOffset          = SAI_FS_BEFOREFIRSTBIT;
     
      SaiHandle.SlotInit.FirstBitOffset = 0;
      SaiHandle.SlotInit.SlotSize       = SAI_SLOTSIZE_DATASIZE;
      SaiHandle.SlotInit.SlotNumber     = 2; 
      SaiHandle.SlotInit.SlotActive     = (SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1);
     
      if(HAL_OK != HAL_SAI_Init(&SaiHandle))
      {
        Error_Handler();
      }
     
      /* Enable SAI to generate clock used by audio driver */
      __HAL_SAI_ENABLE(&SaiHandle);
     
      /* Initialize audio driver */
      if(CS43L22_ID != cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS))
      {
        Error_Handler();
      }
     
      audio_drv = &cs43l22_drv;
      audio_drv->Reset(AUDIO_I2C_ADDRESS);  
      if(0 != audio_drv->Init(AUDIO_I2C_ADDRESS, OUTPUT_DEVICE_HEADPHONE, 50, AUDIO_FREQUENCY_22K))
      {
        Error_Handler();
      }
    }

    J'ai toujours ce maudit grésillement qui sort de mon casque audio...
    Je ne sais pas si il y a une config que je dois modifier pour enlever ce grésillement ou si je dois m'attaquer directement a l'ampli DAC CS43L22.

    Je continu avec un autre post pout la partie HARDWARE du cs43l22
    L’art est une activité humaine, le produit de cette activité ou l'idée que l'on s'en fait s'adressant délibérément aux sens, aux émotions, aux intuitions et à l'intellect. www.elise-galerie.com

  3. #23
    Membre actif
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Points : 292
    Points
    292
    Par défaut
    Retour sur les entrés analogiques du CS43L22:

    Nom : CS43L22_F2.png
Affichages : 1180
Taille : 47,6 Ko

    Donc pour PA4 je confirme quelle arrive d'un DAC du µcontroleur STM32F405/7 qui lui est fourni par la flash du µcontroleur ou un clé USB.

    En sortie du DAC on a un filtre passe haut ==> Fc = 1/(2 * PI * 100000(R44) * 1.10-6(C44)) = 1.592 HZ. R47 (100 ohm) doit servir a limiter le courant.

    Pour PC3 on a directement la sortie du microphone MP45DT02.

    La on a un passe bas ==> Fc = 1/(2 * PI * 1200(R54) * 1.10-6(C52)) = 13270 HZ puis on a un filtre passe haut ==> Fc = 1/(2 * PI * 100000(R52) * 1.10-6(C51)) = 1.592 HZ. R53 (100 ohm) doit servir a limiter le courant.

    Puis pour PC4 on a donc une entrée analogique libre avec un filtre passe bas non défini et le mm filtre passe haut que sur PC3 .

    Après le CS43L22 est piloté depuis le µcontroleur en I2C qui est ==> Le port de contrôle utilisé pour accéder aux registres permettant au CS43L22 d'être configuré pour les modes et formats opérationnels souhaités voir les registres dans la datasheet).

    Et je dirai que le I2S permet d'injecter du son numérique dans le CS43L22.

    Bon j'ai demandé des infos sur le forum de ST j'attends de voir si il y a des réponses affaire a suivre...
    L’art est une activité humaine, le produit de cette activité ou l'idée que l'on s'en fait s'adressant délibérément aux sens, aux émotions, aux intuitions et à l'intellect. www.elise-galerie.com

  4. #24
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Salut,
    Citation Envoyé par julien terrier Voir le message
    Si ça intéresse du monde je peux mettre un peu plus de programme je ne voulais pas inonder mon post avec du code imbitable...
    Plutôt le fichier audio (s'il n'est pas trop gros) qui fait grésiller ton casque, des fois que ça soit dans le fichier...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #25
    Membre actif
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Points : 292
    Points
    292
    Par défaut
    Merci pour ton aide Jipété , mais j'ai réussi a charger deux fichiers wav sans grésillement autre que celui dispo ds la démo.

    Pour cela 4 conditions sont nécessaires (En utilisant le ST-link utility et le programme de demo fournit par ST).

    1 ==> Il faut que la taille du fichie soit < ou = a 500ko pour avoir une répétition en boucle.

    2 ==> Il faut absolument que le Fichier .wav téléchargé commence par l'entete RIFF.WAVE rien d'autre même en effaçant les premières lignes on peut entendre le son mais il sera accompagné d'un horrible grésillement...

    3 ==> Il faut impérativement dans la ligne 53 du programme de démo mettre la taille (même un peu moins) du fichier que l'on va injecter dans la flash.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    #define AUDIO_FILE_SIZE      (133*1024)
    Ex: mon fichier fait 137ko j'ai donc mis 133 pour eviter le bruit de coupure vu que le fichier est lu en boucle.

    4 ==> Mettre en commentaire la ligne 97 ou renseigner le début d'entete RIFF de votre fichier.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     /* Check if the buffer has been loaded in flash */
      //if(*((uint64_t *)AUDIO_FILE_ADDRESS) != 0x017EFE2446464952 ) Error_Handler();

    Pour info le plus gros fichier que j'ai chargé fait 500 k0 et dure environ 5-6 sec
    Bien entendu on ne peut lire que des fichiers audio de quelques secondes, vous allez me dire mais a quoi ça sert ? C'est pédagogique en fait lol...
    L’art est une activité humaine, le produit de cette activité ou l'idée que l'on s'en fait s'adressant délibérément aux sens, aux émotions, aux intuitions et à l'intellect. www.elise-galerie.com

  6. #26
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut Julien,
    Je vois que tu as réussi à maîtriser le soft de ton micro et le CS43L22... d'autant plus que pour avoir relu récemment la datasheet c'est un composant costaux !!!
    Néanmoins j'ai une remarque.

    Citation Envoyé par julien terrier Voir le message
    Nom : CS43L22_F2.png
Affichages : 1180
Taille : 47,6 Ko
    Citation Envoyé par julien terrier Voir le message
    [...] En sortie du DAC on a un filtre passe haut ==> Fc = 1/(2 * PI * 100000(R44) * 1.10-6(C44)) = 1.592 HZ. R47 (100 ohm) doit servir a limiter le courant. [...]
    La on a un passe bas ==> Fc = 1/(2 * PI * 1200(R54) * 1.10-6(C52)) = 13270 HZ puis on a un filtre passe haut ==> Fc = 1/(2 * PI * 100000(R52) * 1.10-6(C51)) = 1.592 HZ. R53 (100 ohm) doit servir a limiter le courant.[...]
    Effectivement R53 et R47 (100 Ohms) servent a limiter le courant en cas de problème. Si on fait un bon court-jus alors la chute de tension aux bornes de la résistance de 100 Ohms sera égale à R x Icourt-jus donc plus le court-circuit sera fort et plus on perdra de la tension dans les 100 Ohms ce qui implique qu'il n'y aura plus de tension du tout après la 100 Ohms tellement la chute de tension à ces bornes sera forte et qui dit plus de tension = plus de courant = protection.

    En revanche R44 et C44 ne forment pas un filtre passe haut. Pour faire un filtre passe haut "C" "R" il eut fallu que R44 soit derrière C44, c'est à dire entre la 100 Ohms et C44 hors là elle est devant.
    R44 est là pour l'adaptation d'impédance. La sortie niveau de ligne de nos cartes son à une impédance d'environ 100k d'où R44. Quant à C44 c'est un condensateur de liaison qui sert a supprimer une éventuelle composante continue.

    Je pense que l'initiateur du sujet nous a lâché mais toi maintenant tu maîtrises !

    Bisous du Nord !
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  7. #27
    Membre actif
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Points : 292
    Points
    292
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Effectivement R53 et R47 (100 Ohms) servent a limiter le courant en cas de problème. Si on fait un bon court-jus alors la chute de tension aux bornes de la résistance de 100 Ohms sera égale à R x Icourt-jus donc plus le court-circuit sera fort et plus on perdra de la tension dans les 100 Ohms ce qui implique qu'il n'y aura plus de tension du tout après la 100 Ohms tellement la chute de tension à ces bornes sera forte et qui dit plus de tension = plus de courant = protection.

    En revanche R44 et C44 ne forment pas un filtre passe haut. Pour faire un filtre passe haut "C" "R" il eut fallu que R44 soit derrière C44, c'est à dire entre la 100 Ohms et C44 hors là elle est devant.
    R44 est là pour l'adaptation d'impédance. La sortie niveau de ligne de nos cartes son à une impédance d'environ 100k d'où R44. Quant à C44 c'est un condensateur de liaison qui sert a supprimer une éventuelle composante continue.
    Merci Vincent pour la rectification, comme toujours tu veilles au grain !

    Je pensé que l'adaptation d'impédance n'était valable que pour un signal vidéo...
    Pour la composante continu maintenant c'est clair comme de l'eau de roche...

    Bisoux du sud!
    L’art est une activité humaine, le produit de cette activité ou l'idée que l'on s'en fait s'adressant délibérément aux sens, aux émotions, aux intuitions et à l'intellect. www.elise-galerie.com

  8. #28
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    pour le microcontroleur Stm32f769NI eval le codec utilisé est WM8994 .Comment peut on envoyer les données audio a travers un module DSI/HDMI pour sortir le sound avec la tele.Nom : Untitled.png
Affichages : 670
Taille : 120,2 Ko
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/05/2006, 20h56
  2. [xDSL]Support de plusieurs xDSL sur une ligne analogique
    Par leminipouce dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 03/04/2006, 17h52
  3. Réponses: 3
    Dernier message: 02/03/2006, 13h56
  4. connexion entre deux ordinateurs par modem analogique
    Par devl83 dans le forum Hardware
    Réponses: 3
    Dernier message: 31/01/2006, 16h48
  5. convertisseur analogique pic18f
    Par stefane1981 dans le forum C
    Réponses: 5
    Dernier message: 17/11/2005, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo