Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Musique Rtttl avec NCO1
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » mar. 8 juin 2021 00:13

Bonjour tout le monde,

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

Équation du NCO1.png


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, :sifflotte: Je m’aperçois que la formule ne fonctionne pas !! :sad:

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é, :roll: à moins que quelle qu'un connaisse le pourquoi de la chose :-D

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

Fréquence des notes de musique.jpg


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à :eek: surprisse !! les fréquences était à peu près correct, j'ai donc voulu faire des essais avec plusieurs extrait de mélodie.

voici les titres

1) Merci ! 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

Rtttl.jpg


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

Ampl classe D.jpg


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.

Utilisation.jpg


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) :wink:

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

Changement NCO1.jpg


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


:sifflotte: Bon, j'attends des compositeurs......

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 20 nov. 2022 13:15, modifié 51 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Musique Rtttl avec NCO1
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#2 Message par F6FCO » mar. 8 juin 2021 10:42

Hello,

J'ai cherché sur le net mais rien trouvé de bien clair, à part que c'est des sons complexes, tu peux expliquer ce que sont les sons rtttl ?
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Musique Rtttl avec NCO1
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » mar. 8 juin 2021 11:24

bonjour,

Temps-x a écrit :
je trouve pour 1000 Hz une valeur à mettre dans les registres H'FFFF' (65535), une fois fait, et le pic programmé je trouve au fréquencemètre 963 Hz.
Je m’aperçois que la formule ne fonctionne pas, 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é, à moins que quelle qu'un connaisse le pourquoi de la chose.



Attention voir dataheet page 93
le 32KHz coorespondrait plutot à ... Frequence dispo 31Khz ou 31,25KHz

à verifier en mettant RA6 clockout dans la config bit ..et frequencemetre dessus
je retesterai aussi de mon coté en C ..
Aide toi, le ciel ou FantasPic t'aidera

Musique Rtttl avec NCO1
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » mar. 8 juin 2021 12:15

Re

F6FCO a écrit :Source du message tu peux expliquer ce que sont les sons rtttl ?


Voici une explication ICI

Le programme pour lire est composé des sons Rtttl avec des cours exemple ICI

paulfjujo a écrit :Source du message Attention voir dataheet page 93
le 32KHz coorespondrait plutot à ... Frequence dispo 31Khz ou 31,25KHz


Ok, pour voir si ta théorie est la bonne je prends 500 Hz comme fréquence de sortie avec un calcul sur une horloge de 31250 Hz

31250/((2*500Hz)*1048575) = 33554 décimal soit 0x8312 hexadécimal

:-D Essai en réelle... :roll: trouvé au fréquencemètre 494 Hz :sifflotte: bon on se rapproche de la vérité, manque 6 Hz... c'est énorme en musique(voir le tableau en post #1)

On inversent la formule je trouve une fréquence d'horloge de 30875 Hz c'est très près de 31000 Hz


Test sur RA6
CONFIG CLKOUTEN = ON ; Bit d'activation de la sortie d'horloge

J'ai rien qui sort...
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Musique Rtttl avec NCO1
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#5 Message par F6FCO » mar. 8 juin 2021 14:45

