Je tiens à préciser qu'il existe d'autre Pic que le Pic18F27K42 qui font le NCO(Numerically Controlled Oscillator), donc ne vous arrêter pas à ce pic.
Comme promis je m'attaque à la création des sons Rtttl avec le Pic18F27K42 voici son datasheet ICI
J'ai donc utilisé comme je l'avais mentionné la norme NCO conseillé par notre confrère paulfjujo.
Pour faire simple, j'ai créé une fréquence de 1000 Hz, histoire de voir ce que ça donne, pour trouver la valeur à mettre dans les registres NCO1INCU, NCO1INCH, NCO1INCL, j'ai utilisé la formule conseillé par la datasheet de ce Pic18F27K42,
Voici la formule
J'ai pris comme horloge une Fréquence de 31250 Hz, qui est configurable dans le registre NCO1CLK
Après avoir appliqué la formule je trouve une valeur de H'FFFF' (65535) qui est à mettre dans les registres NCO1INCU, NCO1INCH, NCO1INCL.
Une fois fait, et le pic programmé je trouve au fréquencemètre 963 Hz,
Je me retrouve avec une imprécision, il est donc impossible de ce fier à la formule pour créer des notes de musiques, qui demande beaucoup de précision.
Moi qui croyais avoir la possibilité de créer des mélodies avec cette méthode, c'est rappé,
Code pour une fréquence théorique de 1000 Hz
Code : Tout sélectionner
BANKSEL PIR4 ; bank 57
bcf PIR4,NCO1IF ; désacivation des interruptions sur NCO1
BANKSEL RC7PPS ; bank 58
movlw 0x26 ; mode NCO1
movwf RC7PPS ; sortie sur RC7
BANKSEL NCO1CON ; bank 63
ini_nco1
clrf NCO1CON ;
clrf NCO1ACCU ;
clrf NCO1ACCH ;
clrf NCO1ACCL ;
movlw 0x00 ;
movwf NCO1INCU ;
movlw 0xFF ; pour avoir 1000 Hz = H'FFFF'
movwf NCO1INCH ;
movlw 0xFF ;
movwf NCO1INCL ;
movlw B'00000100' ; source d'horloge 31250 Hz
movwf NCO1CLK ;
bcf NCO1CON,PFM ; NCO1 fonctionne en mode fréquence d'impulsion cycle à 50% (bit 0)
bcf NCO1CON,NCO1POL ; le signal de sortie NCO1 n'est pas inversé (bit 4)
bsf NCO1CON,NCO1EN ; mise en service (bit 7)
Ci joins les fichier pour ceux qu'ils veulent l'essayer dans leur Pic18F27K42, avec cette fois-ci la source ASM complète : Prototype.zip
Pour vous montrer la précision des notes, voici un tableau avec la fréquence des notes de musique
Suite à l'intervention de paulfjujo, qui m'a démontré quand peut affiner la précision de la fréquence avec le registre OSCTUNE
Chose que j'ai faite, et là
voici les titres
1)
pour la partition que chabb à écrit (Furelise)2) Léve-toi, Soldat
3) Hey Jude
4) Rondo Alla
5) Boléro de Ravel
6) Mission Impossible
7) Laurel And Hardy
8) Davy Croquette
9) Eurovision
10) Benny Hill
Ce qui donne ceci en vidéo
https://www.youtube.com/watch?v=x3dp2FG9Rtw
Je fourni pour ceux qui voudrais faire une modification ou un essai, le code ASM, et le code compilé de cette vidéo,
Comme ça, si vous possédez le Pic18F27K42 vous pourrez tester le programme, je vais faire un petit schéma.
Schéma
Je tiens à signaler que j'ai utilisé un vieux haut parleur d'une veille télévision à tube cathodique que j'ai cannibalisé, c'est un haut parleur de 4 ohms, mais vous pouvez prendre un haut parleur de 8 ohms, bon ce plan n'est pas très bon, mais il fonctionne, par la suite j'utiliserai un ampli de classe D, comme sur l'image ci-dessous
Voici le datasheet de l'ampli : PAM8403
je vous rappelle que la sortie du NCO1 se fait actuellement sur RC7 : fichiers code, et compiler de cette vidéo : Prototype2.zip
Il y a aucun calcul, le pic fait que lire la fréquence qui est déjà près calculé pour le NCO1, ainsi que la durée des notes.
Tout se trouve dans la partition qui est écrit en hexadécimal, idem pour le titre de la mélodie.
Pour l'instant la durée des notes est géré par une temporisation, ce qui ne rends pas le pic autonome... par la suite je compte me servir
d'un timer qui compteras par palier de 1ms.
Maintenant que tout fonctionne, je vais vous parlez du logiciel Rtttl, que vous pouvez télécharger ICI, le logiciel Rtttl sert à écouter les sons au format Rtttl, créer des sons Rtttl, modifier des son Rtttl, et générer un fichier pour la norme NCO1.
Je vous parlerai juste la façon de généré une mélodie pour NCO1 , pour ceux faire, il vous faut éditer la mélodie, il vous suffit ensuite de faire comme sur l'image ci-dessous.
Un code va être généré dans le presse papier, ce code et à mettre en zone mémoire programme de votre pic, ou eeprom, dans le cas du Pic18F27K42 vous pouvez à peu près mettre 40 morceaux de musiques de 2 minutes en mémoire programme(ce qui vous fait 80 minutes de musiques)
Pour ceux qui voudrais changer la fréquence d'horloge du registre NCO1CLK il vous faudra le faire dans le code ASM, et dans le logiciel Rtttl ou cela est prévu, comme sur l'image ci-dessous
Dans cette exemple, j'ai pris une Fréquence d'horloge NCO1 31250 Hz ( mode 4)
Si vous changer la fréquence d'horloge du registre NCO1CLK dans le code ASM, vous devez le faire aussi dans le logiciel Rtttl, sinon les notes seront erroné, les valeurs doivent être identique en code ASM et logiciel Rtttl
Maintenant je vais m'attaquer à le rendre autonome, sans que celui-ci soit bloqué avec les temps des notes, de plus je prévois un réglage avec bouton, pour affinement du registre OSCTUNE
Ben voilà c'est fait, avec une vidéo en prime
https://www.youtube.com/watch?v=0bgR6P6I6U4
Dans cette exemple, je peux régler osctune, ecrire en eeprom, faire clignter une led sans que cela affecte la mélodie, je vous laisse pour les plus intéressés le fichier code, ainsi que le fichier compiler de cette vidéo que vous pouvez télécharger ICI


j'ai pas encore testé de mon coté ...
à moins de prendre une base de temps differente ..