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
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
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.
à 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 !
software:
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 ?
A+


Damned !