[EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

[EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]



  1. #1
    MichaelMTT

    [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]


    ------

    Bonjour,

    Je suis actuellement dans un cursus de formation continue ingénieur généraliste, j'ai un module d'Electronique Analogique et Numérique à valider.
    Pour nous entrainer, nous avons un exercice de programmation a effectuer,dont voici l'énoncé :
    A l'aide du LaunchPad, on souhaite réaliser un modulateur de largeur d’impulsion
    avec le fonctionnement suivant.
    La LED verte clignote et reste allumée pendant 0,5 seconde un rapport cyclique de
    20%.
    - Chaque appui sur le Bouton Poussoir augmente le rapport cyclique de 10%,
    la LED rouge valide l’appui du Bouton Poussoir.
    - Lorsque le rapport cyclique est à 80%, l’appui sur le Bouton Poussoir fait
    retomber le rapport cyclique à 20%.
    - Et le cycle recommence.
    J'ai démarré le codage avec l'allumage de la LED verte pour 5s, mais je ne sais pas comment créer le cycle ...
    Voici mon code :
    Code:
    #include <msp430.h>
     
    /*-------------------------------------------------------------------
                        Declaration des variables
    -------------------------------------------------------------------*/
     
    #define     LED_VERTE             BIT6 // LED2 0x40
    #define     LED_ROUGE             BIT0 // LED1 0x01
    #define     BP                BIT3 // Bouton poussoir 0x08
    #define     LED_DIR               P1DIR
    #define     LED_IN                P1IN
    #define     LED_OUT               P1OUT
    #define     BUTTON                BIT3
     
    int tempo = 0;
     
    /*-------------------------------------------------------------------
                         Programme principal
    -------------------------------------------------------------------*/
     
    void main(void)
    {
            WDTCTL = WDTPW + WDTHOLD; // desactivation du watchdog
             
            LED_DIR |= (LED_VERTE + LED_ROUGE);             // initialisation des sorties
            LED_OUT &= ~ (LED_ROUGE + LED_VERTE);           // LED OFF
            while (1)                       // Boucle infinie
            {
                    if ((LED_IN & BP) == 0)         //  Si appui sur Bouton poussoir
                    {  
                        LED_OUT = LED_VERTE;
                        _delay_cycles(5000000);                
                    }
                     
                     else
                    {
                        LED_OUT = 0x00;         // Activation des 2 LED
                    }
            }
    }
    Si une bonne âme pouvait me mettre sur la piste et aussi vérifier mon démarrage

    MERCI d'avance

    -----

  2. #2
    indri

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Y'a pas de timer avec pwm et des pins d'interrupt sur l'µc?
    Ce serait plus propre et même plus simple...
    Là où va le vent...

  3. #3
    MichaelMTT

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Euh ... Merci pour la réponse

    Mais pour être franc, je ne comprends pas

  4. #4
    indri

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Tu veux utilisé un microcontrolleur et tu ne connais pas la notion de timer et d'interruption?
    En version courte: une interruption est un un bout de programme qui va être lancé prioritairement au programme principale (il l'interrompt, ca porte bien son nom), il existe tout un tas d'interruption possible (flanc d'io, fin de reception d'un port de communication, timers et compagnie) Le gros avantage est de ne pas bloqué l'µc à faire un delais par ex!

    Un timer est une fonction interne à l'µc qui peut travailler de manière +/- autonome. De manière gloable c'est juste un compteur: il peut compter les flancs de la clock et généré une interruption arrivé à une certaine valeur par exemple..Bien souvent on peut l'utiliser pour générer un signal pwm!

    Bref pour ton ex, je supposais utiliser le timer pour faire le pwm, il y aurait qu'une variable à gérer correspondant au duty cycle! Une interruption serait également utilisée pour reperé un flanc sur une des ios et donc savoir quand on appuie sur le bp!

    Maintenant tu peux faire tout ca autrement, sans utilisé d'interruption, mais tu bloquera l'uc pdt tes tempos.
    Dans ton exemple, tu mets "_delay_cycles(5000000);" qui bloque totalement le uc! si on appuit sur le bp pile à ce moment, c'est foutu (enfin sans utilisé les interruptions)

    Tu peux faire un truk dans le genre
    while(1);
    {
    delay(1);
    k++;
    k%=100;
    if (k<duty_cycle) out=1;
    else out=0;
    if (bp) duty_cycle++;
    }
    Pour bloquer moins longtemps l'uc...
    Là où va le vent...

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

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Ben ... Oui ... Dans ta première phrase, tu as tout résumé !!!
    Pour faire simple, j'ai dans ma formation un module EAN (Electronique Analogique et Numérique) que je dois valider. Nous sommes sensés avoir 4 heures de cours en face à face, cela c'est résumé à 1 heure et l'acquisition de 80 pages à lire ...
    Donc en gros pour l'exo, j'ai fais plus ou moins comme j'ai pu et je ne sais de toute façon pas aller plus loin ...

    J'ai lu rapidement ce dont tu me parles concernant le Timer, l'interruption est abordé rapidement sans réelle précision ni exemple. Donc difficile de faire quelque chose, de plus je n'ai aucune notion en C langage avec lequel je dois programmer

    C'est pourquoi, je suis ici avec une grosse envie de crier "A L'AIDE"

    Sans me donner la solution car ça ne me servira à rien, vu que je dois expliquer le programme au prof ... Saurais tu me donner le démarrage de la programmation ?
    MERCI d'avance

  7. #6
    LordBlack

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Que ce soit 1 heure ou 4 heures de cours, aucune chance d'apprendre le langage C en si peu de temps..

    Il y a vraiment quelque chose que je ne comprend pas dans le système scolaire..

  8. #7
    MichaelMTT

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Ben c'est pas réellement le système scolaire ... C'est une formation continue donc un peu différent, je j'avoue que je suis déçu du suivi !!!
    1 journée de cours par mois pour 22 modules à préparer ...
    Enfin je vais pas débattre de ça

  9. #8
    MichaelMTT

    Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Je reviens avec ptit code que j'ai pu réaliser grâce aux différents tuto que j'ai pu trouver sur le MSP430 ...

    Voici mon Code :
    Code:
    #include "msp430g2553.h"
    
    void main(void)
    {
       int rapportCyclique = 20;  // valeur initiale du rapport cyclique
       long compteur=0;  // variable pour la valeur du compteur CCR1 (seuil 
    pour rapport cyclique)
       const long baseTemps = 16384;  // valeur pour une période de 0,5 seconde
    
       WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
       P1DIR |= 0x41; // Set P1.0 and P1.6 to output direction (LEDs)
       P1OUT &= ~ 0x41   // leds rouge et verte éteintes
    
       // PWM - pages 13 à 15 du document Interruptions Timer
       // utilisation du bloc capture 0 (utilisation pour la MLI)
       BCSCTL2 = SELS;   // SMCLK = LFXT1CLK (quartz)
       TA0CTL = MC_1 + TASSEL_2 + TACLR;  // Up_mode / SMCLK
       CCTL0 = CCIE;  // CCR0 interrupt enabled
       CCR0 = baseTemps;  // base de temps: 0,5 seconde
    
       // utilisation du bloc capture/comparaison 1 pour controler le 
    rapport cyclique
       CCTL1 = OUTMOD_7;  // mode set/reset
       compteur=baseTemps*rapportCyclique/100;  // calcul le rapport 
    cyclique initial
       CCR1 = compteur;  // initialisation de CCR1 pour le rapport cyclique 
    initial
       P1SEL |= 0x40;    // Sortie que l'on veut controler par le timer : 
    LED verte
    
       _BIS_SR(GIE); // Active les interruptions globales
    
       while (1) {  // boucle infinie
         if ((P1IN & BIT3) == 0) { //Si le bouton P1.3 est enfoncé
           rapportCyclique = rapportCyclique + 10;  // incrémentation du 
    rapport cyclique
           if (rapportCyclique > 80) rapportCyclique=20;  // cas de 
    dépassement de la limite
           compteur=baseTemps*rapportCyclique/100;  // actualisation du 
    compteur pour CCR1
           CCR1 = compteur;  // mise à jour de CCR1
           while ((P1IN & BIT3) == 0) {  // tant que le BP est appuyé
             P1OUT |= 0x01;  // allume la led rouge lors de l'appui du BP
           }
           P1OUT &= 0xFE;  // led rouge éteinte
           volatile unsigned int i;
                 i = 50000;  // boucle d'attente pour éviter les rebonds du BP
                 do i--;
                 while (i!=0);
    
         }
       }
    }
    
    // Ce code est exécuté lors de l'interruption timer
    #pragma vector=TIMER0_A0_VECTOR
    __interrupt void Timer_A (void)
    {
    
       return;
    }
    Si une bonne ame pouvait le vérifier et me dire ce qu'il y aurait à corriger

  10. #9
    ramanvda

    Lightbulb Re : [EXO] Programmer un MSP430 : Réalisation d’un PWM version 3 [Formation Continue Ingénieur]

    Salut,

    Vous avez déjà probablement dû résoudre votre problème mais je poste au cas où cela pourrait aider d'autres personnes dans le même cas.
    Sur les sites de petites annonces en ligne (comme leb**c**n par exemple), il y a souvent des annonces de personnes qui donnent des cours sur le MSP430. Surtout du coté de Lille.
    C'est vrai que cette plateforme n'est pas très documentée ni utilisée en France. Il faut voir les doc sur les sites US.
    ça vaut le coup de jeter un oeil.

    Bon courage.

Discussions similaires

  1. Formation continue et formation au sein des organismes professionnels
    Par chimene3 dans le forum Orientation après le BAC
    Réponses: 4
    Dernier message: 03/04/2013, 14h00
  2. Creation d'un Signal PWM avec Composante 1V en continue
    Par joebarteamv dans le forum Électronique
    Réponses: 9
    Dernier message: 11/03/2012, 08h32
  3. realisation pwm
    Par zionz dans le forum Électronique
    Réponses: 14
    Dernier message: 11/03/2011, 17h30
  4. Tension continue a partir de pwm
    Par invitefe70cd58 dans le forum Électronique
    Réponses: 5
    Dernier message: 04/05/2006, 12h45
  5. alim continue ou PWM
    Par vinceLGE dans le forum Électronique
    Réponses: 8
    Dernier message: 14/07/2004, 12h09
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...