Problème codage microprocesseur MSP430 LaunchPad
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Problème codage microprocesseur MSP430 LaunchPad



  1. #1
    invite2e76533e

    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 à 21h33. Motif: Ajouté les balises code, obligatoires pour les programmes

  2. #2
    invite2e76533e

    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...

  3. #3
    invitea613d208

    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 ?

  4. #4
    invite2e76533e

    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...

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

    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. #6
    invite2e76533e

    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

  8. #7
    invitea613d208

    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

  9. #8
    invitea613d208

    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 invite2dd170e6 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 09/11/2012, 17h16
  2. problème codage nombre avec transistor
    Par invite03c4c8a6 dans le forum Électronique
    Réponses: 7
    Dernier message: 03/11/2012, 22h28
  3. probleme codage module de commande wiessmann
    Par invited27acef6 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 1
    Dernier message: 30/04/2012, 21h17
  4. probleme de codage phase/frequence en IRM
    Par inviteec8f5c66 dans le forum Physique
    Réponses: 64
    Dernier message: 24/06/2008, 22h11
  5. Problème de codage avec Word
    Par invite624c5402 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 27/08/2007, 15h16
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...