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 le langage C !

Modérateur : Jérémy

Generateur DTMF 18F27K42 [Solved]
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » mer. 5 oct. 2022 18:39

bonjour,

J'ai pu récuperer sur le web des fichiers DTMFxxx.wav à 11025Hz 8 bits PWM
L'application MikroC permet
via une compilation conditionelle #define Capture_Fichier_Wav
de lire chaque fichier Wav et d'en recuperer une table de Datas, qui sera ensuite mise dans la zone flash du PIC

Via Realterm terminal :
Capture fichier Wav :
* Mettre le nom du fichier wav à charger
* activer CAPTURE du terminal Realterm
* attendre la demande de fichier (message sur terminal)
* clicker sur SEND
* une fois le fichier affiché sous forme de listing datas
STOP capture
EDIT edition de la capture pour copier/coller les données de la table TEXTE
dans un fichier temporaire ou on cumulera toutes les tables .
exemple : voir DTMF_16_Tables_code.c.txt
DTMF_16_Tables_code.c.txt


une fois les tables recuperées ,on peut désactiver la saisie des fichiers wav ...
#define Capture_Fichier_Wav à mettre en commentaire et recomplier le fichier

16 fichiers Wav -> 16 tables de 5512 bytes en flash
La version *.Hex est compilée sans la saisie des DTMFxxx.wav,
les tales DTMF étant déja dans le programme

On a donc en Flash les 16 tables
codage de 0 à 9 , puis Dieze et Etoile , puis A,B,C,D
Le programme affiche les adresse en flash de chaque table et joue le contenu sur la sortie PWM. RC2
+ filtre passe bas .. comme pour les fichiers sons. (ex Bourrepif.wav ou toutnu toubronze.wav)

Code : Tout sélectionner


const unsigned char DTMF_0
[5512]={
0x75,0x5E,0x52,0x5A,0x75,0x98,0xB1,0xB6,0xA3,0x80,0x5E,0x4B,0x50,0x68,0x86,0x9D,
 0xA2,0x97,0x85,0x76,0x72,0x79,0x83,0x88,0x82,0x73,0x65,0x63,0x70,0x8A,0xA3,0xB0,
...};
 const unsigned char  DTMF_1[5512]={
 0xB6,0xB3,0xA0,0x82,0x65,0x53,0x52,0x5F,0x74,0x86,0x8F,0x8B,0x81,0x76,0x74,0x7C,
 0x8E,0xA0,0xA9,0xA4,0x8F,0x72,0x57,0x47,0x4A,0x5E,0x7A,0x95,0xA4,0xA4,0x98,0x86,
 ..};
