mardi 15 janvier 2013

carte de voeux musicale

De nos jours les cartes de voeux musicales sont virtuelles, on les envoie via internet. Mais il y a un certain nombres d'années, je ne sais pas si ça existe encore ou si ça a été une passade, on pouvait acheter une carte de voeux qui jouait de la musique lorsqu'on l'ouvrait.

Voici un projet qui démontre toute la simplicité de ce type de gadget. Il s'agit de créer le circuit d'une telle carte de voeux. Pour le développement on utilise un PIC10F200 en format PDIP-8. Mais s'il nous prenais la fantaisie d'assembler réellement une telle carte il suffirait d'acheter un PIC au format DFN, 1 piézo et une pile au lithium CR2012. Le piezo speaker constitue l'élément le plus mince et la pile avec 1,2mm d'épaisseur le plus épais. C'est 3 éléments montés à plat s'insèreraient dans une carte de voeux sans que se soit trop apparent. Il s'agirait en plus de bricoler un commutateur plat qui mettrait la pile en contact avec l'alimentation du MCU seulement au moment de l'ouverture de la carte. Si vous avez le désir de fabriquer une telle carte je laisse au soins de votre imagination de défi de créer un tel commutateur.

matériel requis

circuit

code source


Le code occupe 127 instructions, même pas la moitié du maigre 256 instructions de ce MCU. Il reste de la place pour ajouter 128 notes à la mélodie...

Le TIMER est configuré pour être contrôlé par Fosc/4 avec un diviseur de 4 ce qui donne 4usec par tick. Les valeurs de la table scale sont donc les valeurs représentant la durée d'un demi-cycle pour chaque fréquence en multiple de 4usec. Les valeurs ont été calculée à l'aide du tableur d'openOffice et arrondi à l'entier le plus proche.

Pour la durée de la note il a fallu prendre un compteur 24 bits même si les valeurs de la table duration sont elle calculée en multiple de 8usec, la première valeur étant de 125000. 8usec parce qu'on ne soustrait qu'une seule fois la valeur de freq_dly à delay_cntr par cycle alors que freq_dly est compter 2 fois par cycle.

Notez que la macro delay_half_cycle réinitialise le timer en ajoutant la valeur freq_dly à la valeur qui est déjà dans le compteur plutôt que par une assignation. Ceci est pour tenir compte du fait que le temps continue à s'écouler entre le moment ou 1 demi-cycle se termine et ou on réinitialise le timer pour le demi-cycle suivant. Ceci cré une onde parfaitement carré malgré le temps d'exécution supplémentaire encouru à la fin du 2ième demi-cycle par l'exécution de la macro skip_timeout et du plus la fréquence est plus juste.

Il n'y a pas grand chose à ajouter à propos de ce code qui est en définitive des plus simple dans sa réalisation.

3 commentaires:

  1. Merci pour le tuto :-)
    je viens de le programmer dans dans PIC10F200
    il fonctionne même sur un petit écouteur de Walkman
    Mic**

    RépondreEffacer
  2. encore merci pour ce tuto !
    voici le code pour une mélodie de Noël
    ; ---------- mélodie de Noël "Mon Beau Sapin Roi des Forêts" ---------
    dt .32 ; mon
    dt .37 ; beau
    dt .69 ; sa
    dt .37 ; pin
    dt .39 ; roi
    dt .41 ; des
    dt .73 ; fo
    dt .57 ; rets
    dt .73 ; que
    dt .71 ; j'ai
    dt .73 ; me
    dt .74 ; ta
    dt .84 ; ver
    dt .39 ; du
    dt .37 ; re
    dt .76 ; quand
    dt .76 ; par
    dt .73 ; l'hi
    dt .62 ; vert
    dt .76 ; bois
    dt .76 ; et
    dt .74 ; gué
    dt .58 ; rets
    dt .74 ; sont
    dt .74 ; dé
    dt .71 ; pouil
    dt .60 ; lés
    dt .74 ; de
    dt .74 ; leurs
    dt .121 ; at
    dt .89 ; traits
    dt .32 ; mon
    dt .37 ; beau
    dt .69 ; sa
    dt .37 ; pin
    dt .39 ; roi
    dt .41 ; des
    dt .73 ; fo
    dt .57 ; rets
    dt .73 ; tu
    dt .71 ; gar
    dt .73 ; des
    dt .74 ; ta
    dt .84; par
    dt .39 ; ru
    dt .37 ; re
    dt H'FF' ; fin

    RépondreEffacer
  3. Bonjour,
    j'ai trouvé sur le Net un générateur de mélodie polyphonique, je pense que cela pourrai t'intéresser.
    grâce à 3 logiciels ( Python 2.7, MuseScore, WinAVR ) on on transforme un fichier MIDI ou WAV en mélodie que l'on peut jouer avec un Attiny85 et 2 HP piezzo ou 2 mini HP , ça joue très bien les mélodies, je te donnes le lien:
    http://hackaday.com/2011/11/22/musical-greeting-card-with-minimal-parts/

    RépondreEffacer