PIC16F887 problème sortie PWM
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

PIC16F887 problème sortie PWM



  1. #1
    Fantique

    PIC16F887 problème sortie PWM


    ------

    Bonjour à tous,

    Je suis en dernière année de technologie de l'informatique et pour mon travail de fin d'étude je réalise un montage s'approchant d'une boîte à rythme(Fonctionnement basique).

    Je bloque sur la sortie PWM de mon PIC 16f887, j'ai l'impression de ne pas vraiment avoir saisi comment la configurer. J'ai déjà consulté je ne sais combien de forum, site, et autres sources d'informations mais sans trouver de réponse.

    J'ai donc mon son wav qui arrive de mon EEPROM via I²C sur ma sortie PWM . Sur l'oscillo elle ressemble bien à tout ce que j'ai pu voir jusqu'ici mais là où est le vrai problème c'est que je n'arrive pas à avoir un signal qui ressemble à du son.

    Après ma sortie PWM j'ai mis un filtre RC (R=3.9k et C 0.1µF) qui ne m'a pas l'air d'être avec les bonnes valeurs.

    Mon code(prototype) est le suivant:

    Code:
    void InitPWM()
    
    {
    
      C1ON_bit = 0;                       // Disable comparators
      C2ON_bit = 0;
      PR2=0x3F;     //ici c'est un test je ne suis pas sur du tout
      PORTA = 255;
      TRISA = 255;                        // configure PORTA pins as input
      PORTB = 0;                          // set PORTB to 0
      TRISB = 0;                          // designate PORTB pins as output
      PORTC = 0;                          // set PORTC to 0
      TRISC = 0;                          // designate PORTC pins as output
      PWM1_Init(78120);
      INTCON= 0;
    
    
    }
    
    void playSd(){
    
    unsigned  int add=0x01;
    
    initPWM();
    PWM1_Start();
    
    soft_I2C_Start();
    soft_I2C_Write(0xA0);
    soft_I2C_Write(add>>8);
    soft_I2C_Write(add);
    soft_I2C_Start();
    soft_I2C_Write(0xA1);
    
      while(Soft_I2C_Read(1)!=0xFF)
    {
      PWM1_Set_Duty(Soft_I2C_Read(1));
      Delay_ms(1);
      }
                         
      soft_I2C_Stop();
      PWM1_Stop();
    }

    J'avoue aussi ne pas avoir totalement compris les différentes valeurs à ajustées.


    Je travail sous MICKROC et ISIS Proteus et je n'ai pas de header files tout le code qui est exécuté se trouve dans le post.

    Merci d'avance à vous!

    -----

  2. #2
    paulfjujo

    Re : PIC16F887 problème sortie PWM

    bonjour

    Code:
      while(Soft_I2C_Read(1)!=0xFF)
    {
      PWM1_Set_Duty(Soft_I2C_Read(1));
      Delay_ms(1);
      }
    avec deja un delay de 1mS , tu es loin de pouvoir sortir une frequence sonore << 1Khz
    meme si la frequence PWM est de 78KHz
    d'ailleur est bien utile qu'elle soit si haute ?
    il faut echantilloner au moins à 10 fois la frequence max sonore voulue..
    Essai de mesurer le nb de cycle (ou µS) de l'expression principale
    Code:
    PWM1_Set_Duty(Soft_I2C_Read(1));
    sauvegarde ta Configuration projet dans un fichier 16F887_.cfgsh, via save scheme
    et post ce fichier
    ou renseigne au moins sur FOSC utilisée (Quartz ?)
    As-tu un filtre passe bas en sortie de PWM ?
    Dernière modification par paulfjujo ; 21/05/2014 à 14h24.

  3. #3
    Fantique

    Re : PIC16F887 problème sortie PWM

    Bonjour et merci de ton aide.

    Je t'avouerais qu'il y a déjà un moment que je bloque dessus, après avoir des trucs logiques j'ai tenté de voir par moi même où ces paramètres entrer en jeux, donc oui le 1ms n'est absolument pas approprié, je dirais qu'il devrait être dans les microseconde. Quand à FOSC pour l'instant il tourne a 20Mhz

    Pour le nb de cycle tu me demande de calculer son temps d’exécution totale ou d'une seule instruction?

    Toute la boucle s’exécute en environ 0.9 seconde et une seule (de ce que je peux voir sur mon oscillo) ~13 µs

    Et j'ai oublié de précisé que j'essaye de sortir un wav 8bit/8khz

  4. #4
    paulfjujo

    Re : PIC16F887 problème sortie PWM

    quelle est la taille de l'EEPROM ?

    Il serait preferable de transferer le contenu de l'eeprom en RAM en mode PAGE de 64 bytes.
    pour des questions de vitesse de lecture .. L'EEPROM I2C rame un peu trop..
    et supprimer le delay de 1mS. ou le reduire tres notablement à quelques µS ?
    .

    Cela revient à faire du WAV 1 bit .. utilisé dans les annees 70...avant les cartes Soundblaster et cie

    voir avec une memoire FRAM relativement rapide...
    ou un PIC avec beaucoup plus de RAM ex: 18F46K22 plus de 3K de ram

  5. A voir en vidéo sur Futura
  6. #5
    Fantique

    Re : PIC16F887 problème sortie PWM

    Durant mes recherches je suis tomber sur pleins de gens qui font sortie le wav direct sur le port PWM, certes je pourrais tester de passer par du SPI hardware, mais je ne pense pas que le débit soit la réelle cause car les micro utilisé était beaucoup moins performant.

    Mon EEPROM fait 1Mbit.

  7. #6
    paulfjujo

    Re : PIC16F887 problème sortie PWM

    1Mbit..
    mais on lit des Bytes (octets)..donc 125Ko , c'est deja pas mal


    Code:
     PWM1_Set_Duty(Soft_I2C_Read(1));
    il n'y a pas de gestion d'adresse de la donnee dans l'EEPROM ?
    ou la lecture est d'adresse sequentielle par la suite ?

    un fichier wav est encapsulé avec un header, et syntaxe...
    hors il faut un fichier binaire RAW direct sans encaplsulation pour alimenter la sortie PWM..

  8. #7
    Fantique

    Re : PIC16F887 problème sortie PWM

    En fait l’adressage se fait juste avant la boucle, et ensuite l'EEPROM incrémente toute seul son registre d'adresse tant que le mc renvoie un ack, sur c'est du raw(pour le test) ou sinon je commencerais à lire aux 45ème octect car je n'utilise que du 8bit/8khz pour commencer après c'est sur que je devrais implémenter la gestion du header.

    Nom : pic freq.PNG