Merci pour le lien,
J'ai été écouter la vidéo mais je n'ai pas perçé plus parce que mon neurone est actuellement branché conversion A/D et je suis monotâche.
Mais j'ai apprécié et çà rejoint un de mes (multiples) projets futurs. J'avais déjà bricolé avec de la musique simple ( viewtopic.php?f=20&t=683 ), l'idée sera de coupler 5 PIC qui feront chacun leur note pour simuler les 5 cordes d'une guitare et pouvoir ainsi jouer des accords et des partitions de guitare complexes, genre Flamenco ( j'aime bien le flamenco, des fois je me fais mal et çà y ressemble).
Mais bon c'est pour plus tard, on ne peut pas être partout :-)
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Musique Rtttl avec NCO1
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » mar. 8 juin 2021 17:54

Temps-x a écrit :...
Essai en réel... trouvé au fréquencemètre 494 Hz bon on se rapproche de la vérité, manque 6 Hz... c'est énorme en musique(voir le tableau en post #1)
On inversent la formule je trouve une fréquence d'horloge de 30875 Hz c'est très près de 31000 Hz


6/500=> erreur de 1,2%

Attention avec FSOC interne , on peut avoir + - 3% via le reglage de OSCTUNE ..
donc on pourrait corriger cette erreur .
FOSC interne peut aussi varier avec la valeur de VCC ( sur la gamme 3.3 à 5V)

reste à voir plutot avec un pilotage par Quartz au lieu de FOSC interne
si cela peut eviter des ajustements manuels.

:!!: j'ai pas encore testé de mon coté ...
Aide toi, le ciel ou FantasPic t'aidera

Musique Rtttl avec NCO1
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » mar. 8 juin 2021 19:35

Re

F6FCO a écrit :Source du message J'ai été écouter la vidéo mais je n'ai pas percé plus parce que mon neurone est actuellement branché conversion A/D et je suis monotâche.

C'est une veille vidéo, qui ne reflète pas la réalité, depuis le programme à considérablement était améliorer (voir la partition de chabb avec le nouveau programme ICI)

paulfjujo a écrit :Source du message reste à voir plutot avec un pilotage par Quartz au lieu de FOSC interne
si cela peut eviter des ajustements manuels.


Mon bute c'est de ne pas bidouiller manuellement, car je veux que tout le monde puisse profiter de ce programme quand il fonctionnera :sifflotte:

- on mets le programme dans le pic, on lit la partition qui se trouve en mémoire programme.

Je vais essayer avec un quartz à 20 Mhz, dans la soirée ....

paulfjujo a écrit :Source du message :!!: j'ai pas encore testé de mon coté ...


:roll: Prends ton temps Paul, rien ne presse :wink:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Musique Rtttl avec NCO1
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » mar. 8 juin 2021 20:14

Test reel avec appli en MikroC
Via le terminal , je peux modifier la source NCO1clock, l'INCREMENT ,
le mode de commande : via clavier terminal, ou valeur ADC 12 bit
et j'ai rajouté la possibilit de modif in line du OSCTUNE
gamme de -32 à + 31 pour -3% à +3%



Help
Help commandes :
NCO1CLK= (0 à 7) :
CONSIG=xxxxxxx 7 digits
INCREM=xxxxxxx 7 digits
MODE=x 0=Keyboard 1=Analog
OSCTUNE=+ ou -


NCO1CLK=4 (31KHz)

avec Osctune=0 j'ai 505Hz pour une consigne de 33825 correspondant bien à 500Hz ( en fait 499.999 !)
avec le clavier j'ai baissé jusqu'à OSCTUNE=-8 pour obtenir 500 HZ via mon analyser SQA 50MHz
A la limite on pourrait donc utiliser la liaison UART pour calibrer le LA 440HZ ..
et mettre le coeff correcteur OSCTUNE en EEPROM .. pour économiser un quartz + 2 capa

OSCTUNE=-
Mode 0=Keyboard NCO1CLK_Choix=4 Increment = 33825, Freq Output= 499.999
OSCTUNE=-
Decremente OSCTUNE)
OSCTUNE= -12
Mode 0=Keyboard NCO1CLK_Choix=4 Increment = 33825, Freq Output= 499.999
Mode 0=Keyboard NCO1CLK_Choix=4 Increment = 33825, Freq Output= 499.999

NCO1_18F27K42_500Hz_adjut_via_OSCTUNE.jpg


nota: j'ai bien ma sortie RA6 Clockout

_18F27K42_NCO1_tests_2021-06.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Musique Rtttl avec NCO1
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » mer. 9 juin 2021 00:21

Re

Merci ! pour ton test,

Je vais faire un test en jouant sur le registre OSCTUNE, :roll: mais !! je me pose une question :?:

Si une fréquence est bonne parce qu'elle a été calibrer avec le registre OSCTUNE, par exemple dans ton cas c'est 500 Hz, les autres fréquence vont t'ils suivent le même décalage.....

Si les décalages se suivre, c'est tout bon, dans ce cas là ont peut écrire un petit programme pour réglage automatique du registre OSCTUNE

:roll: Pour un réglage automatique, j'ai une petite idée : On fabrique une fréquence de 1000 Hz avec le registre NCO1, puis le programme vérifie si il y a bien 1000 Hz, si c'est pas le cas le programme augment ou diminue la valeur de OSCTUNE, une fois fait le programme refait une vérification jusqu’à temps que la valeur soit bonne.

J'ai hâte d'écrire le programme avec réglage automatique, ça doit être marrant à faire, et surtout une bonne combine. :wink:

Je vais regarder pourquoi je n'ai pas de sortie sur RA6

Merci ! pour l'aide apporté.

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Musique Rtttl avec NCO1
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » mer. 9 juin 2021 08:55

bonjour temps-X et à tous,

Temps-x a écrit :Si une fréquence est bonne parce qu'elle a été calibrer avec le registre OSCTUNE, par exemple dans ton cas c'est 500 Hz, les autres fréquence vont t'ils suivent le même décalage.....


l'erreur est proportionnelle en %, donc la correction doit s'appliquer à toutes les frequences

Temps-x a écrit : On fabrique une fréquence de 1000 Hz avec le registre NCO1, puis le programme vérifie si il y a bien 1000 Hz, si c'est pas le cas le programme augmente ou diminue la valeur de OSCTUNE, une fois fait le programme refait une vérification jusqu’à temps que la valeur soit bonne.
J'ai hâte d'écrire le programme avec réglage automatique, ça doit être marrant à faire, et surtout une bonne combine. :wink:


:!!: tu ne peux pas simplement ...
because ta mesure de frequence est AUSSI basée sur le timing FOSC
donc la proportionalitée est conservée , la mesure restera la meme

idea ! à moins de prendre une base de temps differente ..
exemple le 1Hz de la sortie SQWE RTC -> RB0 -> interrupt comptage pendant precisément 1 seconde
...independant de FOSC.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 50 invités