[Projet] Jouer la musique de Tetris avec un Pic ;op
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 43

[Projet] Jouer la musique de Tetris avec un Pic ;op



  1. #1
    invite359f3846

    [Projet] Jouer la musique de Tetris avec un Pic ;op


    ------

    Bonjour,

    Comme "projet d'été", je souhaiterais créer une plaque de développement capable de jouer des fichiers midi: plus concrètement, la musique de Tetris. Je compte utiliser un PIC 16F877 cadencé à 20MHz.

    A première vue, ce n'est pas si facile que ça . En effet, comment générer un signal audio (50 - 20000Hz) avec un PIC aussi rapidement. Il est vrai que je pourrais utiliser un DAC mais j'ai également vu que l'on pouvait générer un signal audio avec du PWM mais la fréquence de celui-ci doit se situer aux alentours de 250kHz minimum.

    Avez-vous des idées ou peut-être un projet similaire à me conseiller?

    -----

  2. #2
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Bonjour,

    j'avais fais un petit projet de player audio 8bits/8Khz avec
    un petit PIC et une mémoire 24LCxxx... décrit ici :
    http://vede.free.fr/electronique/16f88/vedeplayer/
    où j'utilise la sortie PWM pour "jouer" le son...

    vede
    ;O]
    ____________
    ...

  3. #3
    invite359f3846

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Salut,

    Merci pour le lien vers ton projet. C'est assez simple au final...
    Mais comment faire si on veut créer une sorte de synthétiseur qui doit gérer une banque de son et que plusieurs sons peuvent être joués en même temps.

    Concernant, le schéma de l'amplificateur à base de LM386 que tu proposes ici: http://vede.free.fr/electronique/16f...yer/LM386.html

    C'est assez bizarre qu'il n'y ait aucune boucle de rétroaction. De plus, le potentiomètre est mis de telle manière qu'une résistance est placée entre la borne + et - de l'AOP... Il ne peut donc fonctionner en amplificateur!

    Je te conseillerais plutôt de te tourner vers un amplificateur non-inverseur (car un inverseur modifierait le filtre passe-bas que tu as placée à l'entrée de ton montage).

  4. #4
    invite29971eb1

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Pour te donner des idées, tu peux aller visiter le site de ce fou furieux:
    http://www.linusakesson.net/music/pnac.php

    Ca n'est pas sur PIC. C'est peut-être adaptable, mais j'en doute quand même....

  5. A voir en vidéo sur Futura
  6. #5
    invite359f3846

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Citation Envoyé par Rodrigue Voir le message
    Concernant, le schéma de l'amplificateur à base de LM386 que tu proposes ici: http://vede.free.fr/electronique/16f...yer/LM386.html

    C'est assez bizarre qu'il n'y ait aucune boucle de rétroaction...
    Désolé, j'avais mal regardé. Ce n'est pas la première ni la dernière erreur que je commettrai! Il s'agit d'un LM386 qui n'est pas un AOP mais un amplificateur. Ton schéma est bel est bien correc

    J'ai simulé un réseau R-2R et ça fonctionne très bien avec un 16F877. Je joins le schéma. La dynamique de sortie est comprise entre +0.5 et 4.5V pour qu'elle soit complète il faudrait par exemple utilisé des alimentations de +9v/-9v ou +12/-12V, etc.

    Je n'ai pas encore géré la mémoire 24LCxx. Je compte plutôt lire mes fichiers wav depuis une carte SD.

    Je pourrais ajouter l'ampli LM386 directement sur la carte également ainsi que les alimentations.
    Images attachées Images attachées

  7. #6
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Citation Envoyé par Rodrigue Voir le message
    (...)
    Je n'ai pas encore géré la mémoire 24LCxx. Je compte plutôt lire mes fichiers wav depuis une carte SD.
    (...)
    Salut,

    c'est ce que j'ai fait ensuite...
    mais mon code de gestion de la SD (SPI + Fat16) ne rentrait pas dans un 16F88...
    donc j'ai du passer au 18F4550...

    et quel plaisir, une SD 2Go ça change de qq Ko ;O]
    et grâce à la vitesse du 18F (40Mhz) j'ai même fait des essais
    de reproduction à 11Khz/16bits (16bits via un R2R ;O])...
    (IAM, TRUST... ;O])... pas optimisé... mais ça fonctionnait...

    bon sinon avec une 24LC512 j'ai quand même réussi à faire une horloge parlante 8b/8Khz... (=8s de son)
    Bonjour Vede...Il est...Deux...Heures...Quarante ...Cinq...Minutes...
    ou encore
    Bonjour Vede...Il est...Vingt...Et...Une...Heure s...Cinquante...Cinq...Minutes ...

    en découpant (pour les rentrer dans 8s) puis re-constituant tous les chiffres...
    vede
    ;O]
    ___________
    ...

  8. #7
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op


  9. #8
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Citation Envoyé par Rodrigue Voir le message
    (...)
    Mais comment faire si on veut créer une sorte de synthétiseur qui doit gérer une banque de son et que plusieurs sons peuvent être joués en même temps.
    (...)
    re ps ;O]

    pour gérer une "banque" de sons, le même principe que l'horloge parlante...
    tu mets tes sons dans la mémoire à des adresses définies que t'as choisis...
    ou avec une SD formatée, tu met un son par fichier (son1.wav, son2.wav...)
    pis après tu les séquences/appeles dans ton code...

    pour la polyphonie c'est plus chaud, là je ne pourrais t'aider...
    peut-être avec plusieurs PICS ;O]

    .

  10. #9
    invitef26bdcba

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Salut,

    Voir aussi sur le site de Bigonoff, dans la section réalisation, Philippe Briola a réalisé ce même genre de montage didactique avec un simple 16F876...

    David.

  11. #10
    arsene de gallium

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Je pense qu'on s'égare:
    Rodrigue parle de son MIDI, pas wav ou autre.
    En MIDI on ne lit que des codes genre:
    N° note, Vélocité, N° Canal.
    Il faut dans un premier temps décoder ces codes puis piloter les sons correspondants générés par un synthétiseur intégré.
    Exemple:
    je lis Touche C3 (60) avec la vélocité de 100 sur le canal 2
    Il faut piloter la partie synthèse pour qu'elle sorte un son correspondant à 261,6 Hz avec le niveau (vélocité) voulu.
    La partie synthétiseur peut être très simple, une onde carrée, qui sera émise à la fréquence voulue.
    De là à
    Mais comment faire si on veut créer une sorte de synthétiseur qui doit gérer une banque de son et que plusieurs sons peuvent être joués en même temps.
    Il y a un monde que connait bien Yamaha, Roland, Korg mais qui n'est pas à la portée d'un débutant et surtout avec un PIC.

  12. #11
    invite359f3846

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Citation Envoyé par arsene de gallium Voir le message
    Je pense qu'on s'égare:
    Rodrigue parle de son MIDI, pas wav ou autre.
    En MIDI on ne lit que des codes genre:
    N° note, Vélocité, N° Canal.
    Il faut dans un premier temps décoder ces codes puis piloter les sons correspondants générés par un synthétiseur intégré.
    Exemple:
    je lis Touche C3 (60) avec la vélocité de 100 sur le canal 2
    Il faut piloter la partie synthèse pour qu'elle sorte un son correspondant à 261,6 Hz avec le niveau (vélocité) voulu.
    La partie synthétiseur peut être très simple, une onde carrée, qui sera émise à la fréquence voulue.
    De là à

    Il y a un monde que connait bien Yamaha, Roland, Korg mais qui n'est pas à la portée d'un débutant et surtout avec un PIC.
    Oui, c'est pour cela que l'on a un peu dévié et que je compte me tourner vers le wav!
    En fait tout fonctionne, il ne me reste plus qu'à être capable de lire une carte SD et que je puisse remplir celle-ci via mon ordinateur facilement
    Donc gestion SPI et FAT16. Pour l'instant, j'ai regardé par ci et par là, j'ai trouvé quelques petites choses prometteuses.
    Comment simuler cela sous ISIS? J'ai vu qu'il y avait un objet MMC qui simulait une carte SD, je vais m'entraîner un peu avec. Pour ceux qui ne connaissent pas bien ISIS, il y a également l'objet Speaker qui permet de piloter directement la carte son avec un schéma électronique!!!

  13. #12
    skydarc

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    bonjour,

    je me permets de prendre la parole car j'ai dans l'idée de créer un module a base de 4550 qui lit du son via PWM, les données provenant une carte sd par SPI.

    Il me semble, si je comprend bien, que l'on veut faire la meme chose.

    Pour ma part, j'en suis a la restitution des données PCM des fichiers wav (en fait des fichiers raw, wav sans entete) via le module ccp2 du 4550.

    Je cherche des infos car pour le moment mes essais sont loin d'etre concluant je reconnais a peine les morceaux incerré dans ma carte.

    Je me disais en lisant tes lignes que l'on pourait echanger nos codes. Ou tout du moins nous aiguiller mutuellement.

    pour ma part, il me reste simplement a implemanter la lecture de la fat car je n'ai pas pris le temps de la faire ( mon fichier son se lit d'une traite sans saut de cluster).

    En fait je galere sur la facon de "decoder" les "sample" du fichier wav et surtout quelle frequence est adapter a la lecture.

  14. #13
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Salut,

    je vais tenter de t'expliquer les contraintes,
    et comment moi j'ai fait...

    Primo : le signal PWM produit par le PIC à une "résolution" de 10bits...
    donc impossible de lui faire "restituer" du .wav 16bits...

    donc moi j'ai tout basé sur des .wav convertis en 8bits/8Khz
    avec le Magnétophone de Windowz (8Khz = 8000 échantillons par seconde)...

    donc il faut "moduler" (en largeur, cad le duty-cyce)) le signal
    PWM 8000 fois par seconde, et ceci avec les échantillons 8bits...
    (on module "grâce" aux registres CCPRxL et CCPxCON[4:5])

    pour la fréquence de "base" PWM, il faut programmer
    une fréquence d'au moins 8Khz * 2...
    (la Fréquence se définit avec le registre PR2 du Timer2)

    Bon là la petite "astuce", pour gagner en "résolution", je fais
    une "pseudo" conversion 8bits>9bits...

    exemple :
    Code:
    char echantillon;
    PR2    = 0b10000000;       // Valeur mini pour éviter BUGs (Th > Tc)
    CCP1CON = 0b001100;     // PWM ON
    
    while(1)
    {
        echantillon = read_memoire();         
        CCPR1L = echantillon >> 1;         // module la PWM
        CCP1CON.RB5 = echantillon.RB0; // module la PWM
        delay_us(x);  // pour que la boucle "tourne" à 8000Hz
    }
    plus sérieusement il faudrait utiliser une interruption sur un
    TIMER pour générer une horloge précise de 8000Hz...
    plutôt qu'un délai...

    Attention, on voit que le programme ne doit pas "mettre"
    plus de 125µs pour récupérer l'échantillon dans la mémoire
    (because 8Khz)...

    En supplément ci-dessous mon code C complet, testé et
    fonctionnel, utilisant le Timer1 pour les 8Khz, et avec le son
    stocké dans une mémoire I2C 24LC256...

    vede
    ;O]
    ___________
    ...

    Code:
    //   Title : vdpv2 (vede player version 2)
    //   Author : vede - 08/2010
    //   Target : PIC16F88
    //   IDE : MikroC PRO v3.8 (free edition 2Ko limited)
    //   Function : 8bits/8Khz .wav player (sound stored in an external 24LC256 memory)
    //   URL (all files) :  TODO
    //   PS : une en-tête en anglais ça fait quand même plus sérieux ;O]
    
    //
    // Les fusibles (ici en commentaires car configurés dans le projet MikroC)
    //
    // _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF &
    // _BODEN_OFF & _MCLR_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_IO
    
    //
    // Les connections des périphériques externes
    //
    sbit SDA at RA0_bit;   // PortA.0 = port SDA de la mémoire
    sbit SCL at RA1_bit;   // PortA.1 = port SCL de la mémoire
    sbit BP1 at RB4_bit;   // PortB.4 = port du BP
    
    //
    // Les 4 variables
    //
    int compteur;
    char octet;
    char flag;
    char i;
    
    //
    // La déclaration des 5 fonctions gérant logicielement le protocole I2C
    //
    void iic_Delay();            // Délai I2C (5µs)
    void iic_Start();            // Condition de START I2C
    void iic_Stop();             // Condition de STOP I2C
    void iic_Write(char octet);  // Envoi un octet reçu en argument
    char iic_Read();             // Lit et retourne un octet
    
    //
    // L'interruption sur TIMER1
    //
    void interrupt()
    {
        TMR1L = 6;       // définit une période de 125us(8Khz)
        TMR1H = 255;     //
        flag = 1;        //
        PIR1.TMR1IF = 0; // efface drapeau interruption TIMER1
    }
    
    //
    // Le début du programme
    //
    void main()
    {
        //
        //   L'initialisation du PIC 16F88
        //
        OSCCON =  0b1110000;  // FOsc 8MHZ
        ANSEL  = 0b00000000;  // ADC OFF
        TrisA  = 0b00000000;  // Ports A en sorties numériques
        TrisB  = 0b00010000;  // PortB.4 = entrée BP1
        //
        PR2    = 0b10000000;  // Définit la fréquence du Timer2(PWM) = 15.5Khz
        T2CON  = 0b00000100;  // Active le Timer2
        //
        INTCON = 0b01000000;  // Autorise les interruptions périphériques
        PIE1   = 0b00000001;  // Autorise l'interruption sur le Timer1
        T1CON  = 0b00000001;  // Active le Timer1
      
        //
        //  Le programme principal dans une boucle infinie
        //
        while(1)
        {
            while(BP1) ;            // attente d'un appui sur le BP
            //
            iic_Start();
            iic_Write(0b10100000);  // Adresse mémoire, mode écriture
            iic_Write(0b00000000);  // Envoi position pointeur adresse haut
            iic_Write(0b00000000);  // Envoi position pointeur adresse basse
            //
            iic_Start();
            iic_Write(0b10100001);  // Adresse mémoire, mode lecture
            //
            compteur = 32768;       // initialise les variables
            flag = 0;
            TMR1L = 240;            // initialise les valeurs du Timer1(30us)
            TMR1H = 255;
            CCP1CON = 0b001100;     // PWM ON
            INTCON.GIE = 1;         // INTERRUPTION ON
            //
            while(compteur)         // == si continue à jouer
            {
                if (flag)                // == si interruption du Timer1
                {
                    octet = iic_Read();      // lit l'échantillon
                    CCP1CON.RB5 = octet.RB0; // module la PWM
                    CCPR1L = octet >> 1;     // module la PWM
                    if (BP1) compteur--;     // si BP relaché...
                    flag = 0;
                }
            }
            //
            INTCON.GIE = 0;         // INTERRUPTION OFF
            CCP1CON = 0b000000;     // PWM OFF
            iic_Stop();
        }
    }
    
    //
    //  Les 5 fonctions gérant logicielement le protocole I2C
    //
    void iic_Delay()
    {
          //Delay_us(5);
          //
          asm nop;
          asm nop;
          asm nop;
          asm nop;
          asm nop;
          asm nop;
          asm nop;
          asm nop;
    }
    //
    void iic_Start()
    {
          SCL = 1;
          SDA = 1;
          iic_Delay();
          SDA = 0;
          iic_Delay();
          SCL = 0;
    }
    //
    void iic_Stop()
    {
          SDA=0;
          iic_Delay();
          SCL=1;
          iic_Delay();
          SCL=0;
          iic_Delay();
          SCL=1;
          iic_Delay();
          SDA=1;
    }
    //
    void iic_Write(char octet)
    {
          i = 8;
          while(i)
          {
                SDA = octet.B7;
                octet = octet << 1;
                iic_Delay();
                SCL = 1;
                iic_Delay();
                SCL = 0;
                i--;
          }
          SDA = 1;
          iic_Delay();
          SCL = 1;
          iic_Delay();
          SCL = 0;
    }
    //
    char iic_Read()
    {
          octet=0;
          i=8;
          while(i)
          {
                SDA=1;
                asm nop;
                SCL=1;
                octet=octet << 1;
                octet.RB0 = 0;
                asm nop;
                if (SDA==1) octet.RB0=1;
                SCL=0;
                i--;
          }
          SDA=0;
          iic_Delay();
          SCL=1;
          iic_Delay();
          SCL=0;
          return octet;
    }
    // The END...

  15. #14
    skydarc

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    super. je te remercie pour la réponse rapide. dis moi si tu as besoin d'info pour la lecture en fat16 sur carte sd. je te posterais bien mon code mais il est relativement lourd.

    ou alors je te l'envoie par mail. tien moi au courant

  16. #15
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    ps :

    convertir les .wav en 8bits/8khz MONO !!!
    et oui...

  17. #16
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Citation Envoyé par skydarc Voir le message
    super. je te remercie pour la réponse rapide. dis moi si tu as besoin d'info pour la lecture en fat16 sur carte sd. je te posterais bien mon code mais il est relativement lourd.

    ou alors je te l'envoie par mail. tien moi au courant
    re ;O]

    merci mais ça va aller...
    j'avais fait des essais dans ce sens...
    j'étais même monté en 16bits/11Khz avec sortie sur un réseau R2R 16bits
    dispaché sur PortA-PortD ;O]

    bonn'bidouilles...
    tiens nous au jus...

    pour info, un signal (parole, musique, son...) bien échantillonné
    en 8bits/8Khz MONO est tout à fait reconnaissable, audible...
    idéalement avec un petit "passe bas" 4700Hz (RC 4.7K / 10nF)
    suivi d'une amplification...

  18. #17
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Salut Arsene,

    Citation Envoyé par arsene de gallium Voir le message
    Je pense qu'on s'égare:
    Rodrigue parle de son MIDI, pas wav ou autre.
    En MIDI on ne lit que des codes genre:
    N° note, Vélocité, N° Canal.
    Il faut dans un premier temps décoder ces codes puis piloter les sons correspondants générés par un synthétiseur intégré.
    Exemple:
    je lis Touche C3 (60) avec la vélocité de 100 sur le canal 2
    Il faut piloter la partie synthèse pour qu'elle sorte un son correspondant à 261,6 Hz avec le niveau (vélocité) voulu.
    La partie synthétiseur peut être très simple, une onde carrée, qui sera émise à la fréquence voulue.
    De là à

    Il y a un monde que connait bien Yamaha, Roland, Korg mais qui n'est pas à la portée d'un débutant et surtout avec un PIC.
    toi aussi tu t'égares...
    tu confonds MIDI et synthèse sonore...

    le protocole MIDI envoi des messages (adresses, commandes...)
    qui peuvent "piloter" :

    -un synthétiseur...
    et/ou
    -un table de mixage (automatismes)
    et/ou
    -une banque de son .wav mémorisée
    et/ou
    -un sampler (restitution audio)...
    et/ou

    dans le cas de la "banque de son .wav", les messages MIDI
    sont interprétés dans ce style :
    chaque touche ("note") est assignées à des sons (via banques),
    selon la vélocité par exemple...
    ce qui permet de définir jusqu'à 127 "samples"/ touche...
    selon la vélocité par exemple...
    pareil pour chaque "touche"...

    des logiciels/plug-ins qui font ça :
    -GigaSampler
    -Halion
    -Live
    ...
    pleins d'autres en tapant "MIDI logiciel sampler" dans Gogle...

    à propos du MIDI, un logiciel très complet
    permettant de programmer et utiliser ce
    protocole dans tous types d'applications
    (synthèse, capteurs, sorties...)...
    c'est PURE DATA (windows/linux)...

    vede
    ;O]
    ____________
    ...

  19. #18
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    ps : après créer un contrôleur MIDI...
    (capable de générer des commandes MIDI, programmées ou via des capteurs (touches...))...
    ya pas de souci... même avec un petit PIC 8bits...
    regarde sur Google...

    "PIC contrôleur MIDI"...

    ...

  20. #19
    skydarc

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    MARTYYYYYY ca marche a la vapeurrrrrr!!!!!

    dsl lol pour mon enthousiasme. merci pour l'info. j'ai bien mon fichier wav qui est qui est sur ma carte mémoire qui est lu par mon pic.

    par contre je n'ai pas installé de filtre passe bas, et j'ai donc un très gros bip qui gène l'écoute. j'ai pourtant augmenté la fréquence via PR2 pour passer dans le domaine non audible mais je perds en qualité d'écoute (enfin c subjectif).

    merci pour tout. il me reste a optimiser mon code pour prendre en compte la fat et faire tout propre pour pouvoir lire plusieurs son.

    Ps: je suis étonné de la rapidité du transfert de donnée de la carte mémoire, je n'ai pas eu besoin de créer un buffer pour lire les données.

  21. #20
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    re ;O]

    YESSSSSSSSSSSSSSSSS ;O]

    Citation Envoyé par skydarc Voir le message
    (...)
    Ps: je suis étonné de la rapidité du transfert de donnée de la carte mémoire, je n'ai pas eu besoin de créer un buffer pour lire les données.
    on va pas s'en plaindre... car pour remplir un buffer (x bytes)
    il faut souvent plus de 125µs... ce qui génère un "blanc" audible...
    à chaque remplissages du buffer...

    bon sinon c'est cool, rajoutes un petit passe bas (ou deux),
    pour "éliminer" le "bruit" de la "fondamentale PWM"...
    et ça devrait le faire...

  22. #21
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    ps :

    avec mon système (pseudo 8>9bits),
    si PR2 > 0b1000000 ben ça peut "beuguer" sur certains échantillons...
    car :
    Th (temps période haut du signal PWM)
    peut devenir supérieur à
    Tc (temps de la période totale)

    d'où un "bug" audio/PWM...

    donc maintient PR2< 0b1000000

    avec un Quartz8Mhz ça donne 15.5Khz maximum...
    on est pas loin du double de 8Khz...
    et ça fonctionne à tous les coups...
    avec un petit filtre "passe bas" 4700Hz...

    .

  23. #22
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Edit :

    bon fera le point demain, la soirée à été longue, et j'écris des conneries....

    donc maintient PR2 > 0b1000000
    quelque soit ton Quartz...

    > ou <...
    on verra ça demain...
    ça me semblera tout de suite + clair...

    bonn'matinée...

  24. #23
    invite359f3846

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Bonjour,

    Je vois qu'on a le meme projet en commun ;op

    Ton code concernant la lecture d'une carte SD m'intéresse au plus haut point. Pourrais-tu me l'envoyer sur mon email stp?

    Je posterai le programme complet ainsi que les fichiers ISIS à la fin du projet.

    Merci!

  25. #24
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Salut,

    >donc maintient PR2 > 0b1000000
    >quelque soit ton Quartz...

    c'est bien ça...
    pour que Th ne soit jamais supérieur à Tc...cf formules dans datasheet...

    remarque : plus PR2 est bas, plus la fréquence PWM est haute...
    donc comme on ne peut "descendre" PR2 sous 128 on est limité
    si on veut une PWM HF...

    là je faisais mes tests avec FOsc=8Mhz... vais tenter avec un Quartz 20Mhz...
    ça devrait théoriquement permettre via une bidouille de bits de
    gagner en qualité niveau conversion numérique>analogique ...???

    Pour la SD Card, je m'étais pas foulé...
    j'avais utilisé la librairie fournie avec MikroC/MikroBasic...
    (Help>Libraries>MMC Card...)...
    bon elle à un gros inconvénient c'est qu'elle "pèse" plus de 2Ko...
    donc il faut la licence du compilo pour pouvoir l'utiliser/la compiler...
    bon sinon elle est "complète" (exemple, schéma, SD CARD, fat16...)...

    vede
    ;O]
    ___________
    ...

    Th = temps état haut
    Tc = temps période totale

  26. #25
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    ps :

    si vraiment la lecture est "rapide", tu peux tenter de restituer
    des fichiers 8bits/11Khz, voire 8bits/16Khz...

    au fait c'est quoi la "vitesse" de ton 4550?
    FOsc=48Mhz théoriquement... grâce à sa PLL?

  27. #26
    skydarc

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    dsl je n'ai pas pu repondre plus tot, j'ai du monde a la maison.

    donc oui j'ai bien mon 4550 qui est configuré en HS soit 48Mhz. mon PR2 et bien à 0x80. apparemment ma fondammentale PWM est a 7.75kHz, selon mon frequencemetre-oscillo.

    je ferai un test avec un echantillonnage plus fort. pour le moment je vais essayer avec un passe bas à 7.75kHz et annalyser ton code pour utiliser un timer et une interruption pour bien bloquer ma boucle a 8000khz car pour le moment j'en suis encore au delay.

  28. #27
    skydarc

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    me revoila,

    je confirme bien que mon signal sonore est bien parasité par une fréquence de 7750hz. j'ai testé en générant a cette fréquence via un petit logiciel trouvé sur le net, c'est bien la même. j'ai aussi testé une fréquence de coupure a 4700hz est je suis bien au dessus de ce que je veux ecouté. je te remercie pour les infos

  29. #28
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    Salut,

    la fréquence que tu "trouves" sur la sortie PWM m'étonne beaucoup...
    car avec un Quartz 48Mhz, et PR2=80h, et Prescaler TMR2=1,
    elle devrait plutôt "tourner" autour des 93Khz...

    cf "La Formule" :
    F(Hz) = 1/ [(PR2) + 1] * 4 * TOSC * (TMR2 prescaler value)
    (avec TOSC = 1/48000000 (à 48Mhz))

    Vite fait, je dirais que ton 18F4550 "tourne" à 4Mhz...
    là ça correspondrait à 7750Hz en sortie...
    après ça serait aussi étonnant que la librairie SDCard
    fonctionne avec une si basse fréquence (4Mhz)...
    mais bon... c'est bizarre ce 7750Hz avec FOsc=48Mhz...

    Comment l'oscillateur est-il configuré (fusibles HS+PLL+DIV)?
    Oscillator = HS, PLL, USB
    CPU System Clock = 96MHZ PLL DIV 2
    Oscillator Selection = DIVIDED BY 12 (48Mhz INPUT)
    Pour avoir une horloge à 48Mhz... avec un Quartz 48Mhz...

    Après, comme je l'écrivais, il est bon que la fréquence
    de la PWM soit au moins du double de la fréquence
    d'échantillonnage... soit au minimum de 16Khz pour
    "reproduire" des fichiers audios échantillonnés en 8bits/8Khz...

    vede
    ;O]
    ____________
    ...

  30. #29
    skydarc

    Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    c vrai autant pour moi, mon prediviseur est configuré a 12, ce qui peut changer beaucoup de chose.

    mais je confirme que je suis bien en HS+PLL, USB-HS soit 48MHz si je ne me trompe. pour ce qui est de la libraire elle est très basique, je les codais moi même elle est donc très simple comme je te le disais elle n'intègre pas encore la FAT de la carte mémoire.

    Je vais tenter diffèrent réglage soit en passant par un prediviseur a 6, soit en passant PR2 a FFh, bref je vais "bidouiller". je vous tiens an courant.

  31. #30
    invite7a49d0d5

    Cool Re : [Projet] Jouer la musique de Tetris avec un Pic ;op

    re ;O]

    bon ben c'est bien ça...
    la selection du diviseur de l'oscillateur sur 12...
    pour avoir théoriquement 48Mhz comme horloge principale...

    je me demande si c'est pas ton fréquencemètre qui se mélange un peu
    les pédales (because harmoniques, duty mouvant...) quand tu modules
    la PWM à environ 8000Hz...

    tentes un exemple (petit programme) qui lance la PWM,
    avec PR2=80h et en fixant CPP1RL(duty) = 40h (duty = 50%)
    et sans plus modifier CCP1RL et CCP1CON (le duty)...

    et là tu devrais trouver environ 93Khz...
    théoriquement...
    ;O]

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Avoir des acouphènes et jouer de la musique
    Par inviteaed394f0 dans le forum Santé et médecine générale
    Réponses: 2
    Dernier message: 06/07/2009, 12h23
  2. Projet PIC avec Proton +
    Par invitef06dda3e dans le forum Électronique
    Réponses: 2
    Dernier message: 15/01/2007, 18h22
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...