Programmation PWM multi sorties
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

Programmation PWM multi sorties



  1. #1
    invite2f1b7080

    Programmation PWM multi sorties


    ------

    Bonjour,
    Voila je dois faire un programme me permettant des controller l'état de 35 leds. J'arrive à les allumer et les eteindres comme je veux. Cependant maintenant je voudrais gérer la puissance de ces leds grace a un "PWM" de rapport cyclique variable.
    J'utilise un PIC 32MX575F256H avec MPLAB.
    Mon problème est que je ne dispose que de 5 sortie PWM alorsque je dois gérer 35 leds.Je dois donc créer l'équivalent d'une PWM sur toutes mes sorties.
    En parcouant le Web, j'ai cru comprendre que c'était faisable grace au
    Timer2, et une boucle for, cependant mais connaissance en programation étant limitées j'ai du mal a trouver comment faire.
    J'allume mes leds grace à

    if (LED_1==0x31)
    PORTB=PORTB | 0b0000000000100;
    else
    PORTB=PORTB & 0b1111111111011;
    en fonction de la position de la led.

    Si quelqu'un à des pistes pour moi, je serais ravis qu'il les partagent.
    Merci d'avance.

    -----

  2. #2
    ProgVal

    Re : Programmation PWM multi sorties

    Bonjour,

    Là, c'est les maths qu'il faut faire travailler... et les puissances de 2

    ProgVal

  3. #3
    Jack
    Modérateur

    Re : Programmation PWM multi sorties

    Il serait également bon de lire les règles participatives avant de poster dans le forum algo et programmation.
    Je transfère pour cette fois en électronique

  4. #4
    RISC

    Re : Programmation PWM multi sorties

    Salut Titi,

    Peux-tu nous faire voir le schéma de connection de tes Leds ?
    A quelle fréquence tourne ton PIC32 ?

    Avec un PIC32 qui tourne à 80MHz, tu n'as absolument pas besoin d'utiliser des sorties PWM car tu peux tout faire par logiciel.


    Je te recommande d'utiliser le DMA pour faire cela.

    Ci-joint un lien qui montre un projet de l'effet goutte d'eau faite par DMA sur 8 leds que j'ai publié à Noël ;=)
    http://forums.futura-sciences.com/el...nde-pic32.html

    Cela peut te servir de base.

    a+

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

    Re : Programmation PWM multi sorties

    En gros, si tu veux te "baragouiner" ça sur une sortie quelconque, t'as seulement besoin d'une sous-routine qui inclue deux boucles.
    Ta boucle interne sera celle qui allume la LED durant un temps restreint, puis ta boucle extérieur mettra à "off" ta LED durant un autre temps choisi.

  7. #6
    invite2f1b7080

    Re : Programmation PWM multi sorties

    J'avais essayé avec cette fonction la:

    void eclair (char marche,char pas)
    {
    if (cpt<=Eclairage)
    marche;
    else
    pas;
    if (cpt==100)cpt=0;
    }

    puis
    if (LED_2==0x31)
    eclair(PORTB=PORTB | 0b000000100000000,PORTB=PORTB & 0b111111011111111);
    else
    PORTB=PORTB & 0b111111011111111;

    mais ca ne fonction paset je ne sais pas pourquoi.
    Peut etre ma déclaration de "marche et pas" qui correspondent a
    PORTB=PORTB | 0b000000100000000 et PORTB=PORTB & 0b111111011111111

    l'autre probleme et qu'il faut que je puisse modifier le rapport cyclique et l'état de chacune de mes leds à tout moment, sachant que j'ai encore du mal à gérer les interuption.
    N'ayant pas de scanner sous la main je metterai mon schéma de connection ce weekend.

    J'airegarder ton projet RISC et je t'avous que j'ai du mal à comprendre DmaChnSetTxfer et DmaChnSetEventControl.
    Pourrais tu développer?

    Merci.

  8. #7
    invitea0c49f8b

    Re : Programmation PWM multi sorties

    En t'attaquant directement au pilotage de PWM multi sorties , tu es sûr d'aller à l'échec. alors essaye de commencer par le début c'est à dire faire commander un seul signal puis tu trouvera qui il est mieux

  9. #8
    RISC

    Re : Programmation PWM multi sorties

    Salut,
    Citation Envoyé par titilaflamme Voir le message
    J'airegarder ton projet RISC et je t'avous que j'ai du mal à comprendre DmaChnSetTxfer et DmaChnSetEventControl.
    Pourrais tu développer?

    Plutôt que d'écrire ton programme comme on écrit pour les PIC18 ou PIC24 en attaquant les registres, je te recommande d'utiliser les librairies de haut niveau du compilateur C32.
    Tu trouveras les fonctions de ces librairies dans ce manuel : c:\Program Files\Microchip\mplabc32\v1.12 \doc\Microchip-PIC32MX-Peripheral-Library.chm

    Il y a de nombreux exemples de code pour les PIC32 ici : http://www.microchip.com/codeexamples et aussi dans les notes d'application : http://www.microchip.com/appnotes

    a+

  10. #9
    ftorama

    Re : Programmation PWM multi sorties

    Le choix du micro t'es imposé?

    Parce que piloter 35 leds se fait très bien avec un 8 bits. Prendre un 32 bits pour ça, c'est légèrement sur-dimensionné

  11. #10
    invite2f1b7080

    Re : Programmation PWM multi sorties

    Bonjour, j'espere que vous avez passsé un bon weekenend.
    Oui l'utilisation du PIC32 m'est imposé, de même que la position des leds en fonction de ces sorties. (pic deja placé sur les cartes reliées aux leds).

  12. #11
    invite2f1b7080

    Re : Programmation PWM multi sorties

    J'ai réussi à faire quelques chose de pas trop mal avec de simples boucles, enfin ca fonctionne.
    Cependant lorsque j'envoie une nouvelle information, il ne se passe rien. Je suppose que le système reste dans la boucle et ne traite pas l'mformation.
    Ma question est donc s'il existe une fonction interuption qui renvoie le programme au début du programme principal lorsque l'on reçoie une nouvelle information avec ces nouvelles données bien sur.

    Merci

  13. #12
    RicounetZap

    Re : Programmation PWM multi sorties

    Bonjour,
    Il y a des moyens de faire simple. Si tu dois faire varier entre 0 et 100 % 32 sorties, défini un compteur général ( de 0 à 100) et une consigne par sortie.
    Utilises un timer au 1/100 de la période de modulation.
    Toutes les interruptions, tu incrémentes ton compteur général. Si sa valeur >= 100, on la remet à 0.
    Compare le compteur général avec la consigne de chaque sortie, si le Compteur général < consigne, tu 'allumes' la led correspondante, sinon, tu l'éteins.
    Reset de l'interruption et c'est tout
    Cordialement
    N'importe quoi, for ever :-)

  14. #13
    invite2f1b7080

    Re : Programmation PWM multi sorties

    Je vois à peut près ce que tu me propose de faire Ricounnet, le hic c'est que je suis encore un débutant en programmation,et j'ai un peu de mal à voire comment faire avec un deuxieme timer et des interruptions. Sais-Tu où je pourrait apprendre ca assez vite?

  15. #14
    RicounetZap

    Re : Programmation PWM multi sorties

    Je ne connais pas les PIC32. Par contre, pour un PIC16 ou PIC18, il faut juste configurer certains registres (cf datasheet) et autoriser les interruptions.
    La routine d'interruption est appelée automatiquement lors du débordement du compteur.
    J'explique très sommairement comment implémenter un timer sur un PIC18F4550 sur mon site.
    Cela peut toujours te mettre sur la voie.
    Cordialement
    N'importe quoi, for ever :-)

  16. #15
    invite2f1b7080

    Re : Programmation PWM multi sorties

    Je n'ai pas encore reussi à faire mes sorties PWM, donc si quelqu'un a de nouvelles pistes je suis preneur.
    De plus je voulais savoir si :
    while(1)
    {instruction1}
    while(1)
    {instruction 2}

    était équivalent à:

    while(1)
    {
    {instruction1}
    {instruction2}
    }

    merci.

  17. #16
    ftorama

    Re : Programmation PWM multi sorties

    Citation Envoyé par titilaflamme Voir le message
    Je n'ai pas encore reussi à faire mes sorties PWM, donc si quelqu'un a de nouvelles pistes je suis preneur.
    De plus je voulais savoir si :
    while(1)
    {instruction1}
    while(1)
    {instruction 2}

    était équivalent à:

    while(1)
    {
    {instruction1}
    {instruction2}
    }

    merci.
    Là, c'est une question de programmation de base, voire même de logique. Dans le premier cas, que se passe-t-il une fois que tu es rentré dans le second "while(1)" ?

    Pour gérer un PWM en soft, c'est très simple. Il y a toutefois différentes façons de faire. La plus simple est de générer des tops avec un timer. A chaque top (autrement dit interruption), tu incrémentes un compteur. Si tu atteinds 100 sur le compteur, tu repasses à 0 et tu allumes toutes les leds.

    Dans ton programme principal, tu scrutes un tableau ou se trouvent les 35 valeurs de PWM. Si PWM[led_n]>compteur, tu éteins la led, sinon tu la laisses allumée.

    Après la scrutation du tableau, tu peux mettre un delay(), ou plus efficacement mettre ton micro en veille. A chaque passage dans l'interruption, il quitte le mode veille et reprend l'exécution du programme (et donc le check des PWM).

    Comme je te le disais, ce n'est pas la meilleure implémentation, mais ce doit être de loin la plus simple.

    Une seconde phase serait de rajouter une couche de multiplexage par-dessus. Quand ton compteur arrive à 100, tu passes à la colonne suivante de leds et ainsi en boucle. Avantage, tu as un nombre limité de leds allumé simultanément, un nombre de ports réduits (disons 12, matrice de 6 par 6) mais tu as une petite perte de luminosité

  18. #17
    invite2f1b7080

    Re : Programmation PWM multi sorties

    est il possible à votre avis de le réaliser grace à un timer2 qui tourne en boucle en se remettant à 0 tout les 100 et de faire allumer mes led si mon timer 2 est inférieur à mon rapport cyclique ?

  19. #18
    ftorama

    Re : Programmation PWM multi sorties

    Citation Envoyé par titilaflamme Voir le message
    est il possible à votre avis de le réaliser grace à un timer2 qui tourne en boucle en se remettant à 0 tout les 100 et de faire allumer mes led si mon timer 2 est inférieur à mon rapport cyclique ?
    Je ne connais pas le timer2, pas plus que le 1 d'ailleurs, mais si il est capable de compter jusqu'à 100 (ce dont je ne doute pas), ça devrait le faire...

    Maintenant, je t'ai donné l'algo quasi-complet, je serais tenté de dire débrouille-toi avec. Il n'y a qu'en mettant les mains dans le cambouis qu'on apprend.

    Si on te prend par la main jusqu'à ce que tu aies une solution clé-en-main, tu n'auras rien appris...

    Bref, débrouille-toi maintenant, on t'en a beaucoup dit, et c'est pour ton bien

  20. #19
    invite2f1b7080

    Re : Programmation PWM multi sorties

    enfait c'est que ca m'arrangerai d'évité de faire mes PWM en soft, car le logiciel va avoir beaucoup d'autre chose à gérer.
    Pour le moment je ne cherche pas à avoir 35 PWM différentes ils faut que je puisse allumer toutes mes leds à la meme intencité, donc un compteur et un rapport cyclique me suffisent pour l'instant.

  21. #20
    ftorama

    Re : Programmation PWM multi sorties

    Citation Envoyé par titilaflamme Voir le message
    enfait c'est que ca m'arrangerai d'évité de faire mes PWM en soft, car le logiciel va avoir beaucoup d'autre chose à gérer.
    Pour le moment je ne cherche pas à avoir 35 PWM différentes ils faut que je puisse allumer toutes mes leds à la meme intencité, donc un compteur et un rapport cyclique me suffisent pour l'instant.
    Comparer 35 bytes, ça prend peanuts, on s'en fout de la charge processeur....

    Bref, les données changent en cours de route, visiblement tu ne sais pas toi-même ce que tu veux, je laisse tomber
    Dernière modification par ftorama ; 03/05/2011 à 09h23. Motif: dislexie galopante :S:

  22. #21
    bobflux

    Re : Programmation PWM multi sorties

    Citation Envoyé par titilaflamme Voir le message
    enfait c'est que ca m'arrangerai d'évité de faire mes PWM en soft, car le logiciel va avoir beaucoup d'autre chose à gérer.
    Il existe des chips en I²C qui peuvent driver une tonne de LEDs avec une sortie controlable en intensité par LED.

  23. #22
    ftorama

    Re : Programmation PWM multi sorties

    Citation Envoyé par bobfuck Voir le message
    Il existe des chips en I²C qui peuvent driver une tonne de LEDs avec une sortie controlable en intensité par LED.
    Non mais maintenant ce n'est plus 35 PWM indépendants, mais 1 PWM pour 35 leds....moi je laisse tomber....

  24. #23
    invite2f1b7080

    Re : Programmation PWM multi sorties

    ftorama mon but final est bien de pouvoir créer 35 PWM différentes cependant etant donné que je débute je commence d'abord par essayer de comprendre comment faire, je voudrait donc commencer par créer une pwm sur une sortie qui n'est as prévu pour, ensuite faire sortir la meme pwm sur toutes les (35) sorties de mon pic puis enfin pouvoir les controller indépendament les une des autres.
    Je ne demande pas de solution toute faite meme si dans l'imédiat c'est ce qui me serait le plus utile, je voudrait juste que l'on m'explique comment faire.
    Merci

  25. #24
    Jack
    Modérateur

    Re : Programmation PWM multi sorties

    Il faudrait que tu définisses la fréquence de ta pwm ainsi que sa résolution, c'est à dire le nombre de pas possibles. Ce n'est peut être pas la peine de générer 256 valeurs différentes.

    A partir de là, tu déclenches une interruption toutes les x µs, tu décrémentes le compteur associé à chacune des sorties pwm et lorsque le compteur arrive à zero, tu bascules la sortie correspondante.

    Il faut également un compteur qui compte la période entière qui rechargera les compteurs lorsqu'il arrivera lui-même à zéro et qui remettra toutes les sorties à leur état initial.
    Ce compteur général peut être remplacé par une interruption sur l'overflow du timer qui génère la fréquence de la pwm.

    A+

  26. #25
    invite2f1b7080

    Re : Programmation PWM multi sorties

    J'ai à peu près compris ce que tu as dis jack, pour la fréquence c'est des led donc dès f>25Hz ca doit etre bon (frequence de l'oeil) apres le pas 1% c'est aplement suffisant.
    Par contre je ne sais pas générer les interruptions pourrait tu m'indiquer où apprendre ca.
    merci

  27. #26
    Jack
    Modérateur

    Re : Programmation PWM multi sorties

    pour la fréquence c'est des led donc dès f>25Hz ca doit etre bon
    Je pense que 100 Hz ne seraient pas mal.
    Une résolution de 1%, ca veut dire qu'il faut décrémenter et vérifier les compteurs toutes les 100µs. ca me semble très jouable.

    Par contre je ne sais pas générer les interruptions pourrait tu m'indiquer où apprendre ca.
    je ne connais pas les pics, donc à ce niveau je ne peux plus t'aider.

    PS: 100Hz n'est pas forcément un bon choix car c'est un multiple de notre fréquence secteur et on risque des phénomènes optiques indésirables selon le type d'éclairage. Prendre un petit peu moins par exemple.

    A+

Discussions similaires

  1. Variateur de Vitesse PWM/DC avec Pic "non multi-tâches"
    Par ZorgloubPirlouis dans le forum Électronique
    Réponses: 11
    Dernier message: 17/04/2013, 16h41
  2. Sorties PWM pic 16F876 et L298
    Par invite0e36b18a dans le forum Électronique
    Réponses: 11
    Dernier message: 05/05/2010, 08h43
  3. Réponses: 1
    Dernier message: 27/04/2010, 22h10
  4. Ajouter des sorties PWM à un PIC
    Par inoxxam dans le forum Électronique
    Réponses: 20
    Dernier message: 31/03/2010, 07h31
  5. PWM avec sorties dediées
    Par ABN84 dans le forum Électronique
    Réponses: 3
    Dernier message: 07/03/2007, 17h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.