Affichages : 105
Taille : 48,0 Ko

    C'est la sortie après le filtre RC qui me pose des soucis

  9. #8
    zibuth27

    Re : PIC16F887 problème sortie PWM

    hello,

    c'est compréhensible que tu aies des soucis de sortie. Tu mets directement la sortie de ton filtre sur le haut parleur (d'impédance 8 à 32 ohms) !!!
    l'impédance du HP est donc prise en compte dans la fréquence de coupure et dans l'atténuateur constitué par R3-LS1

    mets au moins un transistor pour attaquer le HP

    saluts

  10. #9
    Fantique

    Re : PIC16F887 problème sortie PWM

    Bonjour,

    En effet, je n'avais absolument pas pensé à ce détail, par contre si tu regarde la fomre du signal de sortie, elle est toujours très ressemblante à signal PWM normal, hors je la prend arpès le filtre, HP compris ou non. Normalement je suis sencé avoir une onde avec des oscillations bien moins carrée

  11. #10
    zibuth27

    Re : PIC16F887 problème sortie PWM

    hello,

    oscillogramme carré, car ta fréquence de coupure est bien plus haute : R3 est en parallèle sur LS1
    par contre tu n'indique pas l'amplitude qui, comme je l'ai dit, est affectée d'une atténuation R3-LS1

    saluts

  12. #11
    paulfjujo

    Re : PIC16F887 problème sortie PWM

    j'avais pas encore vu le schema...

    Avec une impedance de quelques ohms,il ne reste plus rien comme signal aux bornes du HP..
    il faudrait intercaler un ampli genre LM386 , capable d'attaquer un petit HP
    et qui a une bonne impedance d'entree

    exemple de Filtre passe bas
    F=0.159/R.C
    R=10K C=5nF => 3180Hz à -3dB sans charge !

    Alim de l'ampli de 5 à 9V DC

    Nom : LM386_Pwm.jpg
