[Programmation] PIC16F18325 : Des PWMs à des fréquences differentes ?
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

PIC16F18325 : Des PWMs à des fréquences differentes ?



  1. #1
    AmigaOS

    PIC16F18325 : Des PWMs à des fréquences differentes ?


    ------

    Bonjour

    J'ai besoin de deux signaux PWM de fréquences différentes. Du coup j'ai choisis un PIC16F18325 qui a 2 modules PWM. Mais c'est que maintenant, en programmant le µC que je me rends compte que ces deux modules ont des registres en commun, et bien sûr ceux qui servent à gérer ce que moi je veux avoir de différent (PR2, T2CON).

    N'y a t'il pas un moyen de contourner ce problème. Genre configurer un autre truc pour connecter un autre registre... ?

    Code:
    // 1er PWM :
        TRISAbits.TRISA0 = 1 ;
        PWM5CONbits.PWM5POL = 1 ;        // Active Low
        PR2 = 255 ;
        PWM5DCH = 127 ; PWM5DCL = 0 ; // Juste pour tester
        PIR1bits.TMR2IF = 0 ;
        T2CONbits.T2CKPS = 0 ;                // Prescaler=1 (00) ou 4 (01), 16, 64
        T2CONbits.TMR2ON = 1 ;
        while(PIR1bits.TMR2IF==0) ;
        TRISAbits.TRISA0 = 0 ;
        RA0PPS = 0b00000011 ;                // PWM5=00000011, PWM6=00000010
        PWM5CONbits.PWM5EN = 1 ;
    
    // 2ème PWM :
        TRISAbits.TRISA2 = 1 ;
        PWM6CONbits.PWM6POL = 1 ;        // Active Low
        PR2 = 120 ;
        PWM6DCH = 64 ; PWM6DCL = 0 ;   // Juste pour tester
        PIR1bits.TMR2IF = 0 ;
        T2CONbits.T2CKPS = 1 ;                // Prescaler=1 (00) ou 4 (01), 16, 64
        T2CONbits.TMR2ON = 1 ;
        while(PIR1bits.TMR2IF==0) ;
        TRISAbits.TRISA2 = 0 ;
        RA2PPS = 0b00000010 ;                // PWM5=00000011, PWM6=00000010
        PWM6CONbits.PWM6EN = 1 ;
    Merci

    -----
    Dernière modification par AmigaOS ; 18/07/2017 à 14h25.

  2. #2
    RISC

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Salut,
    Datasheet page 197.
    Tu ferai cela beaucoup plus simplement avec MCC (choiix des timers pour les canaux PWM)
    Il y d'autres gros PB dans ton code....la programmation des PPS (voir datasheet). Ton code ne fonctionnera pas
    Je te recommande très très fortement d'utiliser le plugin MCC sans quoi tu vas souffrir...Ce PIC16 est très récent et possède un grand nombre de registres et de possibilités.
    Je me souviens que pour simplement mettre une broche en entrée ou sortie sur un PIC similaire j'ai du (ou plutot MCC a du) initialiser 6 ou 7 registres. J'y serai sans doute arrivé mais MCC m'a fait cela en quelques clics
    a bon entendeur ;=)
    Dernière modification par RISC ; 18/07/2017 à 15h59.

  3. #3
    AmigaOS

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Merci vous m'avez sauvé !!!
    Donc c'est le registre PWMTMRS qui permet d'utiliser un autre timer.

    Par contre là ça fonctionne bien.
    Mais il y a autre chose qui ne fonctionne pas, c'est la mise à 1 de RC1, RC2, RC3. Du coup je vais voir ce qu'est ce MCC.

  4. #4
    AmigaOS

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Ah c'est plus pratique comme ça ^^
    Par contre j'arrive pas à trouver pour RC1/2/3. MCC m'indique les registres associés à l'association des pins, par contre il n'y a pas l'explication pour chaque registre.

    Quand je fais :
    Code:
    PORTCbits.RC1 = 1 ;
    le pin RC1 reste à 0V...

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

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Citation Envoyé par AmigaOS Voir le message
    le pin RC1 reste à 0V...
    Tu as vérifié le reste ?
    - cablage
    - analogique/numérique
    - pull-up interne
    - entrée/sortie

    Personnellement je trouve MCC fastidieux et confus . . .

  7. #6
    RISC

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Salut,

    Dans MCC, il faut configurer les broches que tu veux utiliser en entrée digitale, sortie digitale, entrée analogique,...
    Sur cette page en bas à droite tu dois clicker sur les broches qui seront en entrée ou en sortie.
    Ensuite tu sélectionne en haut à gauche "Pin module" et dans la fenetre du milieu tu vérifies comment sont les broches que tu veux utiliser (il faut décocher analog, pull-up...etc....
    tu seras surpris de voir le nombre de registres à initialiser...je t'avais prévenu.

    Au fait... pour les sorties il faut utliser LATCbits.LATC1 = 1 et non PORTCbits.RC1 = 1

    a+
    tutoriel sur MCC ici

  8. #7
    AmigaOS

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Tu as vérifié le reste ?
    - cablage
    - analogique/numérique
    - pull-up interne
    - entrée/sortie
    - cablage : Ces pins commandent directement la grille de mosfets. Tout est bien connecté.
    - analogique/numérique : ANSELC = 0b00100001 ;
    - pull-up interne : Pas besoin vu que ce sont des sorties ?
    - entrée/sortie : TRISC = 0b00100001 ;

    Je vais regarder demain pour :
    • PORTx registers (reads the levels on the pins of
    the device)
    • LATx registers (output latch)
    • TRISx registers (data direction)
    • ANSELx registers (analog select)
    • WPUx registers (weak pull-up)
    • INLVLx (input level control)
    • SLRCONx registers (slew rate)
    • ODCONx registers (open-drain)
    (Page140)

    Oui c'est plutôt beaucoup ^^

  9. #8
    AmigaOS

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Marche toujours pas. Sauf que maintenant RC3 passe à 1 pendant un court instant pendant la programmation du PIC

    Je met tous les registres que j'ai configurés pour mon programme actuellement :
    Code:
        PORTA   = 0b00000000 ;
        PORTC   = 0b00000000 ;
        LATA    = 0b00000000 ;
        LATC    = 0b00000000 ;
        TRISA   = 0b00111010 ;
        TRISC   = 0b00100001 ;
        ANSELA  = 0b00100010 ;
        ANSELC  = 0b00100001 ;
        WPUA    = 0b00000000 ;
        WPUC    = 0b00000000 ;
        INLVLA  = 0b00111111 ;
        INLVLC  = 0b00111111 ;
        SLRCONA = 0b00000000 ;
        SLRCONC = 0b00000000 ;
        ODCONA  = 0b00000000 ;
        ODCONC  = 0b00000000 ;
        
        PMD0 = 0b01000111 ;
        PMD1 = 0b11101011 ;
        PMD2 = 0b01100111 ;
        PMD3 = 0b11001111 ;
        PMD4 = 0b00100110 ;
        PMD5 = 0b00011111 ;
        
    // CAN :
        ADCON1 = 0b11100010 ;
    
    //PWM5 :
        PWMTMRSbits.P5TSEL = 0b01 ;
        TRISAbits.TRISA0 = 1 ;
        PWM5CONbits.PWM5POL = 0 ;
        PR2 = 255 ;
        PWM5DCH = 0 ; PWM5DCL = 0 ;
        PIR1bits.TMR2IF = 0 ;
        T2CONbits.T2CKPS = 0b00 ;
        T2CONbits.TMR2ON = 1 ;
        while(PIR1bits.TMR2IF==0) ;
        TRISAbits.TRISA0 = 0 ;
        RA0PPS = 0b00000010 ;
        PWM5CONbits.PWM5EN = 1 ;
    
    //PWM5 :
        PWMTMRSbits.P6TSEL = 0b10 ;
        TRISAbits.TRISA2 = 1 ;
        PWM6CONbits.PWM6POL = 0 ;
        PR4 = 242 ;
        PWM6DCH = 127 ; PWM6DCL = 0 ;
        PIR2bits.TMR4IF = 0 ;
        T4CONbits.T4CKPS = 0b00 ;
        T4CONbits.TMR4ON = 1 ;
        while(PIR2bits.TMR4IF==0) ;
        TRISAbits.TRISA2 = 0 ;
        RA2PPS = 0b00000011 ;
        PWM6CONbits.PWM6EN = 1 ;

  10. #9
    RISC

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Salut,

    Je t'ai déjà mentionné que le code pour les PPS ne fonctionnera pas...
    Si tu utilises MCC pour le générer tu verras qu'il faut faire cela différemment.

    As-tu réussi à programmer RC1 en sortie ?
    J'ai fait clignoter une LED sur RC1 pour un PIC16LF1845 en 2mn avec MCC.
    J'ai modifié le projet qui comporte aussi une configuration pour le PIC16F18325 mais je ne peux pas la tester.
    Le PIC16LF18345 étant le grand frère du PIC16F18325 mon code devrait fonctionner directement (je l'ai regénéré pour MCC).

    a+
    Fichiers attachés Fichiers attachés

  11. #10
    RISC

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Salut,

    J'ai aussi fait un autre project (en 30mn en utilisant MCC;=) avec tes fonctions :
    PWM5 (TMR2) => RA0
    PWM6 (TMR4) => RA2
    Sur ma carte 2 leds vont en inverse d'un duty de 0 à un duty de 100% (511) donc les leds s'allument et s'éteignent en opporsition de phase par dimming progressif
    Sur ma carte j'ai un PIC16LF18345 mais j'ai aussi fait une configuration pour ton PIC16F18325 qui devrait fonctionner.

    Tout cela montre qu'avec MCC ce genre de fonction se fait en un éclair.
    Je n'ai même pas ouvert la datasheet ;=)

    Dans les fichiers header de chaque périphérique tu trouveras le fonctions créées automatiquement par MCC

    a+
    Fichiers attachés Fichiers attachés

  12. #11
    AmigaOS

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Merci pour toute votre aide !
    Enfaite, maintenant ça marche mais je ne sais pas vraiment pourquoi...
    J'ai remplacé un bout de mon code par le votre et ça a marché. Puis j'ai progressivement re-remplacé le votre par le miens pour voir à partir de quel moment ça ne marche plus et en déduire d'où venait le problème. Mais j'en suis revenu à mon ancienne version et ça marche toujours. J'ai du corrigé quelque chose sans m'en rendre compte...
    Dernière modification par AmigaOS ; 22/07/2017 à 20h02.

  13. #12
    RISC

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Salut

    C'est tombé en marche....mais si tu n'a pas compris pourquoi ca risque de retomber en "panne".
    Compare bien les initialisations faites par MCC. En particulier le PPS pour comprendre.

    Mon conseil : même si tu ne veux pas utiliser MCC, quand tu as un PB d'initialisation, cela peut te mettre sur la piste

    a+

  14. #13
    antek

    Re : PIC16F18325 : Des PWMs à des fréquences differentes ?

    Il faut aussi se méfier des états au reset (et lequel reset !?).
    Dans des registres à fonctions similaires tous les bit sont à "0" sauf un ou deux à "1" perdus au milieu.

    Les procédures pour modifier certains registres sont "originales".

Discussions similaires

  1. Extraire les différentes fréquences d'un échantillon sonore
    Par Computer Mail dans le forum Électronique
    Réponses: 40
    Dernier message: 12/03/2017, 08h57
  2. Sommes des fréquences différentes
    Par leorian dans le forum Physique
    Réponses: 6
    Dernier message: 10/07/2016, 06h15
  3. faire clignoter une lampe selon différentes fréquences
    Par xenelos dans le forum Électronique
    Réponses: 6
    Dernier message: 27/02/2015, 14h25
  4. beeper à 2 fréquences différentes
    Par gribouille51 dans le forum Électronique
    Réponses: 11
    Dernier message: 04/03/2014, 12h55
  5. 6 PWMs dans le PIC18F1330 ?
    Par AmigaOS dans le forum Électronique
    Réponses: 8
    Dernier message: 13/10/2011, 22h41
Découvrez nos comparatifs produits sur l'informatique et les technologies.