....
etc ..
 const unsigned char  DTMF_D[5512]={
 0x5F,0x7B,0x8D,0x8B,0x7C,0x73,0x7E,0x97,0xA8,0xA1,0x81,0x5A,0x46,0x53,0x78,0x9A,
...


J'ai tenté d'utiliser une table de pointeurs ,pour acceder à une données d'une table pointée...
SANS SUCCES ! Je ne sais pas si MikroC sait gerer des pointeurs Long 24 bits ou 32 bits..

J'ai détourné ce probleme en utilisant un Switch , aiguillages vers la bonne table ( 0 à 15 )

à noter :
#define FLASH_ROW_ADDRESS 0x2000 MikroC PRO utilise moins d'espace code que XC8 !

Nota :
Le timer2 ne peut pas etre calé à 11025 Hz avec PR2=255
necessite PR2=180 avec FOSC=64MHz
or CCPR1H et CCPRL ne couvrent 10 bits de résolution QUE SI PR2=255
le maxima actuel (100% sortie PWM) est atteint avec 744 ...
Les datas des fichiers Wav évolue de 0 à 184 (moyenne=64) ( ce sont des datas 8 bits!)
donc peuvent etre multipliée par 4, pour definir une plus grande amplitude de sortie PWM ..
mais pas forcément necessaire ...

voir le fichier resultat sur terminal
capture_Run_PIC18F27K42_Play_DTMF_files_WAV_in_Flash_2022_1005.txt


MikroC -> View -> Statistic -> ROM Memory constants
permet de voir où sont rangées les tables ...
ça coincide ( for heureusement) avec la table des pointeurs récupérées et affichée par l'application.

:eek:
:!!: à part Mesg2 ? 0006 comme adresse ? :!!:
ou est-ce que ça déborde .... 131072+6 ?
remarque :
Le rangement des tables ne se fait pas dans l'ordre des déclarations ! zarby !

MikroC_Statistics__ROM.jpg


software:
_18F27K42_Play_DTMF_wav_en_flash_2022-1005.zip


Je n'ai pas de décoder DTMF (software ou Hardware ) pour verifier si cette generation DTMF en PWM
peut etre reconnue !
car à l'oscillo c'est relativement bruité...
et le DTMF est certaiment plus exigeant qu'un morceau de musique ou parole.

TempsX ou Barbar64 ?

:sifflotte: une version ASM ..vu que les tables sont déja pretes ? au DB pres..

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par paulfjujo le lun. 21 nov. 2022 14:06, modifié 1 fois.
Aide toi, le ciel ou FantasPic t'aidera

Generateur DTMF 18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » jeu. 6 oct. 2022 02:25

Bonjour paulfjujo, et tout le forum,

J'ai vu dans ton code C les tables, je teste ce Week-end avec ce module LA, ça nous fait 43008 octets en table, ça passe largement avec le Pic18F27K42

C'est quoi ce doublon début table DTMF_0[5512] et fin de table DTMF_0_RAM[5512]

2688 octets par table si je ne me trompe pas, ça nous donne un temps de 2688 octets / 11025 Bytes/Sec = 0,24 seconde, est ce suffisant pour un décodage DTM :?:

Je crois avoir vu dans un des fichier de Barbar64 ou il parle d'une norme de temps pour le DTM, mais je ne me rappelle plus ou j'ai vu ça.

Enfin bref, l'expérience prouvera si c'est bon ou pas bon, de toute façon je vais le réécrire en version ASM :-D

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

Generateur DTMF 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » jeu. 6 oct. 2022 18:40

bonsoir,

Temps-x a écrit : ça nous fait 43008 octets en table, ça passe largement avec le Pic18F27K42
... 2688 octets par table si je ne me trompe pas


oops Damned !
tu viens de soulever un lievre .. ou un éléphant ?

en vérifiant
table DTMF0 de la ligne 192..à 360 = 168 lignes *16 = 2688 datas !
j'avais meme pas verifié avant car le fichier original 0.WAV donne bien une taille de 5512 datas
à l'offset +40 du fichier wav
voir capture ecran

WxHexEditor_0.Wav.jpg


:!!: il trainait un bug ici, du fait que je lis d'abord les 64 premiers bytes du fichier WAV,
qui contient les infos techniques
.. et les blocs de 128 datas .. affichées seulement avec 64 !
ça n'affectait pas le stockage en flash ! mais effectivement les tables (format texte ) étaient tronquées

Code : Tout sélectionner


        if
(Flag_Buffer1==1)
             {  
               BN
++;   // Block number
               if(Affiche_Detail==0)
               {
              // CPrint("\r\n Bloc # ");
              // WordToStr(BN,CRam1);Print(CRam1);
              // CPrint(" Offset= ");
             //  WordToStr(Index1-64,CRam1);Print(CRam1);
              // CRLF1();
             //   Imprime_Asc_Hex( p1,64);
     // bug ici : taille 64  au lieu de 128
                Imprime_Asc_Hex( p1,128);
                }
                else
                
{
                Int2Asc(BN,CRam1);
               UART1_Write(' ');Print(CRam1);
               UART1_Write(' '); print_hex_32(L2);
               CRLF1();
                }
 


pour ma peine , j'ai donc reconstruit les 16 tables .... à partir des 16 fichiers wav
qui font donc le double en longueur ...
mais comme j'avais déja reservé 5512 bytes dans les tables , le probleme n'a pas été mis en evidence ..
de plus les adresses Flash avaient bien un deplacement de 5512..

à noter , j'ai inclus les tables dans un fichier externe ,
au lieu de les mettre dans le code ...

la duree devrait donc faire quasiment 0,5 sec.


Temps-x a écrit :C'est quoi ce doublon début table DTMF_0[5512] et fin de table DTMF_0_RAM[5512]

c'est PRESQUE un doublon , pas le meme nom de table..
parce que j'ai voulu tester la difference entre l'usage d'une table en ROM et l'usage d'une table en RAM ..
c'est Kif Kif on peut la supprimer..

Code et tables à inclure..
_18F27K42_Play_DTMF_wav_en_flash_2022-1006.zip


DTMF_16_Tables_code.c.txt
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Generateur DTMF 18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » ven. 7 oct. 2022 02:10

Bonjour paulfjujo, et tout le forum,


paulfjujo a écrit :Source du message mais comme j'avais déja reservé 5512 bytes dans les tables , le probleme n'a pas été mis en evidence ..
de plus les adresses Flash avaient bien un deplacement de 5512.

:sifflotte: décidément il y a comme un problème dans ton éditeur de conversion, moi je ne trouve pas 5512 octets mais 5376 octets (336 lignes x 16)

Bon ça nous fait une mémoire Flash remplit de 16 caractères x 5376 octets = 86016 octets..... trop de place avec ce Pic là, on c'est plus quoi on faire :-D

paulfjujo a écrit :Source du message la durée devrait donc faire quasiment 0,5 sec.


Ben d'après les calcul 5376 octets / 11025 Bytes/Sec = 0,48 seconde, ça doit être suffisant pour le temps d'une touche

J'ai commencer le programme...

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

Generateur DTMF 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » dim. 9 oct. 2022 14:50

bonjour à tous,


il manquait en effet 117 bytes à la fin du fichier, car avec un mode de lecture par bloc de 128 bytes, le dernier n'etait pas validé..
J'ai rajouté un test avec un timeout de 32 mS (Timer6) pour valider le Flag_buffer1
sur nombre de bytes atteint (128) ou Timeout ecoulé..(>30mS) ... sachant qu'il faut moins de 30mS pour lire 128 bytes.
Le fichier est donc maintenant complet
voir fichier capture terminal resultant

capture_Run_PIC18F27K42_Play_DTMF_files_WAV_in_Flash_2022_1009.txt


le programme MikroC
_18F27K42_Play_DTMF_wav_en_flash_2022-1009.zip

contient le source C, le chargeur *.hex, ... :sifflotte: et aussi le *.lst et le *.asm !

DTMF_16_Tables_code .inc.txt


à noter l'outil Media Info, assez interessant
Media_Info_sur_DTMF_0.wav.json.jpg


et WinHexEditor 0.24 Beta for Windows
permettant aussi , bien plus rapidement ,de recuperer les datas d'un Wav,
:sifflotte: sans rien programmer..
il suffit ,avec NoteTab++, de remplacer un blanc par ,0x.. apres la premiere valeur .. remplacer de partout
debut du fichier
52 49 46 AC 15 00 00 ..etc...
on obtient :
52,0x49,0x46,0xAC,0x15,0x00,0x00 .....etc ...
il n' y a plus qu' à rajouter avant le premier element
const unsigned char DTMF_0[5512]=
{ 0x..

5512 -> de la position 44 à 5556 du fichier DTMF_0.wav
nota: par facilité j'ai strappé les 20 premiers bytes de data entre 44 et 64 ..avec 1er bloc lu=64 bytes
les 16 fichiers originaux utilisés :
16_DTMF_Mono_11025.zip


Reset à savoir si le son généré est assez pur ( sans trop d'harmoniques) pour etre reconnu par un decodeur hardware .

nota :
18F27K42 utilisé avec FOSC interne 64MHz ...
on a aussi la possibilité de reglage fin des 2 fréquences (DTMF) mixées via OSCTUNE ( gamme +- 3%)
via un potar sur une voie analogique ..pour modifier OSCTUNE..sans modifier le programme.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Generateur DTMF 18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » dim. 9 oct. 2022 16:47

Bonjour paulfjujo, et tout le forum,

Je n'ai pas le bon code pour la numéro N°1 ni celle du N°7, mais dans l'ensemble sa fonction bien, je vais mettre une vidéo pour que tu puisses voir le résultat.

Les touches qui son actuellement opérationnelle, avec code correspondant à la datasheet son 0, 2, 3, 5, 6, 8, 9, A, B, C, D, *, #

C'est très stable, les touches revient toujours au code qui leurs corresponde, reste à régler le problème sur les touches 1 et 7

Je vais refaire des essais pour voir d’où ça peut venir, je pense à un problème qui viendrais de mon programme, c'est à dire de moi :oops:

Car séparément elles sont ok.

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

Generateur DTMF 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » dim. 9 oct. 2022 19:02

bonjour Temps X,

J'ai continué mes tests de mon coté
avec AUDACITY qui lit ,via l'entree Micro, le DTMF_06 (sortie PWM du PIC via filtre passe bas)..
Analyse spectrale FFT sur 1024 points , pour trouver les 2 frequences mixées
en ajustant mon delai de 88µS -> 85µS , je suis tombé sur le delai optimum, au plus pres des frequences theoriques..
voici la table des resultats
il suffit de recuperer avec excel le fichier spectre.txt exporté via Audacity,
trier les donnes Freq et niveau en ordre croissant
Les 2 premiers valeurs donnent les 2 frequences emergentes ..

Là j'ai joué sur le delay ..mais via OSCTUNE ça doit pouvoir le faire aussi ...

j'ai rajouté la saisie de note=x au clavier
x de 0 à 9 pour jouer les différentes notes DTMF .. et lancer la capture par AUDACITY

j'avais trouvé un outil
Spectrum Analyser PAS ... en version demo
mais on ne peut pas capturer ,figer le spectre .. sinon envoyer 69$
..en plus , duree d'execution 3mn maxi ..
=> poubelle

Excel_et_Audacity_DTMF_6_pwm_play_Analyse_2022-1009.jpg


version compilée pour jouer les DTMF déja stockés en Flash ...
_18F27K42_Play_DTMF_wav_en_flash_2022-1009_joue.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Generateur DTMF 18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#8 Message par Temps-x » dim. 9 oct. 2022 19:11

Re

Temps-x a écrit :Source du message je pense à un problème qui viendrais de mon programme, c'est à dire de moi :oops:


Et ben oui et non, car on réalité mon programme ne comporte pas d'erreur, mais vu la rapidité de ce pic il n'avait pas le temps de prendre en compte

les nouveaux paramètre sur le PORTB, et en plus ce qui n'arrange rien c'est l'assembleur qui est extrêmement rapide pas comme le C :lol: :langue:

J'ai donc mi des pauses de 10 ms entre chaque changement de touche, et maintenant tous est ok, toutes les touches corresponde bien au code de la datasheet.

Pour éviter un filtre j'ai régler le PWM à 88400 Hz, avec une résistance de 1000 ohms en sortie de celui-ci, impeccable, rien à faire pour le duper

Je prépare la mise en page de tous cela dans la section ASM.

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

Generateur DTMF 18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » dim. 9 oct. 2022 21:59

Bonsoir paulfjujo, et tout e forum,

Voila tout à était mi ICI,

paulfjujo a écrit :Source du message j'avais trouvé un outil
Spectrum Analyser PAS ... en version demo
mais on ne peut pas capturer ,figer le spectre .. sinon envoyer 69$
..en plus , duree d'execution 3mn maxi ..
=> poubelle


:lol: 69$ il prenne les gens pour des pigeons, J'aurais fait la même chose que toi

Pour analyser les fichier Wav, j'utilise un petit programme que je me suis fait il y a déjà quelque année.

Detection.jpg



==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Generateur DTMF 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » lun. 10 oct. 2022 20:19

bonjour,

j'ai testé aujourd'hui avec TMR2 à 88398 Hz ..soit un surechantillonage de 8x 11025
à cette frequence 88Khz, la carte SON sert de filtre passe bas .. pas de besoin de filtre

mais si on regarde, compare les 2 signaux à l'oscillo ..on peut verifier que le filtre est quand meme efficace , et utile.
ici 10K +4,7nF
Audacity ne voit pas trop de difference entre AVEC ou SANS filtre ..puisque la carte SON a son propre filtrage .
Le resultat analyse FFT 1024 points ne montre quasiment pas de difference
test avec DTMF_6 .. precision des 2 frequences : correcte.

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


Retourner vers « Langage C »

Qui est en ligne

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