Affichages : 94
Taille : 16,4 Ko

  13. #12
    zibuth27

    Re : PIC16F887 problème sortie PWM

    hello,

    @Paulfujo,
    tu as juste oublié (bien que cité dans mes deux messages) qu'une impédance en sortie de ton circuit RC en change la fréquence
    Ici un potentiomètre de 10k introduit une atténuation systématique de 6dB et fait passer la fréquence à -3dB à 6,3kHz !!

    dans le cas de Fantique, le filtre d'origine coupe à 400Hz. Je n'ai pas de valeur d'inductance du haut parleur, en l'assimilant à une résistance pure l'atténuation passe à 42dB et la fréquence de coupure à 55 kHz. Si l'inductance est de 500µH, il y a résonance vers 22kHz


    saluts

  14. #13
    paulfjujo

    Re : PIC16F887 problème sortie PWM

    Citation Envoyé par zibuth27 Voir le message
    @Paulfujo,
    tu as juste oublié qu'une impédance en sortie de ton circuit RC en change la fréquence
    j'ai bien specifié sans charge !
    R=10K C=5nF => 3180Hz à -3dB sans charge !
    on pourrait se passer du potar de 10k de reglage de niveau
    en diminuant/ajustant le gain du LM386

  15. #14
    zibuth27

    Re : PIC16F887 problème sortie PWM

    OK
    mais le schéma possède un potard, et je voulais rappeler à Fantique que toute impédance sur la sortie de son filtre affecte le niveau et la réponse fréquentielle

  16. #15
    Fantique

    Re : PIC16F887 problème sortie PWM

    Merci de vous précieuses informations, je m'en irais tester tout ça cette semaine.

    Je reviendrai vers vous pour un feed back.

  17. #16
    zibuth27

    Re : PIC16F887 problème sortie PWM

    un feedback ?

    on croit rêver!
    trop de poseurs de questions ne veulent qu'une réponse toute faite et ne disent même pas merci

    alors un feedback, ça c'est appréciable

  18. #17
    Fantique

    Re : PIC16F887 problème sortie PWM

    Evidemment!

    Je ne sais pas ce que j'aurais fais sans les forums durant mes années d'études, c'est la moindre des choses que je puisse faire car je pars du principe que si j'ai eu besoin de ce genre d'informations, je ne serais surement pas le dernier!

    Mais bon là j'ai un autre truc sur le feu qui me "mangent" complètement mon temps donc je ferais ce feed back maximum le 3 juin!

    Encore merci de l'aide!

  19. #18
    Fantique

    Re : PIC16F887 problème sortie PWM

    Bonjour à tous,

    Me revoilà comme promis pour un feed back.

    Malheureusement je ne sais pas tester avec un ampli à cause des ralentissement dont je souffre sur ISIS Proteus donc j'ai enlever le HP et relié directement la patte PWM à l'oscilloscope . Néamoins y a du mieux, j'obtiens une onde qui n'est plus carrée mais que ne ressemble pas non plus à un signal normal...

    Nom : sortie pwm.PNG
Affichages : 57
Taille : 3,1 Ko

    J'aimerais v^tre avis sur mon raisonnement concernant la pause entre chaque octets pour retrouver une fréquence de 8Khz:

    mon I²C travail à 20kHz et mon fichier raw est à 8kHz sur 8bit, donc je me suis dis que pour ralentir le débit, je mets un delay de 75µs (j'ai mis un delay car je ne gère pas encore les interruptions). est ce que cette valeuur vous semble cohérente?

    Il y a toujours qui je ne comprend pas, la fréquence du PWM (celle précisé lors de l'initialisation) elle correspond à quoi au juste?

    Voilà un peu on en est le problème,

    Merci d'avance à tous!

    Fantique

  20. #19
    Fantique

    Re : PIC16F887 problème sortie PWM

    Autre chose que je viens de remarquer, j'ai fais une double bêtise (erreur de débutant), dans la boucle de lecture, je testais la valeur de retour de la fonction read, grosse faute car du coup , il y a deux lecture par boucle et qu'une de convertie.

Discussions similaires

  1. 16 bits PIC16F887!!
    Par yazeero dans le forum Électronique
    Réponses: 8
    Dernier message: 11/01/2013, 21h08
  2. PIC16f887, RTC et microC
    Par kevin8z dans le forum Électronique
    Réponses: 4
    Dernier message: 27/04/2012, 11h09
  3. LCD couleur pic16F887
    Par belly147 dans le forum Électronique
    Réponses: 2
    Dernier message: 28/08/2011, 00h25
  4. Mise en fonction ADC PIC16F887
    Par invitede334bfc dans le forum Électronique
    Réponses: 4
    Dernier message: 05/05/2010, 18h19
  5. PIC16F887 delay_ms() problème
    Par invitec6603a9c dans le forum Électronique
    Réponses: 4
    Dernier message: 01/06/2008, 09h29
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...