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

Problème codage microprocesseur MSP430 LaunchPad



  1. #1
    phlauw

    Problème codage microprocesseur MSP430 LaunchPad


    ------

    Bonsoir à tous!

    Je cherche actuellement à réaliser un petit montage visant à allumer ou non une ou plusieurs de mes 4 LED (rouge, jaune, verte et bleue) et de leur donner une certaine intensité lumineuse en fonction de la valeur donnée en entrée par un potentiomètre. Ça peut sembler simpliste mais je débute, et ça ne marche pas!

    Je copie mon code ci-dessous (et le fichier .c est en pièce jointe), j'espère que vous pourrez m'éclairer sur ce que j'ai pu oublier ou mal coder.

    Un grand merci d'avance, et bonne soirée !

    Code:
    #include "msp430.h"
    #include "msp430g2452.h"
    #include "math.h"
    
    void main(void)
    {
      WDTCTL = WDTPW + WDTHOLD;   															// Désactivation du chien de garde
      
      ADC10CTL0 = REFON + ADC10SHT_2 + SREF_1 + ADC10ON + ADC10IE; 							// Ref interne du convertisseur + Démarrage du convertisseur analogique-numérique (ADC10ON), interrupt enable (ADC10IE) et Nombre de cycle horloge par conversion = /16
                                        
      ADC10CTL1 = INCH_0;																	// input channel A0 branchée au potentiometre
      ADC10AE0 |= 0x01;  																	//  P1.0 est définie comme entrée analogique
      
      P1DIR |= 0x02+0x04+0x08+0x10;   													 	// P1.1, 1.2, 1.3, 1.4  définis en sorties
      P1SEL |= 0x02+0x04+0x08+0x10;															// Pour utiliser en sorties PWM TA0.0, TA0.1, TA0.2, TA0.3 
      P1IE |= 0x20;																			// Le bit 6 (port P1.5 est vecteur d'interruptions)
      __enable_interrupt();																	// Interruptions autorisées
      
      TA0CCR0 = 1000;	 																		// PWM Period
      TA0CCTL1 = OUTMOD_7; 																		// CCR1 reset/set
      TA0CCR1 = 0; 																				// CCR1 PWM duty cycle initial (0%)  
      TA0CTL = TASSEL_2 + MC_1; 																// Chooses SMCLK, and Up Mode.
      
      TA1CCR0 = 1000;	 																		
      TA1CCTL1 = OUTMOD_7; 																		
      TA1CCR1 = 0; 																			
      TA1CTL = TASSEL_2 + MC_1; 
      
      TA2CCR0 = 1000;	 																		
      TA2CCTL1 = OUTMOD_7; 																		
      TA2CCR1 = 0; 																			
      TA2CTL = TASSEL_2 + MC_1; 
      
      TA3CCR0 = 1000;	 																		
      TA3CCTL1 = OUTMOD_7; 																		
      TA3CCR1 = 0; 																			
      TA3CTL = TASSEL_2 + MC_1; 
      
      for (;;)
      {
      
        ADC10CTL0 |= ENC + ADC10SC;     	 // Début de l'échantillonnage et de la conversion. ENC:  enable conversion. SC:  start conversion
    	
        __bis_SR_register(CPUOFF + GIE);    // Low power mode, en attendant le résultat + autorise les interruptions
    	
    	result = ADC10MEM;					// Conversion du résultat hexa en décimal (avec la fonction du début)
    	
    	if (ancienresult <> result)			// Changement uniquement si modification de la valeur du potentiomètre
    	{
    	
    	ancienresult = result;
    	
    	if (result < 256)					// Si valeur du potentiometre strictement inf à 256
    		{
    		rouge = 1000;
    		jaune = round(result*(1000/255));
    		vert = 0;
    		bleu = 0;
    		}
    		
    	else if ((result > 255) AND (result < 512))
    		{
    		rouge = round(1000 - (1000/255)*(result - 255));
    		jaune = 1000;
    		vert = round((result - 255)*(1000/255));
    		bleu = 0;
    		}
    		
    	else if ((result > 511) AND (result < 768))
    		{
    		rouge = 0;
    		jaune = round(1000 - (1000/255)*(result - 511));
    		vert = 1000;
    		bleu = round((valeur - 511)*(1000/255));
    		}
    		
    	else if ((result > 767) AND (result <1023)
    		{
    		rouge = 0;
    		jaune = 0;
    		vert = 10*round(100 - (100/255)*(result - 767));
    		bleu = 1000;
    		}
    	
    	TA0CCR1 = rouge;
    	TA1CCR1 = jaune;
    	TA2CCR1 = vert;
    	TA3CCR1 = bleu;
    	
    	}
    	
    	}
    	
    	#pragma vector = PORT1_VECTOR
    __interrupt void PORT_1(void)
    	{
    	P1OUT = 0x00;
    	P1IES ^= 0x20;
    	P1IFG &= 0x20;
    	return;
    	}

    -----
    Fichiers attachés Fichiers attachés
    Dernière modification par gienas ; 13/01/2013 à 20h33. Motif: Ajouté les balises code, obligatoires pour les programmes

  2. Publicité
  3. #2
    phlauw

    Re : Problème codage microprocesseur MSP430 LaunchPad

    Up ?! Des idées pour m'éclairer? J'ai beau retourner le problème dans tous les sens, je ne trouve pas...

  4. #3
    zhal

    Re : Problème codage microprocesseur MSP430 LaunchPad

    Bonjour,

    C'est normal que tu n'y arrive pas, tu ne peux pas commander en intensité une led avec un simple µC.
    Si tu regardes la documentation de la led, tu verras que la luminosité varie en fonction de l'intensité.
    Un micro-contrôleur ne peux par réaliser cela.

    Que souhaites tu faire de tout cela ?

  5. #4
    phlauw

    Re : Problème codage microprocesseur MSP430 LaunchPad

    Merci pour ta réponse !

    En réalité, je contrôle le signal de sortie en tension grâce au PWM. Une petite résistance et le tour est joué pour commander l'intensité.

    C'est simplement un petit montage à visée formative (pour apprendre à utiliser un microprocesseur, je commence par un dispositif relativement simple)

    Mais ça bloque, mes LEDs ne s'allument pas, et impossible de trouver d'où vient l'erreur...

  6. #5
    zhal

    Re : Problème codage microprocesseur MSP430 LaunchPad

    Ralala dès fois je ferais mieux de reflechir avant de repondre trop vite ....
    En plus j'avais pas vu ta érie de commentaires sur le côté.

    Je ne connais pas cette famille de µP (J'ai une platine d'essais pourtant )

    je vais lire la Dsheet.

    Quels sont tes fréquences(ou periode) et rapports cycliques ?.

  7. A voir en vidéo sur Futura
  8. #6
    phlauw

    Re : Problème codage microprocesseur MSP430 LaunchPad

    Je me suis basé sur 1000 cycles de l'horloge interne (SMCLK) pour une période, et le rapport cyclique dépend de la valeur donnée par mon entrée (valeur donnée par un potentiomètre sur P1.0 qui est convertie par le CAN)

    Merci encore

  9. Publicité
  10. #7
    zhal

    Re : Problème codage microprocesseur MSP430 LaunchPad

    La question était dans le sens de verifier que tes valeurs sont bonnes.

    Mais je pense qu'il y a surtout un defaut dans la configuration des E/s et/ou du module PWM

    De plus je trouve la doc peut pratique

  11. #8
    zhal

    Re : Problème codage microprocesseur MSP430 LaunchPad

    http://www.egr.msu.edu/classes/ece48...ion%20Note.pdf => On ne sait jamais sa peut aider

Discussions similaires

  1. TPE sur le pixels, codage binaire, codage hexadécimal..
    Par rachid84 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 09/11/2012, 16h16
  2. problème codage nombre avec transistor
    Par moki16 dans le forum Électronique
    Réponses: 7
    Dernier message: 03/11/2012, 21h28
  3. probleme codage module de commande wiessmann
    Par australo57 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 1
    Dernier message: 30/04/2012, 20h17
  4. probleme de codage phase/frequence en IRM
    Par marmotte31 dans le forum Physique
    Réponses: 64
    Dernier message: 24/06/2008, 21h11
  5. Problème de codage avec Word
    Par kingax dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 27/08/2007, 14h16
Découvrez nos comparatifs produits sur l'informatique et les technologies.