Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)



  1. #1
    jb-r18

    Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Bonjour à toutes et à tous,
    J'utilise actuellement un PIC16F767 pour l'un de mes produits qui tourne trés bien et dont l'utilisation principale est le contrôle de luminosité de LED tricolores RVB (rouge vert bleu). J'utilise donc les 3 sorties PWM (ou MLI en français, modulation en largeur d'impulsion) qui se nomment CCP1, CCP2 et CCP3, jusque là pas de problème, sauf que le 16F767 n'a pas d'EEPROM !

    Sur cet ancien projet, pour l'instant j'ai fait sans, mais pour le nouveau projet du même genre j'ai recherché une équivalence avec l'EEPROM dont j'ai absolument besoin et je suis tombé sur le PIC16F1936 de la famille 16F193x et qui lui possède 5 PWM + l'EEPROM compatible pin à pin et boitier CMS format SS, pour être implanté sur l'ancien et en plus il est 2 fois moins cher !

    J'ai transférer mon programme vers ce nouveau PIC et là, je ne comprends pas, je n'ai que le CCP1 et CCP2 qui fonctionne et rien sur le CCP3, je ne peux pas utiliser CCP4 ni CCP5 pour la compatibilité pin à pin, et encore CCP1 et CCP2 fonctionnent à condition que je sois en horloge interne ?? Mon compileur est CCS 4.137.

    voici la partie de mon programme :

    void dimmer()
    {
    setup_oscillator(OSC_16MHZ);// Partie que je ne mettais pas pour le 16F767
    setup_timer_2(T2_DIV_BY_1,255, 1);

    setup_ccp1(CCP_PWM);
    set_pwm1_duty(IntLumPWM_R);// cette partie fonctionne

    setup_ccp2(CCP_PWM);
    set_pwm2_duty(IntLumPWM_V);// cette partie fonctionne

    setup_ccp3(CCP_PWM);
    set_pwm3_duty(IntLumPWM_B);cet te partie ne fonctionne pas sur aucune des pins, ni sur RB5, ni sur RC6 !
    }

    Si une ame charitable pourrait m'aider ?
    d'avance merci

    -----


  2. Publicité
  3. #2
    RISC

    Re : Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Salut,

    La fonction CCP3 est spéciale sur le PIC16F1936....Lire la datasheet page 5 et la section 12.1 page 130.
    Il faut programmer sa position en utilisant le registre AFPCON

    a+
    Ma marotte ? les microcontrôleurs ;=)

  4. #3
    jb-r18

    Re : Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Merci pour ta réponse.
    Je l'avait vu et j'ai essayé mais sans succès.
    Comment mettre la valeur dans AFPCON, à quel adresse est il ?
    et il y a 2 bit dont je ne sais pas quoi mettre !

  5. #4
    jb-r18

    Re : Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Bonjour,

    Toujour rien, pas moyen de faire fonctionner ce fichu CCP3 ????
    Je n'arrive pas à modifier APFCON

  6. #5
    RISC

    Re : Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Salut,

    Je n'utilise pas le compilateur CCS mais la version gratuite du compilateur XC8...
    Cette syntaxe devrait aussi passer :
    APFCON = APFCON & 0b10111111 ; // utiliser la broche RC6 pour CCP3
    ou
    APFCON = APFCON | 0b01000000 ; // utiliser la broche RB5 pour CCP3 (attention aussi AN13...)

    Mais ceci ne suffit pas...Le mode "analogique"étant prioritaire, il faut aussi initialiser ANSELA pour que AN13/RB5 soit en mode digital :
    ANSELB = ANSELB & 0b11011111; // broche RB5/AN13 en mode digital

    a+
    Ma marotte ? les microcontrôleurs ;=)

  7. A voir en vidéo sur Futura
  8. #6
    jb-r18

    Re : Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Bonjour RISC,

    Tout d'abord, merci infiniment pour le temps que vous me consacrez.

    Voici le lien vers quelqu'un qui a eu le même problème que moi : http://www.ccsinfo.com/forum/viewtopic.php?p=158599

    Je n'ai malheureusement toujours pas de fonctionnement correct du CCP3, je pense, sauf erreur de ma part, qu'il doit y avoir un soucis avec CCS, voir lien ci-dessus). A la page 137, table 12-5, on donne CCP3/PA3 plus prioitaire que l'analogique ?

    Voic mon programme test :
    #include <16f1936.h>
    #fuses INTRC_IO,NOWDT,PUT,NOLVP,NOPRO TECT,NOMCLR,CPD,WRT // impossible de faire fonctionner le PWM avec le quartz ???
    //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) sera utilisé ultérieurement d'où le besoin de virer le PWM CCP3 de RC6 !
    #use delay (clock = 32000000)
    #byte port_a = 0x0C // Memory organisation P27/418 ou P31/472 selon datasheet
    #byte port_b = 0x0D
    #byte port_c = 0x0E
    //#byte port_d = 0x0F
    #byte port_e = 0x10

    #byte APFCON = 0x11D // voir page 33/472
    #byte ANSELB = 0x18D
    #byte TXSTA = 0x19E
    #byte RCSTA = 0x19D

    unsigned long int i;
    unsigned int8 IntLumPWM_R,IntLumPWM_V,IntLum PWM_B;

    // RA0 = Pilotage LED (sortie)
    // RB4 = Communication RX (reception) (entrée)
    // RB5 = CCP3, PWM pilotage du bleu (sortie)
    // RC1 = CCP2, PWM pilotage du vert (sortie)
    // RC2 = CCP1, PWM pilotage du rouge (sortie)
    // RC6 = Communication TX (transmission) (sortie)
    // RC7 = Communication RX (reception) (entrée)

    void dimmer()
    {
    setup_oscillator(OSC_16MHZ);
    setup_timer_2(T2_DIV_BY_1,255, 1);

    setup_ccp1(CCP_PWM);
    set_pwm1_duty(IntLumPWM_R); // pour dimmer le rouge, IntLumPWM_R (valeur comprise entre 0 et 255)

    setup_ccp2(CCP_PWM);
    set_pwm2_duty(IntLumPWM_V); // pour dimmer le vert, IntLumPWM_V (valeur comprise entre 0 et 255)

    setup_ccp3(CCP_PWM);
    set_pwm3_duty(IntLumPWM_B); // pour dimmer le bleu, IntLumPWM_B (valeur comprise entre 0 et 255)
    }

    void main()
    {

    //APFCON = APFCON | 0b01000000 ;
    //ANSELB = ANSELB & 0b11011111;
    APFCON = 0b01000000; //RB5
    ANSELB = 0b11011111;
    //ANSELB = 0x00; // il semblerait d'aprés P139/472
    TXSTA = 0b01101010;
    RCSTA = 0b11110000; // de tout façon, quoi que j'essai, CCP3 ne fonctionne pas en RB5 !

    set_tris_a(0x00); // port a : déclaration des entrées sorties
    set_tris_b(0x00); // port b : déclaration des entrées sorties
    set_tris_c(0x00); // port c : déclaration des entrées sorties

    for(; // boucle infini
    {

    bit_set(port_A,0); // test tout bête, j'allume la led en rouge, puis en vert puis en bleu
    bit_set(port_C,2);
    delay_ms(500);
    bit_clear(port_A,0);
    bit_clear(port_C,2);
    delay_ms(200);

    bit_set(port_A,0);
    bit_set(port_C,1);
    delay_ms(500);
    bit_clear(port_A,0);
    bit_clear(port_C,1);
    delay_ms(200);

    bit_set(port_A,0);
    bit_set(port_B,5);
    delay_ms(500);
    bit_clear(port_A,0);
    bit_clear(port_B,5);
    delay_ms(200); // jusque là tout fonctionne correctement

    IntLumPWM_R=254; // Utilisation du CCP1 OK
    IntLumPWM_V=0;
    IntLumPWM_B=0;
    dimmer();
    for(i=0;i<250;i++)
    {
    bit_set(port_A,0);
    delay_ms(10);
    }

    IntLumPWM_R=0;
    IntLumPWM_V=254; // Utilisation du CCP2 OK
    IntLumPWM_B=0;
    dimmer();
    for(i=0;i<250;i++)
    {
    bit_set(port_A,0);
    delay_ms(10);
    }

    IntLumPWM_R=0;
    IntLumPWM_V=0;
    IntLumPWM_B=254; // Le CCP3 ne fonctionne pas !
    dimmer();
    for(i=0;i<250;i++)
    {
    bit_set(port_A,0);
    delay_ms(10);
    }
    }
    }


    si je n'utilise pas "#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)", alors là j'ai la chance extraordinaire d'avoir ce fameux CCP3 sur RC6, sinon rien. J'ai pourtant essayé, me semble t'il, tous les paramettrage de registres...


  9. Publicité
  10. #7
    jb-r18

    Re : Utilisation du CCP3 en RB5 sur PIC16F1936 (PWM)

    Salut à tous !
    Bien que mon sujet n'ai pas attiré les foules, je souhaitais néanmoins vous dire que j'ai trouvé la solution. Ceci intéressera peut être quelqu'un qui rencontrera la même galère.

    setup_timer_2(T2_DIV_BY_1,255, 1);
    setup_ccp3(CCP_PWM|CCP3_B5);
    set_pwm3_duty(IntLumPWM_B);

    pour le #fuse HS, c'est encore un peu flou, celà fonctionne mais à vitesse ralentie et ce malgrè #use delay (clock = 32mhz)
    Plus je sais et plus je sais que je ne sais rien ! (Socrate)

Sur le même thème :

Discussions similaires

  1. Utilisation de la fonction pwm sur millenium3 xd26 crouzet
    Par kawel71 dans le forum Électronique
    Réponses: 6
    Dernier message: 14/05/2012, 12h27
  2. PWM : Meilleur utilisation
    Par mosa10 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/04/2011, 18h06
  3. progarmmer pic16F1936 avec picstarplus?
    Par vinowan dans le forum Électronique
    Réponses: 3
    Dernier message: 12/03/2010, 09h18
  4. Utilisation du PWM
    Par needou dans le forum Électronique
    Réponses: 5
    Dernier message: 22/01/2010, 13h26
  5. PORTB d'un PIC 18F : RB5 bug
    Par black templar dans le forum Électronique
    Réponses: 6
    Dernier message: 07/01/2010, 22h15