// Affiche la valeur en bits de l'entrée analogique A3 qui sert comme // valeur du rapport cyclique d'un PWM produit sur la sortie TA2 // ************************************************************************* #include "msp430xG46x.h" #include "intrinsics.h" #include "LCD.h" #include "stdio.h" volatile unsigned int A3results[8]; unsigned int Index, ADC_value; void main(void) { int i; char str[9]; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog // Timer A2 pour le PWM TACTL = TASSEL_2 + TACLR; // SMCLK, Clear Tar TACCR0 = 512-1; // PWM Period TACTL |= MC_1; // Start Timer_A in up mode TACCTL2 = OUTMOD_7; // CCR2 reset/set pour TA2 TACCR2 = 511; // CCR2 PWM duty cycle, max 511 P2DIR |= 0x01; // P2.0, PWM output P2SEL |= 0x01; // P2.0 and TA2 option // Configuration de l'ADC12 P6SEL |= 0x08; // Enable A/D input ADC12CTL0 = SHT0_8 + MSC + ADC12ON; // Turn on ADC12, horloge interne, // échatillonage étendu // MSC actif pour conversions automatiques ADC12CTL0 |= REFON + REF2_5V; // Référence pour le potentiomètre ADC12CTL1 = SHP + CONSEQ_3; // Use sampling timer, set mode ADC12IE = 0x08; // Enable ADC12IFG.3 pour ADC12MEM3 ADC12MCTL3 = INCH_3; // A3 va sur le registre MEM3 ADC12CTL0 |= ENC + ADC12SC; // Enable and start ADC12 __enable_interrupt(); while (!(ADC12IFG & 0x08)); // Attendre la première conversion ADC_value = ADC12MEM3; // Read out ADC value LCD_init(); while (1) { LCD_clear(); sprintf(str,"A3=%d", ADC12MEM3); LCD_print (str); for (i=1;i<30000;i++); } } #pragma vector = ADC12_VECTOR __interrupt void ADC12_ISR(void) { ADC_value = ADC12MEM3; TACCR2 = ADC_value / 6; // ~= 3040 / 511 = CCR2 PWM duty cycle, max 511 }